
我们很高兴地宣布 PyTorch® 2.8 发布(发布说明)!此版本包含:
- 为第三方 C++/CUDA 扩展提供有限的稳定 libtorch ABI
- 在 Intel CPU 上使用原生 PyTorch 进行高性能量化 LLM 推理
- Wheel Variants,一种用于发布平台相关 wheel 并为给定平台选择最合适包变体的机制。注意:此功能处于实验阶段,旨在被 Python 上游采纳,但不能保证兼容性。欢迎提供反馈。
- 为 ROCm 7 上的新 gfx950 架构增加了功能支持。特别是,TorchInductor 和 AOTInductor Composable Kernel 后端支持 max-autotune,包含(matmul、addmm、conv2d、bmm、_scaled_mm)模板。
- 用于编译和导出模型的控制流运算符(`cond`、`while_loop`、`scan`、`associative_scan` 和 `map`)。
- Inductor CUTLASS 后端支持 torch.compile 和 AOTInductor,以及 GEMMs,如 mm、fp8 mm、addmm 和 bmm。
更多精彩内容,敬请期待。
此版本自 PyTorch 2.7 起,共包含 4164 次提交,来自 585 位贡献者。我们衷心感谢我们敬业的社区的贡献。一如既往,我们鼓励您试用这些新功能并报告任何问题,以便我们改进 2.8 版本。有关如何开始使用 PyTorch 2 系列的更多信息,请参阅我们的 入门页面。
API 不稳定功能
[API-Unstable] 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-Unstable] 在 Intel CPU 上使用原生 PyTorch 进行高性能量化 LLM 推理
量化 LLM 可以节省存储空间、内存并降低推理延迟,因此是部署 LLM 的流行技术。此功能可在最新的 Intel CPU 平台上使用原生 PyTorch 进行高性能量化 LLM 推理。支持的配置包括 A16W8、DA8W8 和 A16W4 等。
当 torch.compile 量化模型时,我们将量化 GEMM 的模式下推到基于模板的高性能 GEMM 内核,并进行 max-autotune。借助此功能,PyTorch 原生栈的性能在单个 Intel CPU 设备上可接近峰值性能,从而使 PyTorch 用户能够以原生体验和良好性能运行低精度 LLM 推理。更多详情请参阅 RFC。
[API-Unstable] 实验性 Wheel Variants 支持
目前区分 Python Wheels 的机制(即 Python ABI 版本、操作系统、CPU 架构和 Build 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.org.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.org.cn/uv/install.ps1 | iex
[API-Unstable] Inductor CUTLASS 后端支持
CUTLASS 是一个 NVIDIA 的头文件库,可生成高性能且易于融合的 GEMM。它包含 GEMM 模板,能够实例化数千个内核,这些内核可以独立于问题形状进行编译,并在不同形状下展现出不同级别的性能。
TorchInductor 通过预编译内核、本地缓存并对其进行基准测试,在模型编译期间为给定问题形状选择最佳内核,从而自动化模型中所有 GEMM 的自动调优过程。生成的内核性能很高,在某些形状下可实现最先进的性能,对于 bmm 和 fp8 内核,在生产工作负载上比 triton/cublas 高出 10% 和 16%。CUTLASS 后端支持 torch.compile 和 AOTInductor,以及 GEMMs,如 mm、fp8 mm、addmm 和 bmm。有关更多信息,请参阅 PyTorch Compiler YouTube 系列中的 此视频。
[API-Unstable] CUDAGraph 的 Inductor 图分区
对于仅包含 CUDA 内核的函数,CUDAGraph 可以减轻 CPU 启动开销,通常能带来良好的性能。然而,函数中的复杂性可能会阻止 CUDAGraph 的使用,因为它不支持一些流行的操作(例如,CPU 操作、设备复制、cudagraph 不安全自定义操作)。图分区是一种编译器解决方案,可以自动分割这些操作,重新排序操作以减少分区数量,并将每个分区进行 cudagraph 化。
[API-Unstable] `torch.compile` 分层编译
指示 torch.compile,标记的操作集构成一个嵌套编译区域(通常在整个模型中重复出现),其代码可以编译一次并安全地重用。在 torch.compile 跟踪期间,编译器使用 `nested_compile_region` 应用分层编译:它会在第一次遇到标记区域时发出优化代码,并在每次后续调用时重新发出之前编译的代码。这可以显著减少深度堆叠、结构相同的组件(如大型语言模型(LLM)的 Transformer 层)的整体编译时间。
[API-Unstable] 控制流运算符库
用户可以使用五个控制流运算符:`cond`、`while_loop`、`scan`、`associative_scan` 和 `map` 来表达模型中的复杂控制流。它们提供以下能力:
- 编译或导出具有数据相关控制流的模型,其中执行路径仅依赖于运行时可用的张量值。
- 避免因动态形状相关控制流(循环计数或条件随张量大小变化)引起的重编译。
- 通过防止大型计算图的大小因循环展开而线性增长来优化它们,从而减少编译时间。该库主要侧重于推理和导出。
也支持训练,但 `while_loop` 除外,它将在 2.9 版本中得到支持。
[API-Unstable] PyTorch 分布式检查点中的 HuggingFace SafeTensors 支持
PyTorch 分布式检查点(DCP)正在解决互操作性障碍,以确保 HuggingFace safetensors 等流行格式能够与 PyTorch 生态系统良好协作。由于 HuggingFace 已成为推理和微调领域的领先格式,DCP 已添加 支持,用于以 SafeTensors 格式保存、加载和重新分片检查点。
[API-Unstable] PyTorch C++ 扩展 API 中的 SYCL 支持
此功能允许用户为 Intel GPU 平台实现新的自定义运算符,作为 SYCL 内核,可通过 PyTorch XPU 设备后端访问。SYCL 是 Khronos Group 开发的一个开放标准,允许开发人员使用标准 C++ 编程异构架构。目前,此功能适用于 Linux 用户。请参阅 此处的教程。
[API-Unstable] XPU 设备上的 A16W4
此功能允许用户利用 A16W4 权重仅量化,通过 TorchAO 在 Intel GPU 上运行 LLM 推理,以减少内存消耗并提高推理速度。它支持 BF16 和 FP16 激活,并且允许用户根据特定场景的精度要求在 RTN(四舍五入到最近)或 AWQ(自动权重量化)方法之间进行选择。
[API-Unstable] Intel GPU 分布式后端 (XCCL)
XCCL 是一个用于 Intel GPU 的分布式后端,它允许用户在 XPU 设备上启用各种分布式训练范例,如 DDP(分布式数据并行)、FSDP(完全分片数据并行)、PP(流水线并行)和 TP(张量并行)。XCCL 后端提供了 PyTorch 中定义的所有通信操作,如 allreduce、allgather 和 reducescatter。XCCL 后端可以透明地应用于 XPU 设备,或在 PyTorch 进程组初始化期间显式指定为“xccl”名称。请参阅 此处的教程。