本文将会介绍如何使用HuggingFace的Optimum,来对微调后的BERT模型进行量化(Quantization)。
在文章NLP(六十七)BERT模型训练后动态量化(PTDQ)中,我们使用PyTorch自带的PTDQ(Post Training Dynamic Quantization)量化策略对微调后的BERT模型进行量化,取得了模型推理性能的提升(大约1.5倍)。本文将尝试使用Optimum量化工具。
Optimum介绍
Optimum 是 Transformers 的扩展,它提供了一组性能优化工具,可以在目标硬件上以最高效率训练和运行模型。
Optimum针对不同的硬件,提供了不同的优化方案,如下表:
| 硬件 | 安装命令 |
|---|---|
| ONNX runtime | python -m pip install optimum[onnxruntime] |
| Intel Neural Compressor (INC) | python -m pip install optimum[neural-compressor] |
| Intel OpenVINO | python -m pip install optimum[openvino,nncf] |
| Graphcore IPU | python -m pip install optimum[graphcore] |
| Habana Gaudi Processor (HPU) | python -m pip install optimum[habana] |
| GPU | python -m pip install optimum[onnxruntime-gpu] |
本文将会介绍基于ONNX的模型量化技术。ONNX(英语:Open Neural Network Exchange)是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch、MXNet)可以采用相同格式存储模型数据并交互。
模型量化
我们使用的微调后的BERT模型采用文章NLP(六十六)使用HuggingFace中的Trainer进行BERT模型微调中给出的文本分类模型。
首先,我们先加载PyTorch中的设备(CPU)。
# load device
import torch
device = torch.device("cpu")
接着,我们使用optimum.onnxruntime模块加载模型和tokenizer,并将模型保存为onnx格式。
from optimum.onnxruntime import ORTModelForSequenceClassification
from transformers import AutoTokenizer
import torch
model_id = "./sougou_test_trainer_256/checkpoint-96"
onnx_path = "./sougou_test_trainer_256/onnx_256"
# load vanilla transformers and convert to onnx
model = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# save onnx checkpoint and tokenizer
model.save_pretrained(onnx_path)
tokenizer.save_pretrained(onnx_path)
此时,会多出onnx_256文件夹,保存模型为model.onnx。

输出结果为:
('./sougou_test_trainer_256/onnx_256\\tokenizer_config.json',
'./sougou_test_trainer_256/onnx_256\\special_tokens_map.json',
'./sougou_test_trainer_256/onnx_256\\vocab.txt',
'./sougou_test_trainer_256/onnx_256\\added_tokens.json',
'./sougou_test_trainer_256/onnx_256\\tokenizer.json')
使用transfomers中的pipeline对模型进行快速推理。
from transformers import pipeline
vanilla_clf = pipeline("text-classification", model=model, tokenizer=tokenizer)
vanilla_clf("这期节目继续关注中国篮球的话题。众所周知,我们已经结束了男篮世界杯的所有赛程,一胜四负

本文详细介绍了如何使用HuggingFace的Optimum库对微调后的BERT模型进行量化,展示了从原始模型到量化模型的性能变化,包括平均推理时间的显著提升。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



