ガイド
周知のとおり、コンピューター ビジョン テクノロジー (CV) は、エンタープライズ向け人工知能アプリケーションの割合が最も高い分野の 1 つです。企業のコストを削減するために、エンジニアは「より正確、より小型、より高速に」AI モデルを展開するためのさまざまなモデル圧縮テクノロジーを研究してきました。自然言語処理(NLP)の分野では、継続的なモデル精度の向上に伴い、BERTやGPTに代表される事前学習モデルなど、モデルの規模もますます大規模化しています。エンタープライズ NLP モデルの展開に対する障害。
この記事では、トレーニング ソース コードを変更することなく、数十分の定量的トレーニングを通じて、モデルの精度を確保しながら、コストを大幅に削減する、低コスト、高収量のAIモデル自動圧縮ツール(ACT、Auto Compression Toolkit)を紹介します。モデルのサイズを削減し、ビデオ メモリの使用量を削減し、モデルの推論速度を向上させ、AI モデルの迅速な実装を促進します。
YOLOv7 モデルは、 ACT の知識蒸留ベースの量子化トレーニング手法を使用してトレーニングされており、元の FP32 モデルと比較して、INT8 量子化モデルは75%削減され、NVIDIA GPU での推論速度は 5.89 倍になります。ACT の非構造化スパースおよび蒸留手法を使用してPP-HumanSeg モデルをトレーニングすると、ARM CPU での推論速度が圧縮前と比較して最大1.49 倍向上しました。
表1 CVモデルに対する自動圧縮ツールの圧縮効果と推論高速化
ACT の構造化スパースおよび蒸留量子化手法を使用して ERNIE3.0 モデルをトレーニングすると、元の FP32 と比較して、INT8 量子化後のモデルは185%削減され、 NVIDIA GPU での推論加速は 6.37 倍になりました。
表 2 NLP モデルにおける自動圧縮ツールの圧縮効果と推論高速化
この記事は、次の 6 つの側面から技術的な解釈をさらに進めます。全文は約 3900 ワード、予想読了時間は 5 分です。
一
4 ステップの YOLOv7 自動圧縮の練習
二
4 ステップの BERT 自動圧縮の練習
三つ
モデルの推論展開
四
ライブクラスの登録
五
自動圧縮技術の解釈
六
今後の仕事の見通し
スターにご注目いただきありがとうございます:
https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression
自動圧縮技術交流グループに参加する
会員特典
このアップグレードの内容を自動圧縮について詳しく説明するライブ講義へのリンクを取得します。
圧縮チームが企画した次のような大量の学習を行います。
ディープラーニングコース
圧縮方向に関するトップカンファレンスの論文集
以前のライブブロードキャストコースビデオを圧縮する
Baidu 最高賞を受賞: Model Compression Architect トレーニング コースの教材
グループへの参加方法
コードをスキャンして公式アカウントをフォローし、アンケートに記入し、WeChat グループに参加してください。
生放送前にグループ発表にて特典を発表
01
4 ステップの YOLOv7 自動圧縮の練習
1. 予測モデルを準備します。ONNXモデルをエクスポートします。
git clone https://github.com/WongKinYiu/yolov7.git
cd yolov7
python export.py --weights yolov7-tiny.pt --grid
2. トレーニングデータの準備と DataLoader の定義: COCO または VOC 形式でデータを準備します。データ前処理モジュールを定義します。このうち、データ前処理Readerの設定は以下の通りです。
train_dataset = paddle.vision.datasets.ImageFolder(
global_config['image_path'], transform=yolo_image_preprocess)
train_loader = paddle.io.DataLoader(
train_dataset,
batch_size=1,
shuffle=True,
drop_last=True,
num_workers=0)
3. 構成ファイルの定義:量子化トレーニングの構成ファイルを定義します。Distillation は蒸留パラメーター構成を意味します。Quantization は量子化パラメーター構成を意味します。TrainConfig はトレーニング ラウンド数、オプティマイザー、およびトレーニング中のその他の設定を意味します。特定のハイパーパラメータ設定については、ACT ハイパーパラメータ設定ドキュメントを参照してください。。
Distillation: # 蒸馏参数设置
alpha: 1.0 # 蒸馏loss所占权重
loss: soft_label
Quantization: # 量化参数设置
use_pact: true # 是否使用PACT量化算法
activation_quantize_type: 'moving_average_abs_max' # 激活量化方式,选择'moving_average_abs_max'即可
quantize_op_types: # 需要量化的OP类型,可以是conv2d、depthwise_conv2d、mul、matmul_v2等
- conv2d
- depthwise_conv2d
TrainConfig: # 训练的配置
train_iter: 3000 # 训练的轮数
eval_iter: 1000 # 训练中每次评估精度的间隔轮数
learning_rate: 0.00001 # 训练学习率
optimizer_builder: # 优化器设置
optimizer:
type: SGD
weight_decay: 4.0e-05
4. 圧縮の開始: ACT 量子化トレーニングは 2 行のコードで開始できます。ACT を開始するときは、モデル ファイル パス (model_dir)、モデル ファイル名 (model_filename)、パラメーター ファイル名 (params_filename)、圧縮モデル ストレージ パス (save_dir)、圧縮構成ファイル (config)、データローダー、および評価を渡す必要があります。精度 eval_callback。
from paddleslim.auto_compression import AutoCompression
ac = AutoCompression(
model_dir=global_config["model_dir"],
model_filename=global_config["model_filename"],
params_filename=global_config["params_filename"],
save_dir=FLAGS.save_dir,
config=all_config,
train_dataloader=train_loader,
eval_callback=eval_function)
ac.compress()
02
4 ステップの BERT 自動圧縮の練習
1. 予測モデルを準備する
Paddle モデルではこの手順を省略して直接圧縮できますが、PyTorch モデルでは次の 2 つの方法のいずれかを使用でき、モデル変換の完了後にモデル圧縮を開始できます。
PyTorch2Paddle (X2Paddle ツールボックス内) を使用して、PyTorch 動的グラフ モデルをフライング パドル静的グラフ モデルに直接変換します (次のコードはこのメソッドを使用します)。
ONNX2Paddle を使用して、PyTorch 動的グラフ モデルを ONNX 形式で保存し、それをフライング パドルの静的グラフ モデルに変換します。
import torch
import numpy as np
# 将PyTorch模型设置为eval模式
torch_model.eval()
# 构建输入,
input_ids = torch.zeros([batch_size, max_length]).long()
token_type_ids = torch.zeros([batch_size, max_length]).long()
attention_msk = torch.zeros([batch_size, max_length]).long()
# 进行转换
from x2paddle.convert import pytorch2paddle
pytorch2paddle(torch_model,
save_dir='./x2paddle_cola/',
jit_type="trace",
input_examples=[input_ids, attention_msk, token_type_ids])
2. トレーニング データを準備し、DataLoader を定義します。この場合、自動圧縮実験はデフォルトで GLUE データを使用して実行され、PaddleNLP は対応するデータ セットを自動的にダウンロードします。
3. 構成ファイルを定義します。自動圧縮で Transformer エンコーダ構造のモデルに特定の圧縮戦略が指定されていない場合は、圧縮のために構造化されたプルーニングと量子化が自動的に選択されます。特定の圧縮戦略を個別に設定したい場合は、特定のハイパーパラメータ設定ACT ハイパーパラメータ設定ドキュメントを参照してください。。
### 训练配置
train_config = {
"epochs": 3, ### 压缩训练epoch数量
"eval_iter": 855, ### 训练多少轮数进行一次测试
"learning_rate": 1.0e-6, ### 压缩训练过程中的学习率
"optimizer_builder": { ### 优化器配置
"optimizer": {"type": "AdamW"},
"weight_decay": 0.01 ### 权重衰减值
},
"origin_metric": 0.6006 ### 压缩前模型精度,用来确认转换过来的模型和实现的dataloader是否正确
}
4. 圧縮を開始します。2 行のコードで ACT 量子化トレーニングを開始できます。ACT を開始するときは、モデル ファイル パス (model_dir)、モデル ファイル名 (model_filename)、パラメーター ファイル名 (params_filename)、圧縮モデル ストレージ パス (save_dir)、圧縮構成ファイル (config)、データローダー、および評価を渡す必要があります。精度 eval_callback。
### 调用自动压缩接口
ac = AutoCompression(
model_dir='./x2paddle_cola',
model_filename='model.pdmodel',
params_filename='model.pdiparams',
save_dir=save_dir,
config={'TrainConfig': train_config}, #config,
train_dataloader=train_dataloader,
eval_callback=eval_function,
eval_dataloader=eval_dataloader)
ac.compress()
上記は簡略化したキーコードです。すぐに体験したい場合は、次の手順に従ってください。
https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression/pytorch_huggingface サンプル ドキュメントとコード エクスペリエンス。
トレーニングが完了すると、model.pdmodel および model.pdiparams ファイルが save_dir パスの下に生成されます。これまでのところ、モデルのトレーニング圧縮作業は完了しており、推論の展開については次のセクションを参照します。
03
モデルの推論展開
圧縮されトレーニングされたモデルに基づいて、開発者はFastDeploy 推論展開キットを直接使用して展開を完了できます。FastDeploy でデプロイする場合、開発者は 1 行のコードを使用して、必要に応じて Paddle Inference、Paddle Lite、TensorRT、OpenVINO、ONNX Runtime、RKNN などのさまざまなバックエンドを切り替え、さまざまなハードウェアのデプロイメントを実装できます。
04
ライブ登録
AI モデルの圧縮戦略を知りたい場合、および自動圧縮ツールのアルゴリズムと機能について詳しく知りたい場合は、QR コードをスキャンしてグループに参加し、ライブ ブロードキャスト ルームをフォローしてください。
生放送時間:2022 年11月7日(月曜日)と11月8日(火曜日)の20:30~21:30。QRコードをスキャンしてご登録ください。
05
自動圧縮技術の解釈
1
モデル自動圧縮ツール開発のきっかけと考え方
モデル枝刈りはモデル圧縮の重要な手段ですが、実際に使用すると次の 2 つの困難があります。
1) 枝刈り損失の直接使用は比較的大きく、精度要件を満たすことができません。
構造枝刈りは、ネットワーク内の重要でないニューロンを切り取ることです。枝刈り後に再トレーニングされますが、通常、事前トレーニングされたモデルの一部の情報を復元することは困難であり、枝刈り後のモデルの精度が低下します。事前トレーニングされたデータが再トレーニングのために追加される場合、枝刈りのコストは大幅に増加します。
2) モデルの枝刈りにはトレーニング コードの修正が必要で、操作が複雑で、技術的な敷居が高い
構造化プルーニングは次の 3 つのステップで構成されます。
ルールに従ってニューロンの重要性を計算します。
重要性に基づいてモデルのニューロンを枝刈りする。
枝刈りされたモデルを再トレーニングします。
これらの手順では、開発者は元のトレーニング コードでプルーニング関連のインターフェイスを直接呼び出し、段階的な操作を実行する必要があります。通常、プロジェクトのエンジニアリングは非常に複雑で、トレーニング コードの変更は技術的に複雑で時間がかかります。
モデル量子化はモデル推論の速度を向上させる手段の一つですが、実際に使用する場合には以下の3つの困難があります。
1) モデルの活性化値の分布が不均一であり、大きな量子化誤差が発生する
オーバートレーニングは、モデルのアクティベーションが不均一に分布する原因の 1 つです。たとえば、YOLOv6s の反復プロセスでは、モデルの収束を改善するために、通常、モデルのトレーニング サイクルを延長する必要があります。しかし、これは、COCO データセット上のモデルの過剰適合や、量子化ノイズを増加させる一部のレイヤーの極値分布など、いくつかの隠れた危険ももたらします。YOLOv6s の Conv の各レイヤーの量子化精度を分析したところ、一部のレイヤーの精度が特に著しく低下していることが判明し、その結果、検証セット上の YOLOv6s モデルの精度は、オフライン量子化後に 10% 低下し、量子化できなくなりました。ビジネス要件を満たします。
2) タスクの複雑さが高く、モデルの精度は量子化誤差に大きく影響されます。
タスクの複雑さが高くなるほど、モデルの量子化によって生じる精度の損失も大きくなります。ターゲット検出は、ターゲットの位置決めとターゲットの分類という 2 つのタスクを組み合わせており、全体的な複雑さは比較的高いため、その精度は量子化の影響をより大きく受けます。通常のオフライン量子化では、モデルのアクティベーション値の数値分布を変更することはできませんが、量子化スケールを分布に適応させるだけです。数値分布が不均一な活性化値に遭遇すると、オフライン量子化の量子化誤差が大きくなります。
3) 量子化トレーニングにはトレーニング コードを変更する必要があり、複雑で技術的に困難です。
量子化トレーニングでは、オフライン量子化(Post Training Quantization)と比較して、オフラインでの量子化精度の低下の度合いを軽減できます。トレーニングプロセス中、量子化トレーニングメソッドはアクティベーション値の分布を継続的に調整して、アクティベーションの分布を量子化により適したものにします。しかし、量子化トレーニングのコストは比較的高く、人件費が高い一方で、量子化トレーニングを実現するにはモデルネットワークやトレーニングコードの変更が必要であり、シミュレートされた量子化操作を挿入します。一方で、時間コストが高く、トレーニング中にトレーニング用に完全なトレーニング セットをロードする必要があります。
2
モデル自動圧縮ツール - 構造化プルーニングと定量分析
ACT は、NLP モデルの圧縮アルゴリズムの自動組み合わせをサポートしています。ACTはモデルの構造を判断し、Transformer型モデルであればシリアル圧縮の「構造化枝刈り」と「量子化」を自動選択します。上記 2 つのモジュールの具体的なテクニカル分析は次のとおりです。
1) 構造化枝刈り手法は、次の 4 つのステップで構成されます。
教師モデルを構築します。推論モデルをロードし、推論モデルのコピーを教師モデルとしてメモリにコピーします。
構造化枝刈りモデルの構築:元のモデルのパラメータとアテンション ヘッドの重要性を並べ替え、重要なパラメータとアテンション ヘッドをパラメータの前側に配置してから、モデルに対して構造枝刈りを実行し、モデル内のさまざまなパラメータを減算します。比率 重要なパラメータと注意事項。構造化枝刈り後のモデルは、圧縮トレーニングのスチューデント モデルとして使用されます。
蒸留損失を追加します。モデル構造を自動的に分析し、蒸留ノードとしてトレーニング可能なパラメーターを含む最後の演算子の出力を見つけます。
蒸留トレーニング:元のモデルの出力を使用して、構造化プルーニング モデルの出力を監視し、構造化プルーニング トレーニングを実行して、圧縮プロセス全体を完了します。
枝刈り操作を実現するグラフ構造化枝刈り+蒸留
2) 定量化手法:
量子化戦略の自動選択: ACT には、オフライン量子化と量子化トレーニングという 2 つの量子化戦略が含まれており、NLP モデルを量子化するときに自動的に選択されます。最初に少量のオフライン量子化を実行します。精度の低下が大きい場合は、蒸留量子化トレーニングを使用したモデルの量子化と圧縮に切り替えます。精度の損失が小さい場合は、量子化にオフライン量子化ハイパーパラメータ検索を使用します。
グラフ NLP モデルの量子化戦略
蒸留と量子化トレーニングの具体的な手順には、次の 3 つの手順が含まれます (このテクノロジは CV タスクでよく使用されます)。
a) 教師モデルを構築します。推論モデル ファイルをロードし、推論モデルを知識蒸留の教師モデルとしてメモリにコピーし、元のモデルを学生モデルとしてコピーします。
b) 損失の追加:モデル構造を自動的に分析し、蒸留損失の追加に適した層 (通常はトレーニング可能なパラメーターを持つ最後の層) を見つけます。たとえば、検出モデルのヘッドに複数の分岐がある場合、各ヘッドの最後の変換が蒸留ノードとして使用されます。
c) 蒸留トレーニング:教師モデルは、蒸留損失を通じて元のモデルのスパース トレーニングまたは量子化トレーニングを監視し、モデル圧縮のプロセスを完了します。
グラフ量子化蒸留トレーニング技術アニメーション
ACT は、CV および NLP モデルのさまざまな圧縮要件を満たすために、オフラインの定量的ハイパーパラメーター検索、自動アルゴリズムの組み合わせ、ハードウェア認識など、より多くの機能もサポートしています。ACT の機能とその他のシナリオでの応用の詳細については、自動圧縮ツールのホームページの紹介を参照してください。
とても良いプロジェクトですので、ぜひポイントスターを応援し、体験しに来てください!
https://github.com/PaddlePaddle/PaddleSlim/tree/develop/example/auto_compression
06
今後の仕事の見通し
ACT 自動圧縮ツールは、より多くの AI モデル (Transformer、FastSpeech2 など) の自動圧縮をサポートします。今後も ACT 機能のアップグレードを継続して、圧縮後の精度の損失をさらに削減し、圧縮効率を向上させ、より多くのシナリオで構造化プルーニングと非構造化スパース性の機能を検証して、究極の圧縮高速化エクスペリエンスを実現していきます。ACT 自動圧縮ツールは、Paddle Inference、Paddle Lite、ONNX ランタイムなどの FastDeploy のさまざまなバックエンド推論エンジンを含む、より多くの展開方法をサポートし、AI モデルの実装をさらに促進します。
【テーブルインジケーターの説明】
テスト環境と補足説明: 表内の mAPval は、モデルに対応する論文内の指標を指します。たとえば、YOLOv5 は COCO テスト セットでテストされ、MobileNetV3 は Imagenet データセットでテストされます。
【さらに盛り上がる生放送のススメ】