🚀 I-BERT大型モデル
ibert-roberta-large
モデルは RoBERTa の整数のみの量子化バージョンで、このモデルは この論文 で提案されました。I-BERT はすべてのパラメータを INT8 表記で保存し、整数のみの演算を使用して推論プロセス全体を行います。具体的には、I-BERT は Transformer アーキテクチャ内のすべての浮動小数点演算(例えば、行列乗算、GELU、Softmax、層正規化)を近似的な整数演算に置き換えます。Nvidia T4 GPU でテストした場合、浮動小数点バージョンと比較して、推論速度を最大 4 倍に向上させることができます。量子化認識微調整によって探索された最適なモデルパラメータは、その後(例えば、TensorRT に)エクスポートして、モデルの整数のみのデプロイを行うことができます。
🚀 クイックスタート
このセクションでは、I-BERT モデルの微調整プロセスを紹介します。これには、全精度微調整、モデル量子化、整数のみの微調整の 3 つの段階が含まれます。
✨ 主な機能
- 整数のみの量子化:I-BERT はすべてのパラメータを INT8 表記で保存し、整数のみの演算を使用して推論プロセス全体を行います。
- 推論速度の向上:Nvidia T4 GPU でテストした場合、浮動小数点バージョンと比較して、推論速度を最大 4 倍に向上させることができます。
- デプロイ可能:量子化認識微調整によって探索された最適なモデルパラメータは、その後(例えば、TensorRT に)エクスポートして、モデルの整数のみのデプロイを行うことができます。
💻 使用例
基本的な使用法
このセクションでは、I-BERT モデルの微調整方法を紹介します。これには、全精度微調整、モデル量子化、整数のみの微調整の 3 つの段階が含まれます。
全精度微調整
I-BERT の全精度微調整は RoBERTa の微調整に似ています。例えば、次のコマンドを実行して、MRPC テキスト分類タスクで微調整を行うことができます。
python examples/text-classification/run_glue.py \
--model_name_or_path kssteven/ibert-roberta-large \
--task_name MRPC \
--do_eval \
--do_train \
--evaluation_strategy epoch \
--max_seq_length 128 \
--per_device_train_batch_size 32 \
--save_steps 115 \
--learning_rate 2e-5 \
--num_train_epochs 10 \
--output_dir $OUTPUT_DIR
モデル量子化
全精度微調整が完了したら、チェックポイントディレクトリ内の config.json
ファイルを開き、quantize
属性を true
に設定します。
{
"_name_or_path": "kssteven/ibert-roberta-large",
"architectures": [
"IBertForSequenceClassification"
],
"attention_probs_dropout_prob": 0.1,
"bos_token_id": 0,
"eos_token_id": 2,
"finetuning_task": "mrpc",
"force_dequant": "none",
"hidden_act": "gelu",
"hidden_dropout_prob": 0.1,
"hidden_size": 768,
"initializer_range": 0.02,
"intermediate_size": 3072,
"layer_norm_eps": 1e-05,
"max_position_embeddings": 514,
"model_type": "ibert",
"num_attention_heads": 12,
"num_hidden_layers": 12,
"pad_token_id": 1,
"position_embedding_type": "absolute",
"quant_mode": true,
"tokenizer_class": "RobertaTokenizer",
"transformers_version": "4.4.0.dev0",
"type_vocab_size": 1,
"vocab_size": 50265
}
上記の操作を完了すると、チェックポイントをロードするときに、モデルは自動的に整数のみのモードで実行されます。また、同じディレクトリ内の optimizer.pt
、scheduler.pt
、および trainer_state.json
ファイルを削除することを確認してください。そうしないと、Hugging Face は後続の整数のみの微調整のためにオプティマイザ、スケジューラ、またはトレーナーの状態をリセットしません。
整数のみの微調整(量子化認識トレーニング)
最後に、修正されたチェックポイントファイルをロードするだけで、整数のみの微調整を実行できます。次の例のコマンドで唯一の違いは model_name_or_path
パラメータであることに注意してください。
python examples/text-classification/run_glue.py \
--model_name_or_path $CHECKPOINT_DIR
--task_name MRPC \
--do_eval \
--do_train \
--evaluation_strategy epoch \
--max_seq_length 128 \
--per_device_train_batch_size 32 \
--save_steps 115 \
--learning_rate 1e-6 \
--num_train_epochs 10 \
--output_dir $OUTPUT_DIR
📚 ドキュメント
微調整プロセス
I-BERT の微調整には 3 つの段階が含まれます。
- 全精度微調整:下流タスクで事前学習モデルから全精度微調整を行います。
- モデル量子化:全精度モデルを整数のみのモデルに変換します。
- 整数のみの微調整:量子化されたモデルに対して整数のみの微調整(すなわち、量子化認識トレーニング)を行います。
🔧 技術詳細
I-BERT はすべてのパラメータを INT8 表記で保存し、整数のみの演算を使用して推論プロセス全体を行います。具体的には、I-BERT は Transformer アーキテクチャ内のすべての浮動小数点演算(例えば、行列乗算、GELU、Softmax、層正規化)を近似的な整数演算に置き換えます。Nvidia T4 GPU でテストした場合、浮動小数点バージョンと比較して、推論速度を最大 4 倍に向上させることができます。
📚 引用情報
I-BERT を使用する場合は、我々の論文 を引用してください。
@article{kim2021bert,
title={I-BERT: Integer-only BERT Quantization},
author={Kim, Sehoon and Gholami, Amir and Yao, Zhewei and Mahoney, Michael W and Keutzer, Kurt},
journal={arXiv preprint arXiv:2101.01321},
year={2021}
}