Transformers 文档
CPU
并获得增强的文档体验
开始使用
CPU
CPU 是一种可行且经济高效的推理选择。通过一些优化方法,可以在 CPU 上使用大型模型实现良好的性能。这些方法包括融合内核以减少开销,以及将代码编译成更快的中间格式,以便在生产环境中部署。
本指南将向您展示几种优化 CPU 推理的方法。
Optimum
Optimum 是一个 Hugging Face 库,专注于优化各种硬件上的模型性能。它支持 ONNX Runtime (ORT) 模型加速器,适用于包括 CPU 在内的广泛硬件和框架。
Optimum 提供了 ORTModel 类用于加载 ONNX 模型。例如,加载用于问答推理的 optimum/roberta-base-squad2 检查点。此检查点包含一个 model.onnx 文件。
from transformers import AutoTokenizer, pipeline
from optimum.onnxruntime import ORTModelForQuestionAnswering
onnx_qa = pipeline("question-answering", model="optimum/roberta-base-squad2", tokenizer="deepset/roberta-base-squad2")
question = "What's my name?"
context = "My name is Philipp and I live in Nuremberg."
pred = onnx_qa(question, context)
Optimum 包含一个 Intel 扩展,为英特尔 CPU 提供额外的优化,如量化、剪枝和知识蒸馏。此扩展还包含将模型转换为 OpenVINO 的工具,OpenVINO 是一个用于优化和部署模型的工具包,可实现更快的推理。
BetterTransformer
BetterTransformer 是直接在 CPU 等硬件级别上执行专用 Transformers 函数的*快速路径*。快速路径执行主要包含两个部分:
- 将多个操作融合到单个内核中,以实现更快、更高效的执行
- 使用嵌套张量跳过对填充令牌的不必要计算
并非所有模型都支持 BetterTransformer。查看此列表以了解模型是否支持 BetterTransformer。
BetterTransformer 可通过 Optimum 的 to_bettertransformer() 使用。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("bigscience/bloom")
model = model.to_bettertransformer()
TorchScript
TorchScript 是一种中间 PyTorch 模型格式,可以在非 Python 环境中运行,例如对性能要求严格的 C++。训练一个 PyTorch 模型,并使用 torch.jit.trace 将其转换为 TorchScript 函数或模块。此函数通过即时 (JIT) 编译优化模型,与默认的急切模式相比,JIT 编译的模型提供更好的推理性能。
请参阅 PyTorch TorchScript 简介 教程,了解 TorchScript 的简要介绍。
在 CPU 上,使用 Trainer 中的 --jit_mode_eval
标志启用 torch.jit.trace
。
python examples/pytorch/question-answering/run_qa.py \ --model_name_or_path csarron/bert-base-uncased-squad-v1 \ --dataset_name squad \ --do_eval \ --max_seq_length 384 \ --doc_stride 128 \ --output_dir /tmp/ \ --no_cuda \ --jit_mode_eval