🚀 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}
}