![[特殊字符] Transformers CPU 高效推理指南:PyTorch JIT 模式与 IPEX 图优化](http://pic.xiahunao.cn/yaotu/[特殊字符] Transformers CPU 高效推理指南:PyTorch JIT 模式与 IPEX 图优化)
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.mdCPU 高效推理指南整理扩写面向在 CPU 上运行 Transformers 大模型的开发者。文章聚焦两大核心主题PyTorch JIT 模式TorchScript带来的推理加速原理以及 Intel® Extension for PyTorchIPEX在 JIT 模式下对 Transformers 模型的图优化Graph Optimization能力。读完本文你将理解 TorchScript 序列化/优化的基本机制、IPEX 融合Fusion算子模式的具体构成Multi-head-attention 融合、Concat Linear、LinearAdd、LinearGelu、AddLayerNorm 等掌握 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 fullgraphTrue无法捕获某些数据相关的控制流如is_causalattention_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 PyTorchIPEX为 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 合并投影融合LinearAdd线性层与残差加法融合LinearGelu线性层与 GELU 激活融合AddLayerNorm残差加法与 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、LinearAdd、LinearGelu、AddLayerNorm 等融合无需改动业务代码精度选择根据需求在 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),仅供参考