mct-bench
モデルの量子化、ONNX 出力、CPU での測定をつなぐ CLI を作りました。Fashion-MNIST のテスト画像10,000枚では、W4A8 の精度は94.76%から94.22%へ下がり、出力した ONNX の容量は約0.18%増えました。
この作品
公開の学習済みCNNの取得から、学習後量子化、ONNXへの出力、評価までをつなぎました。元のモデルと量子化後のモデルを同じ実行環境で測り、改善しなかった結果もそのまま比較表に残します。
MarkdownとCSVの表に加え、測定条件と生の測定値を持つJSON、使用画像の索引、素材のハッシュ、実行可能なONNXを保存します。比較結果から再実行に必要な情報へたどれる構成です。
仕組み
モデルと画像を用意
公開の学習済みモデルを読み込み、変換時の調整に使う画像と、精度を測る画像を分けます。
数値の細かさを変える
元モデルを基準に残し、同じ元モデルから数値の細かさを変えた候補をそれぞれ作り、実行用ファイルにします。
精度・容量・時間を並べる
同じ画像とCPU設定で出力ファイルを動かし、正答率・ファイル全体の容量・処理時間を並べます。
校正には訓練用の分割、精度評価にはテスト用の分割を使い、全設定で評価画像をそろえます。公開モデルの重みを固定構造のPyTorchモデルへ読み込み、出力の照合と実際の量子化器のビット幅の検査を通してから測定します。
精度と時間は、どちらも完成したONNXを共通のCPU設定で動かして測ります。容量はファイル全体を実測し、時間はウォームアップを除外してモデルの実行順を入れ替え、生の測定値まで保存します。
記録から分かること
Fashion-MNISTのテスト画像10,000枚で、W4A8のaccuracyは94.76%から94.22%へ変わり、ONNX容量は約0.18%増えました。量子化の設定名だけでは、配布するファイルが小さくなるとは限らない結果です。
選んだ出力形式では、量子化した重みの値も浮動小数点で保存されます。数値の精度、保存型、実行環境を分けて記録し、期待した効果が得られなかった理由まで確認できる比較表にしました。
- 評価画像
- 10,000枚
- Accuracy・FP32 → W4A8
- 94.76% → 94.22%
- ONNX容量の変化
- 約0.18%増
確かめた範囲
単一データセット・単一モデルの結果で、一般化はできません。測定対象は選んだONNX出力形式とホストCPUで、低ビット専用の保存形式や実機での高速化を示すものではありません。共有環境での小さな時間差から性能の優劣は主張しません。
