Transformers 文档

CPU

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

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 扩展,为 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) 编译来优化模型,并且与默认的 eager 模式相比,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

IPEX

Intel Extension for PyTorch (IPEX) 为 Intel CPU 上的 PyTorch 提供了额外的优化。IPEX 通过图优化进一步优化了 TorchScript,图优化将多头注意力、Concat Linear、Linear + Add、Linear + Gelu、Add + LayerNorm 等操作融合到单个内核中,以实现更快的执行速度。

确保 IPEX 已安装,并在 Trainer 中设置 --use_opex--jit_mode_eval 标志以启用 IPEX 图优化和 TorchScript。

!pip install intel_extension_for_pytorch
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 \
--use_ipex \
--jit_mode_eval
< > GitHub 上更新