E.A.3 モデル最適化技術


最適化は「できるだけ小さくすること」ではありません。1 つの制約を改善しながら、何を失ったかも確認することです。
小さな量子化誤差チェックを動かす
values = [0.1234, 0.5678, 0.9012]
quantized = [round(value * 255) / 255 for value in values]
errors = [abs(original - compressed) for original, compressed in zip(values, quantized)]
print([round(value, 4) for value in quantized])
print(f"max_error={max(errors):.4f}")
期待される出力:
[0.1216, 0.5686, 0.902]
max_error=0.0018
これが最小の最適化習慣です。圧縮し、誤差を測り、その誤差が許容できるか判断します。
適切な最適化経路を選ぶ
| 技術 | 向いている場面 | リリース前に確認すること |
|---|---|---|
| 量子化 | 遅延とメモリが大きすぎる | 実際の検証ケースでの精度低下 |
| 枝刈り | 不要な重みやチャネルが多い | runtime が本当に速くなるか |
| 蒸留 | 小さいモデルが大きいモデルをまねられる | student が境界ケースで失敗しないか |
| 演算融合 | runtime overhead が大きい | エンジンが融合後のグラフを支えるか |
| Batching / scheduling | 多くのリクエストが同時に来る | tail latency とキュー待ち |
実用的な順序
- baseline の遅延、メモリ、精度を測る。
- 1 回に 1 つの最適化だけ試す。
- before/after 指標を記録する。
- 失敗例を残す。
- トレードオフが見えるときだけ出す。
合格チェック
1 つの最適化の利点、起こり得るコスト、本番デプロイ前に見るべき指標を説明できれば合格です。