🤗 Transformers CPU 高效推理指南:PyTorch JIT 模式与 IPEX 图优化
【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers
本文依据 docs/source/it/perf_infer_cpu.md(CPU 高效推理指南)整理扩写,面向在 CPU 上运行 Transformers 大模型的开发者。文章聚焦两大核心主题:PyTorch JIT 模式(TorchScript)带来的推理加速原理,以及 Intel® Extension for PyTorch(IPEX)在 JIT 模式下对 Transformers 模型的图优化(Graph Optimization)能力。读完本文,你将理解 TorchScript 序列化/优化的基本机制、IPEX 融合(Fusion)算子模式的具体构成(Multi-head-attention 融合、Concat Linear、Linear+Add、Linear+Gelu、Add+LayerNorm 等),掌握 IPEX 的安装方法,并看到当前仓库源码中为支持 JIT Tracing 所做的适配细节。
一、为什么 CPU 推理需要专门的优化指南
CPU 推理是生产环境中的常见场景:没有 GPU 的服务器、边缘设备、以及需要低延迟部署的离线服务,都依赖 CPU 完成模型的推理计算。然而,Transformers 系列模型体积大、算子数量多,默认的 Eager(即时执行)模式下每个算子独立执行、频繁读写中间结果,难以发挥 CPU 的算力。
本文所依据的官方指南(docs/source/it/perf_infer_cpu.md,英文对应文档可见各语言翻译版)明确指出:本指南聚焦于在 CPU 上高效地执行大规模模型的推理。其给出的核心技术路线有两条:
- PyTorch JIT 模式(TorchScript):将模型编译为可序列化、可优化的静态图,从而获得算子融合等优化收益;
- IPEX 图优化:Intel® Extension for PyTorch 在 JIT 模式下为 Transformers 模型提供进一步优化,将高频算子模式自动融合。
下面依次展开。
二、PyTorch JIT 模式(TorchScript):从动态图到可优化静态图
2.1 TorchScript 是什么
TorchScript 是 PyTorch 提供的一种从 PyTorch 代码创建可序列化、可优化模型的方式。根据文档描述,它有两个关键能力:
- 可序列化:任意 TorchScript 程序都可以从 Python 进程中保存下来;
- 跨进程加载:保存后的程序可以加载到没有 Python 依赖的进程中运行,从而实现脱离 Python 解释器的部署形态。
与默认的 Eager 模式相比,PyTorch 的 JIT 模式通常能带来更好的模型推理性能,其收益主要来自**算子融合(Operator Fusion)**等优化方法:多个连续算子被合并为单个内核,减少中间张量的内存读写与内核启动开销。
说明:TorchScript 的入门知识(例如 Tracing 模块的用法)可参考 PyTorch 官方的 TorchScript 教程;本文仅聚焦其在 Transformers CPU 推理中的应用。
2.2 当前仓库对 JIT Tracing 的源码级适配
虽然本文关联文档主要讲述使用层面,但当前仓库的源码可以印证 Transformers 对 JIT Tracing 的兼容性设计——这也是 JIT 模式能够在 Transformers 模型上落地的前提:
- src/transformers/utils/import_utils.py 中提供了
is_tracing检查逻辑(内部调用torch.jit.is_tracing()),用于判断当前是否处于图追踪(tracing)状态; - src/transformers/utils/generic.py 中的辅助函数在 tracing 状态下会把张量显式转换为
torch.int64或torch.float32,以保证导出图的类型稳定; - src/transformers/modeling_attn_mask_utils.py 的注释明确提到:
torch.jit.trace、symbolic trace 以及torchdynamo fullgraph=True无法捕获某些数据相关的控制流(如is_causal=attention_mask is None and q_len > 1),说明注意力掩码工具在设计时便考虑了 JIT 追踪的约束; - src/transformers/integrations/sdpa_attention.py 在
torch.jit.is_tracing()为真时对is_causal张量做特殊处理; - 部分模型(如 modeling_janus.py、modeling_mlcd.py、modeling_swinv2.py、modeling_tipsv2.py)的注释与实现均标明“支持 torch.jit tracing 的同时保持向后兼容”。
从源码结构可以推断:Transformers 的建模代码在关键路径上对 JIT tracing 做了系统性适配,这正是本文推荐在 CPU 上使用 JIT 模式进行推理优化的前提条件之一。
三、IPEX 图优化:JIT 模式下的 Transformers 专属加速
3.1 什么是 IPEX 图优化
Intel® Extension for PyTorch(IPEX)为 Transformers 系列模型在JIT 模式下提供了额外的优化能力。官方指南强烈建议用户在 JIT 模式下使用 IPEX,以获得更好的 CPU 推理性能。
IPEX 的图优化(Graph Optimization)核心思路是算子融合(Fusion):把 Transformers 模型中使用频率极高的若干算子组合(Operator Patterns)融合为单一内核,从而显著减少内核调度与内存搬运开销。这些融合收益对用户是透明的——无需修改模型代码,只要在 JIT 模式下加载 IPEX 即可自动获得。
3.2 已支持的融合模式清单
根据文档,IPEX 在 JIT 模式下已经支持以下针对 Transformers 模型的融合模式,且性能表现良好:
| 融合模式 | 说明 |
|---|---|
| Multi-head-attention fusion | 多头注意力整体融合,将 QKV 投影、注意力计算等合并 |
| Concat Linear | 拼接多个 Linear 层(典型如 QKV 合并投影)融合 |
| Linear+Add | 线性层与残差加法融合 |
| Linear+Gelu | 线性层与 GELU 激活融合 |
| Add+LayerNorm | 残差加法与 LayerNorm 融合 |
这些模式基本覆盖了 Transformer 解码器/编码器块中最热点的计算路径,是 CPU 推理延迟优化的关键收益来源。
3.3 性能收益的量化依据
文档给出的分析结论如下:在 Float32 精度与 BFloat16 混合精度两种场景下,最流行的 NLP 任务中约有 70% 可以从上述融合模式中获益,这些任务包括:
- 问答(Question-Answering)
- 文本分类(Text-Classification)
- 标记分类(Token-Classification)
需要说明:上述 70% 的数据来源于官方文档的既有表述,属于对“融合模式覆盖面”的定性量化,实际收益仍与具体模型结构、输入规模、CPU 平台(支持 AVX512 / AMX 等指令集的型号)密切相关,建议在目标硬件上实测验证。
3.4 IPEX 安装方法
IPEX 的发布节奏跟随 PyTorch 版本,官方指南给出的安装建议是:查看 IPEX 官方安装页面,根据你的 PyTorch 版本选择对应的安装方式(通常通过pip install intel-extension-for-pytorch安装,并注意与 PyTorch 版本的严格匹配,同时推荐使用 Intel 官方提供的 PyPI 源或 Docker 镜像以获得预编译优化内核)。
安装完成并激活 IPEX 后,在 JIT 模式下运行 Transformers 模型即可透明获得图优化收益;IPEX 还常配合torch.jit.trace导出与torch.jit.freeze/优化执行配合使用,进一步提升执行效率。
四、在 Transformers 中使用 JIT + IPEX 的推荐路线
综合文档与仓库源码,CPU 高效推理的推荐实践路线可归纳为:
- 环境准备:安装与当前 PyTorch 版本匹配的 IPEX(参见 docs/source/it/perf_infer_cpu.md 的安装指引);
- 模型加载与编译:以 JIT 模式加载 Transformers 模型,通过
torch.jit.trace对模型进行追踪导出(tracing);当前仓库中 import_utils.py 的is_tracing逻辑与各模型的 tracing 适配(如 modeling_tipsv2.py)可以保证追踪过程正确; - IPEX 图优化生效:在 JIT 模式下启用 IPEX,由其自动完成 Multi-head-attention、Concat Linear、Linear+Add、Linear+Gelu、Add+LayerNorm 等融合,无需改动业务代码;
- 精度选择:根据需求在 Float32 与 BFloat16 混合精度之间选择,二者均可获得融合收益,其中 BFloat16 混合精度在支持相应指令集的 CPU 上通常能进一步降低内存带宽压力。
五、总结与注意事项
- JIT 模式是 CPU 推理提速的基础:TorchScript 将动态图编译为可优化静态图,通过算子融合减少内核调度与中间内存读写;
- IPEX 是 Transformers 在 Intel CPU 上的加速利器:文档强烈推荐 JIT 模式下搭配 IPEX,其融合模式针对性覆盖 Transformers 高频算子组合,且对用户透明;
- 收益有前提:融合收益与模型结构、任务类型、精度设置及 CPU 硬件指令集相关,文档所述“约 70% 的流行 NLP 任务获益”应结合自身场景实测;
- 版本匹配关键:IPEX 跟随 PyTorch 版本发布,安装时必须严格对齐版本,否则无法正常启用优化。
如果你正在 Intel CPU 上部署问答、文本分类或标记分类模型,按照“JIT 模式 + IPEX 图优化”的路线配置,是一条低改造成本、高性价比的推理加速路径。
【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考