PyTorch 2.8 已发布,带来了一系列令人兴奋的新功能,包括针对第三方 C++/CUDA 扩展的有限稳定 libtorch ABI、在英特尔 CPU 上使用原生 PyTorch 进行高性能量化 LLM 推理、实验性 Wheel Variant 支持、Inductor CUTLASS 后端支持等。在所有这些功能中,最棒的一点是 PyTorch 现在可以在英特尔至强平台上提供与流行 LLM 框架相比具有竞争力的低精度大语言模型 (LLM) 性能。
在 PyTorch 2.8 中,我们为英特尔至强处理器上的 LLM 启用了并优化了常见的量化配置,包括 A16W8、DA8W8 和 A16W4 等。当在量化模型中使用 torch.compile 时,我们将量化 GEMM 的模式降级为基于模板的高性能 GEMM 内核,并在 Inductor 中使用 max-autotune,这将利用英特尔 AMX 和英特尔 AVX-512 功能来加速处理。
通过此功能,与流行的 LLM 服务框架 vLLM 在单个英特尔至强 CPU 计算节点上以离线模式运行时相比,PyTorch 原生堆栈的性能可以达到相同水平,在某些情况下甚至更好。下面列出了 PyTorch 原生和 vLLM 之间的 TTFT 和 TPOT 比较(使用 Llama-3.1-8B 作为基准模型),针对不同的低精度配置,包括 DA8W8、A16W4 和 DA8W4。
正如我们在图中看到的,PyTorch 堆栈在大多数测试配置中都达到了相似或更好的性能。值得注意的是,vLLM 在离线模式下而不是服务模式下进行测试,这与运行原生 PyTorch 的配置一致。
要使用这些功能并获得提升的性能,用户只需:
- 选择一台支持 AMX 的 X86 CPU 机器。
- 使用 Torchao 的量化方法量化模型。
- 为
torch.compile
设置一些标志以获得最佳性能。 - 使用
torch.compile
编译模型。
然后,优化将自动在后台应用。这是一个示例。
# 1. Set torch.compile flags from torch._inductor import config as inductor_config inductor_config.cpp_wrapper = True inductor_config.max_autotune = True inductor_config.cpp.enable_concat_linear = True inductor_config.cpp.use_small_dequant_buffer = True # 2. Get model model = transformers.AutoModelForCausalLM.from_pretrained(<model_id>, ...) # 3. Quantization with Torchao from torchao.quantization.quant_api import ( quantize_, Int8DynamicActivationInt8WeightConfig, Int4WeightOnlyConfig, Int8DynamicActivationInt4WeightConfig, ) ## 3.1 DA8W8 quantize_( model, Int8DynamicActivationInt8WeightConfig(set_inductor_config=False) ) ## 3.2 A16W4 quantize_( model, Int4WeightOnlyConfig( group_size=128, int4_packing_format="opaque", set_inductor_config=False, ) ) ## 3.3 DA8W4 from torchao.dtypes import Int8DynamicActInt4WeightCPULayout from torchao.quantization.quant_primitives import MappingType quantize_( model, Int8DynamicActivationInt4WeightConfig( group_size=128, layout=Int8DynamicActInt4WeightCPULayout(), act_mapping_type=MappingType.SYMMETRIC, set_inductor_config=False, ) ) # 4. Apply optimizations with torch.compile model.forward = torch.compile(model.forward) # 5. Run the quantized and optimized model # Preparation of input_ids and generate_kwargs are not shown model.generate( input_ids, **generate_kwargs )
总结
我们讨论了在 PyTorch 2.8 中,与流行的 LLM 框架相比,在英特尔至强处理器上实现有竞争力的 LLM 性能的能力。此功能旨在使 PyTorch 用户能够使用 int8 和 int4 精度运行 LLM 仅权重(WOQ)量化,并在英特尔硬件上获得原生体验和最新的性能优化。目前的优化基于单个英特尔至强平台设备,我们将继续支持基于多个英特尔至强平台的推理,然后我们可以拥有更多高级功能,例如张量并行也可以生效。
致谢
PyTorch 2.8 的发布是英特尔至强平台的一个激动人心的里程碑,这离不开社区的深入协作和贡献。我们衷心感谢 Alban D、 Andrey Talman、 Bin Bao、 Jason Ansel、 Jerry Zhang 和 Nikita Shulga 分享了他们宝贵的想法,一丝不苟地审查了 PR,并对 RFC 提供了富有洞察力的反馈。他们的奉献推动了持续改进,并推动了英特尔平台的生态系统发展。
参考资料
产品和性能信息
测量环境:1 节点,2 个 Intel(R) Xeon(R) 6980P,128 核,TDP 500W,超线程开启,睿频开启,总内存 1536GB (24x64GB DDR5 12800MT/s [8800MT/s]),SNC 3,BIOS BHSDCRB1.IPC.3544.D02.2410010029,微码 0x11000314,1 个 I210 千兆网卡,1 个 3.5T INTEL SSDPF2KX038TZ,1 个 894.3G Micron_7450_MTFDKBG960TFR,2 个 1.8T INTEL SSDPE2MX020T4F,1 个 1.8T INTEL SSDPE2KX020T8,CentOS Stream 9,6.6.0-gnr.bkc.6.6.16.8.23.x86_64,仅使用一个 SNC 进行测试,输入 token 长度:1K,输出 token 长度:128,vLLM 在离线模式下测试。英特尔于 2025 年 7 月使用 PyTorch 2.8 RC、TorchAO (3addf30) 和 vLLM v0.8.5 进行测试。
声明和免责条款
性能因使用、配置和其他因素而异。请访问 性能指数网站了解更多信息。性能结果基于所示配置在所示日期进行的测试,可能无法反映所有公开发布的更新。请参阅备份以获取配置详细信息。没有产品或组件能够绝对安全。您的成本和结果可能会有所不同。英特尔技术可能需要启用硬件、软件或服务激活。
英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能属于他人财产。
人工智能免责声明:
人工智能功能可能需要软件购买、订阅或由软件或平台提供商启用,或者可能具有特定的配置或兼容性要求。详情请访问 www.intel.com/AIPC。结果可能有所不同。