🚀 I-BERT大型模型
ibert-roberta-large
模型是 RoBERTa 的僅整數量化版本,該模型在 這篇論文 中被提出。I-BERT 使用 INT8 表示法存儲所有參數,並使用僅整數運算進行整個推理過程。具體來說,I-BERT 用近似的整數運算替換了 Transformer 架構中的所有浮點運算(例如,矩陣乘法、GELU、Softmax 和層歸一化)。在 Nvidia T4 GPU 上進行測試時,與浮點版本相比,這可以使推理速度提高多達 4 倍。通過量化感知微調搜索到的最佳模型參數可以隨後導出(例如,導出到 TensorRT),以進行模型的僅整數部署。
🚀 快速開始
本部分將為你介紹 I-BERT 模型的微調過程,包括全精度微調、模型量化和僅整數微調三個階段。
✨ 主要特性
- 僅整數量化:I-BERT 存儲所有參數使用 INT8 表示法,並使用僅整數運算進行整個推理過程。
- 推理速度提升:在 Nvidia T4 GPU 上進行測試時,與浮點版本相比,推理速度可提高多達 4 倍。
- 可部署性:通過量化感知微調搜索到的最佳模型參數可以隨後導出(例如,導出到 TensorRT),以進行模型的僅整數部署。
📦 安裝指南
文檔未提及安裝相關內容,故跳過此章節。
💻 使用示例
基礎用法
本部分將為你介紹如何對 I-BERT 模型進行微調,包括全精度微調、模型量化和僅整數微調三個階段。
全精度微調
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 的微調包括三個階段:
- 全精度微調:在下游任務上從預訓練模型進行全精度微調。
- 模型量化:將全精度模型轉換為僅整數模型。
- 僅整數微調:對量化後的模型進行僅整數微調(即量化感知訓練)。
🔧 技術細節
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}
}