定量的コンピューティングの研究

1.深層圧縮: プルーニング、訓練された量子化、およびハフマンコーディングを使用した深層ニューラルネットワークの圧縮

1.1 手段

ネットワークのプルーニング: 一部の重要な接続のみを保持します。
重みの量子化: 重み量子化を通じて一部の重みを共有します。
ハフマン コーディング: ハフマン コーディングを通じてさらに圧縮します。
ここに画像の説明を挿入します

1.1.1 剪定

1. 通常トレーニングされたネットワークから接続を学習します
2. 重みの小さい接続をプルーニングし、しきい値より小さい接続は削除されます
3. ネットワークを再トレーニングし、残りの疎な接続からパラメーターを取得します。

1.1.2 定量化と重み付けの共有

定量化する

画像の説明を追加してください

ここに画像の説明を挿入します

重量分担

非常に単純な K 平均法を使用して各レイヤーで重みクラスタリングを実行し、同じクラスターに属するものは同じ重みサイズを共有します。注意すべき点が 1 つあります。レイヤ間のウェイトはウェイトを共有しません。

1.1.3 ハフマン符号化

ハフマン符号化では、まず文字の出現頻度を利用してツリーを作成し、次にこのツリーの構造を利用して文字ごとに特定のコードを生成します。頻繁に出現する文字には短いコードが使用され、出現頻度が低い文字には長いコードが使用されます。これにより、エンコードされた文字列の平均長が短縮され、ロスレス データ圧縮の目的が達成されます。

1.2 効果

プルーニング: 接続数を 1/13 ~ 1/9 に削減します;
量子化: 各接続を 32 ビットから 5 ビットに削減します。

最終的な効果:

  • AlextNet を 240MB から 6.9MB に 35 回圧縮しました。
  • VGG-16 を 49MB 圧縮し、552MB から 11.3MB に削減しました。
  • 計算速度は従来の3~4倍、消費エネルギーは3~7倍となり、

1.3 実験要件

1. トレーニングの重みストレージは完全である必要があり、model.state_dict() にすることはできませんが、現在の重みファイルのほとんどは完全なモデルではなくパラメーター状態です 2. 完全なネットワーク構造が必要です 3. 十分なトレーニングが
必要
ですデータ

参考: 1. [ディープニューラルネットワーク圧縮] ディープ圧縮
2.ディープ圧縮: プルーニング、トレーニング済み量子化、およびハフマンコーディングを使用したディープニューラルネットワークの圧縮
3.ディープ圧縮: プルーニング、トレーニング済み量子化、およびハフマンコーディングによるディープニューラルネットワークの圧縮
4. pytorch 公式ドキュメント
5.ハフマン符号化の理解 (ハフマン符号化)

2. トーチ公式の定量計算機能を内蔵

https://pytorch.apachecn.org/#/
https://pytorch.org/docs/stable/quantization.html

2.0 データ型の量子化 量子化テンソル

int8/uint8/int32 型のデータを保存でき、scale や zero_point などのパラメータを保持します。

>>> x = torch.rand(2,3, dtype=torch.float32) 
>>> x
tensor([[0.6839, 0.4741, 0.7451],
        [0.9301, 0.1742, 0.6835]])
 
>>> xq = torch.quantize_per_tensor(x, scale = 0.5, zero_point = 8, dtype=torch.quint8)
tensor([[0.5000, 0.5000, 0.5000],
        [1.0000, 0.0000, 0.5000]], size=(2, 3), dtype=torch.quint8,
       quantization_scheme=torch.per_tensor_affine, scale=0.5, zero_point=8)
 
>>> xq.int_repr()
tensor([[ 9,  9,  9],

2.1 2 つの定量方法

2.2ポストトレーニング静的量子化、モデルトレーニング完了後の静的量子化torch.quantize_per_tensor

scale(スケール)とzero_point(ゼロ点位置)はカスタマイズが必要です。量子化されたモデルはトレーニングできず (逆伝播もできず)、推論もできないため、操作する前に量子化する必要があります。

2.3. ポストトレーニング動的量子化、モデルトレーニング完了後の動的量子化: torch.quantization.quantize_dynamic

システムは最適なスケールとゼロポイントを自動的に選択するため、カスタマイズは必要ありません。量子化モデルは推論操作に使用できますが、トレーニングはできません (逆伝播はできません)。

おすすめ

転載: blog.csdn.net/qq_41950533/article/details/125409366
おすすめ