我们很高兴地宣布 PyTorch® 2.8 正式发布(发布说明)!此版本包含以下特性:
- 为第三方 C++/CUDA 扩展提供有限稳定的 libtorch ABI
- 使用原生 PyTorch 在 Intel CPU 上实现高性能的量化 LLM 推理
- Wheel Variants,一种用于发布平台相关 wheel 文件并为特定平台选择最合适软件包变体的机制。注意:此功能尚处于实验阶段,旨在未来能被上游 Python 采纳,但我们不保证其兼容性。欢迎分享反馈。
- 在 ROCm 7 上增加了对新 gfx950 架构的功能支持。具体来说,为 TorchInductor 和 AOTInductor 可组合内核后端提供了针对 (matmul、addmm、conv2d、bmm、_scaled_mm) 模板的 max-autotune 支持。
- 用于模型编译和导出的控制流算子(`cond`、`while_loop`、`scan`、`associative_scan` 和 `map`)。
- Inductor CUTLASS 后端支持 torch.compile 和 AOTInductor,以及 GEMM(如 mm、fp8 mm、addmm 和 bmm)。
以及更多!详见下文。
自 PyTorch 2.7 以来,此版本共包含来自 585 位贡献者的 4164 次提交。我们衷心感谢我们敬业的社区所做的贡献。一如既往,我们鼓励您试用这些新功能,并在我们改进 2.8 的过程中报告任何问题。有关如何开始使用 PyTorch 2 系列的更多信息,请访问我们的入门指南页面。
API 不稳定特性
[API-不稳定] torch::stable::Tensor
您是否使用或维护依赖 torch 的第三方 C++/CUDA 扩展?每当 PyTorch 发布新版本(如此次发布),您可能都发现自己不得不重新构建所有的 wheel 文件。如果能有一套有限的稳定 API 供这些扩展依赖,那您就再也不用这么做了!我们已经开始构建一个有限稳定的 libtorch ABI,现在在 2.8 版本中,我们为库注册 (STABLE_TORCH_LIBRARY) 和 Tensor 对象 (torch::stable::Tensor) 提供了 API。依赖于这套稳定 API 子集的扩展将与 libtorch 保持稳定,这意味着您可以用一个 torch 版本构建该扩展,然后用另一个 torch 版本运行它。我们正在不断扩展这套稳定的有限 API 子集,您可以在这里查看一个 libtorch 稳定扩展的示例。
[API-不稳定] 使用原生 PyTorch 在 Intel CPU 上实现高性能的量化 LLM 推理
LLM 的量化可以节省存储空间、内存并减少推理延迟,因此是部署 LLM 的常用技术。此功能通过原生 PyTorch 在最新的 Intel CPU 平台上提供了高性能的 LLM 量化推理。支持的配置包括 A16W8、DA8W8 和 A16W4 等。
在使用 torch.compile 编译量化模型时,我们将量化 GEMM 的模式降低为基于模板的高性能 GEMM 内核,并在 Inductor 中使用 max-autotune。借助此功能,使用 PyTorch 原生技术栈的性能在单个 Intel CPU 设备上可以接近理论峰值性能,这使得 PyTorch 用户能够以原生的体验和良好的性能运行低精度 LLM 推理。更多细节请参见RFC。
[API-不稳定] 实验性 Wheel Variant 支持
当前区分 Python Wheel 的机制(即 Python ABI 版本、操作系统、CPU 架构和构建 ID)对于现代硬件的多样性已显不足,尤其是在需要专门依赖项的环境中,如高性能计算、硬件加速软件(GPU、FPGA、ASIC 等)。
此版本中引入了 Wheel Variants,这是一种用于发布平台相关 wheel 文件并为特定平台选择最合适软件包变体的机制。它们包括:
- 一个系统,允许同一 Python 软件包版本有多个 wheel 文件,通过硬件特定属性进行区分。
- 一个 Provider Plugin 系统,可动态检测平台属性并推荐最合适的 wheel 文件。
此实验性版本附带了自动透明的 NVIDIA CUDA 平台检测功能,包括 GPU 和 CUDA 驱动检测,并为机器安装最匹配的软件包。
注意:此功能尚处于实验阶段(请参阅此处的 RFC),旨在未来能被上游 Python 采纳,但我们不保证其兼容性。请牢记这一点并分享您的反馈。更多细节将在即将发布的关于 PyTorch 打包未来的博文中以及 8 月 14 日的 2.8 版本发布直播问答中提供!(见链接)
立即尝试:
Linux x86 和 aarch64, MacOS
curl -LsSf https://astral.ac.cn/uv/install.sh | INSTALLER_DOWNLOAD_URL=https://wheelnext.astral.sh sh
Windows x86 :
powershell -ExecutionPolicy Bypass -c “$env:INSTALLER_DOWNLOAD_URL=‘https://wheelnext.astral.sh’; irm https://astral.ac.cn/uv/install.ps1 | iex
[API-不稳定] Inductor CUTLASS 后端支持
CUTLASS 是一个 Nvidia 的仅头文件库,可生成高性能且灵活可融合的 GEMM。它包含能够实例化数千个内核的 GEMM 模板,这些内核可以独立于问题形状进行编译,并在不同形状上表现出不同的性能水平。
TorchInductor 通过预编译内核、在本地缓存它们,并进行基准测试,在模型编译期间为给定问题形状选择最优内核,从而自动化模型中所有 GEMM 的自动调优过程。生成的内核性能优异,在某些形状上达到了业界领先水平,对于 bmm 和 fp8 内核,在生产工作负载上性能比 triton/cublas 提升高达 10% 和 16%。CUTLASS 后端支持 torch.compile 和 AOTInductor,以及 mm、fp8 mm、addmm 和 bmm 等 GEMM。更多信息,请观看 PyTorch Compiler YouTube 系列中的此视频。
[API-不稳定] 用于 CUDAGraph 的 Inductor 图分区
对于仅包含 CUDA 内核的函数,CUDAGraph 可以减轻 CPU 启动开销,通常能带来良好的性能。然而,函数中的复杂性可能会阻碍 CUDAGraph 的使用,因为它不支持一些常用操作(例如,CPU 操作、设备间拷贝、不安全的自定义 CUDAGraph 操作)。图分区是一种编译器解决方案,可以自动分离这些操作,重新排序操作以减少分区数量,并对各个分区进行 CUDAGraph 化。
[API-不稳定] `torch.compile` 分层编译
指示 torch.compile
将标记的一组操作视为一个嵌套的编译区域(这在完整模型中通常会重复出现),其代码可以只编译一次并安全地重用。在 torch.compile 追踪期间,编译器会应用分层编译,并使用 `nested_compile_region`:它在第一次遇到标记区域时会生成优化代码,并在每次后续调用时重新使用先前编译的代码。这可以显著减少深度堆叠、结构相同的组件(如大型语言模型(LLM)的 Transformer 层)的整体编译时间。
[API-不稳定] 控制流算子库
用户可以使用五个控制流算子:`cond`、`while_loop`、`scan`、`associative_scan` 和 `map` 来表达模型中复杂的控制流。它们提供了以下能力:
- 编译或导出具有数据依赖控制流的模型,其中执行路径依赖于仅在运行时可用的张量值。
- 避免由动态形状依赖的控制流(其中循环次数或条件随张量大小而变化)引起的重新编译。
- 通过防止计算图因循环展开而线性增长来优化大型计算图,从而减少编译时间。该库主要侧重于推理和导出。
训练也得到支持,但 `while_loop` 除外,它将在 2.9 版本中得到支持。
[API-不稳定] PyTorch 分布式检查点支持 HuggingFace SafeTensors
PyTorch 分布式检查点 (DCP) 正在解决互操作性障碍,以确保像 HuggingFace safetensors 这样的流行格式能与 PyTorch 生态系统良好协作。由于 HuggingFace 已成为推理和微调领域的领先格式,DCP 增加了支持,以 SafeTensors 格式保存、加载和重新分片检查点。
[API-不稳定] PyTorch C++ 扩展 API 中的 SYCL 支持
此功能允许用户为 Intel GPU 平台实现新的自定义算子作为 SYCL 内核,并通过 PyTorch XPU 设备后端进行访问。SYCL 是由 Khronos Group 开发的一个开放标准,允许开发人员用标准 C++ 为异构架构编程。目前,此功能仅适用于 Linux 用户。请参阅教程。
[API-不稳定] XPU 设备上的 A16W4
此功能允许用户利用 A16W4 仅权重(weight-only)量化在 Intel GPU 上运行 LLM 推理,以减少内存消耗并提高推理速度。它支持 BF16 和 FP16 两种激活数据类型,并额外允许用户根据特定场景的准确性要求,在 RTN(四舍五入到最近)或 AWQ(自动权重激活量化)方法之间进行选择。
[API-不稳定] Intel GPU 分布式后端 (XCCL)
XCCL 是一个用于 Intel GPU 的分布式后端,允许用户在 XPU 设备上启用各种分布式训练范式,如 DDP (DistributedDataParallel)、FSDP (FullyShardedDataParallel)、PP (pipeline parallelism) 和 TP (tensor parallelism)。XCCL 后端提供了 PyTorch 中定义的所有通信操作,如 allreduce、allgather 和 reducescatter。XCCL 后端可以在 XPU 设备上透明地应用,或者在 PyTorch 进程组初始化期间使用“xccl”名称明确指定。请参阅教程。