PyTorch 2.14.0发布:新增NVGEMM、torch.switch,多处API破坏性变更
PyTorch 2.14.0带来NVGEMM、torch.switch和动态形状声明等新特性,同时移除torch.cholesky等旧API,并调整clamp梯度边界行为。
AI解读:PyTorch 2.14.0是一次特性丰富但兼容性代价较高的版本更新。新特性集中在编译器和分布式:NVGEMM让Inductor能自动调优CUTLASS内核,torch.switch把条件分支从二路扩展到多路,@dynamic_spec让动态形状声明在torch.compile、torch.export和make_fx之间共享,这些对需要优化模型推理或训练性能的工程师是直接利好。但版本也移除了torch.cholesky、torch.qr等旧API,改变了clamp在边界点的梯度(从 1 变为 0),并调整了bfloat16复数提升规则,可能导致现有代码行为变化或直接报错。如果你的代码依赖旧API或精确的梯度行为,升级前需要对照发行说明逐项修改。对于仅使用标准API的普通用户,此次升级影响有限,可以按常规节奏规划迁移。
PyTorch 2.14.0于 2025 年发布,包含多项新特性,同时引入多个破坏性变更和弃用。主要亮点包括:新增NVGEMM,将CuTeDSL生成的CUTLASS内核引入Inductor,支持epilogue fusion、缩放和NVFP4 GEMM,并与Triton和ATen一起进行自动调优;torch.switch将torch.cond泛化为多路分支,torch.while_loop现在可以被捕获到CUDA图中;通过 @dynamic_spec声明式动态形状,可在torch.compile、torch.export和make_fx间共享;实验性的torch.compile支持复数张量,可将复数运算分解为实部和虚部计算。
新特性与改进
分布式方面,新增从torchcomms移植的nccl2后端,实现完整的集合通信契约,支持非阻塞通信器和即时通信器拆分。容错成为c10d的一等概念,支持进程组就地重构、单边RMA窗口,以及适用于任何后端而非仅NCCL的Flight Recorder。
Apple Silicon获得原生线性代数支持,包括Jacobi内核的SVD、eigh、QR和Cholesky,并进行了五部分归约重写和进一步从MPSGraph到Metal内核的迁移。
平台支持扩展:ROCm 7.14 wheels从TheRock pip SDK生成,Intel XPU增加原生图捕获,Inductor目标支持Rubin(sm_107)。
破坏性变更
torch.nn.LinearCrossEntropyOptions不再接受acc_policy="balanced",需改用 "compact",否则抛出ValueError。
Autograd中clamp和min/max的边界子梯度现在遵循所选调度器模式的输入空间:标量clamp边界在等式处的输入梯度从 1 变为 0;张量边界在平局时在输入和边界之间均匀分配梯度。fmin和fmax采用同样的偶数平局拆分。
自定义Python进程组实现new_group() 时需接受backend关键字参数,否则抛出TypeError。NCCL对称内存池不再自动升级注册后分配的新段,需手动重新注册。split_group() 对非成员排名返回GroupMember.NON_GROUP_MEMBER而非None。
移除了弃用的torch.cholesky() 和torch.qr() API,调用会抛出RuntimeError,需改用torch.linalg版本。
移除了torch.profiler.profile和torch.autograd.profiler.profile中的弃用use_cuda参数,改用activities或use_device。
Dynamo的tvm后端现在仅使用TVM的relax前端,relay路径已移除,依赖TVM 0.20及以上版本。
C++前端移除了c10::Scalar::isIntegral() 和c10::isIntegralType(ScalarType) 的零参数重载,需显式传入includeBool。
setup.py现在是弃用垫片,构建需通过pip或python -m build。
MPS C++帮助函数重命名,is_macos_13_or_newer() 改为is_macos_at_least(),枚举成员名称简化。
bfloat16复数类型提升现在使用新的torch.bcomplex32外壳dtype,可能影响之前使用complex64的运算。
弃用与移除
选择性激活检查点默认行为将改变以尊重saved_tensors_hooks,新参数respect_saved_tensors_hooks允许显式选择,目前默认None保留旧行为但发出FutureWarning。
torch.distributed.config.compile_on_one_rank重定向为torch.compiler.config.compile_on_one_rank,并发出FutureWarning。
实验性profiler_metrics和profiler_measure_per_kernel选项不再启用CUPTI范围分析,被忽略并发出FutureWarning。with_modules分析选项弃用,建议改用with_stack。
torch._dynamo.config.enable_faithful_generator_behavior弃用并成为无操作,生成器始终以惰性方式跟踪。
CUDAGraph.register_generator_state() 弃用,CUDA图现在在捕获期间首次使用RNG时自动注册生成器状态。GreenContext.set_context() 和pop_context() 弃用,建议使用自定义流。
TorchScript API现在发出可见的FutureWarning而非隐藏的DeprecationWarning。