モデル圧縮 - トリミング、量子化、蒸留

参考:
https://zhuanlan.zhihu.com/p/642412124

モデル圧縮は、ニューラル ネットワークの構造とパラメーターを縮小する手法です。圧縮モデルは、
少量のコンピューティング リソースを使用しながら、元のモデルと同等のパフォーマンスを実現します。一般的なリソースには、枝刈り、量子化、蒸留、神経構造検索 (NAS) などが含まれます。

ここに画像の説明を挿入

##模型压缩与工程部署关注的常用参数


1)模型大小 
  
   一般使用参数量parameter来衡量,单位是兆(M)


 2)实时运行内存、模型计算量 
  
   就是模型实际运行时所占的内存资源消耗,单位是兆字节 (MB);模型计算量常见有FLOPs(浮点运算数)和MACs两种衡量的方式(MACs ≈  2 * FLOPs)


 3)模型推理响应时间、吞吐量QPS
   
   响应时间是指模型对请求作出响应的时间,单位一般是毫秒(MS);吞吐量是指模型在单位时间内处理请求的数量

1. 切断

コードリファレンス: https://pytorch.org/tutorials/intermediate/pruning_tutorial.html

1)结构化的剪枝

神经元剪枝pruning neurons,注意剪枝力度有点大,会对模型精度产生较大的影响

 2)非结构化的剪枝

突出剪枝pruning synapses,精度的损失就会小一些,但最终产生的是稀疏矩阵

ここに画像の説明を挿入

2. 定量化

量子化とは、信号の連続値 (または多数の可能な離散値) を有限数 (またはそれ以下) の離散値に近似するプロセスを指します。一般に、浮動小数点のアクティベーション値または重み (通常は 32 ビット浮動小数点数として表現される) は、低ビット整数 (8 ビット) として近似されます。

1) ストレージのオーバーヘッドと帯域幅要件が軽減される

2) 計算速度の高速化

3) エネルギー消費量と占有面積の削減

4) 許容される精度の損失
ここに画像の説明を挿入
上図に示すように、FP32 乗算のエネルギー消費量は INT8 乗算の 18.5 倍、
チップ フットプリントは int8 の 27.3 倍です。

モデルの量子化方法

1) 線形量子化

对称量化
非对称量化 

ここに画像の説明を挿入
2) 非線形量子化

非线性函数
聚类、对数                  

ここに画像の説明を挿入

3) 2値化1ビット、3値化2ビットなど。

4) 混合精度量子化

3. 蒸留

コードリファレンス: https://github.com/airaria/TextBrewer

KD と呼ばれる知識の蒸留は、その名前が示すように、訓練されたモデル (教師ネットワーク) に含まれる知識 (「知識」) を抽出し、別の小さなモデル (生徒ネットワーク) に蒸留 (「蒸留」) することです。
ここに画像の説明を挿入

4. ニューラルアーキテクチャの検索

コードリファレンス: https://github.com/awslabs/autogluon

ニューラルアーキテクチャ検索(Neural Architecture Search、NAS)とは、検索スペースと呼ばれる候補のニューラルネットワーク構造、コンポーネント(ブロック)のセットが与えられると、コントローラーを介して、特定の検索に従ってセットからサブネットワーク構造を検索することを指します。アルゴリズム戦略、およびパフォーマンス評価戦略を使用してパフォーマンスを評価します。これは自動機械学習 (AutoML) の一種であり、EfficientNet (Google)、RegNet (Facebook) およびその他のモデルなどです。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_42357472/article/details/131712068