传统上,PyTorch 的特性被分为稳定 (stable) 或实验性 (experimental),同时隐含着第三种选项:通过构建 master 分支或安装每夜构建 (可通过预构建的 whls 获得) 来测试最前沿的特性。在某些情况下,这给用户带来了关于特性成熟度、承诺以及向后兼容性方面的困惑。未来,我们希望更好地对这三种类型的特性进行分类,并在此明确定义每种分类对用户而言意味着什么。
新的特性命名
我们将继续沿用三种特性命名,但如前所述,会做一些更改:稳定 (Stable)、Beta (之前是实验性 Experimental) 和原型 (Prototype) (之前是每夜构建 Nightlies)。下面是对每种命名级别的简要描述以及对预期向后兼容性的说明。
稳定 (Stable)
此处无变化。一个稳定的特性意味着其用户价值已被或已证明,API 预计不会改变,特性性能良好,且所有文档都已到位以支持最终用户采用。
承诺级别:我们期望长期维护这些特性,并且通常不应存在重大的性能限制或文档缺失,我们还期望保持向后兼容性(尽管可能会发生破坏性更改,但会在提前一个版本时发出通知)。
Beta
我们之前将这些特性称为“实验性 (Experimental)”,发现这给一些用户带来了困惑。对于 Beta 级别的特性,其价值增益已得到证明,类似于稳定特性(例如,剪枝是一种常用的技术,用于减少神经网络模型中的参数数量,这与我们具体选择的实现细节无关),并且该特性通常能够工作并有文档说明。将此特性标记为 Beta 是因为 API 可能会根据用户反馈进行更改,性能需要改进,或者对所有算子的覆盖尚未完成。
承诺级别:我们致力于将该特性最终提升至稳定分类。但我们不承诺向后兼容性。用户可以依赖我们在此领域提供未来的解决方案,但该特性的 API 和性能特性可能会发生变化。

原型 (Prototype)
以前,这些特性只有密切关注 RFC 和 master 分支特性的开发者才知道。这些特性现已包含在发布版本中,可通过 PyPI 或 Conda 等二进制分发方式获取。我们希望在正式发布之前获得高带宽的合作伙伴反馈,以评估实用性以及我们需要对用户体验进行的任何更改。对于每个原型特性,将提供指向草稿文档或其他说明的链接。
承诺级别:我们仅承诺收集高带宽反馈。基于这些反馈以及社区成员之间潜在的进一步互动,我们将作为一个社区决定是否提升承诺级别或快速放弃。此外,虽然其中一些特性可能更具推测性(例如,新的前端 API),但其他特性具有明显的实用性(例如,模型优化),但可能处于一个阶段,在这个阶段,在非高带宽渠道之外收集反馈是不切实际的,例如,该特性可能处于早期阶段,可能变化很快(PR 提交速度过快,无法赶上主要版本发布),和/或总体上正在积极开发中。
当前特性有什么变化?
首先,您可以在 pytorch.org/docs 上找到这些命名。我们也将在此处链接任何早期阶段的特性以供清晰参考。
此外,以下特性将在此新分类体系下进行重新分类
- 高级 Autograd API: Beta (之前是实验性)
- 即时模式量化 (Eager Mode Quantization): Beta (之前是实验性)
- 命名张量 (Named Tensors): 原型 (之前是实验性)
- TorchScript/RPC: 原型 (之前是实验性)
- Channels Last 内存布局 (Channels Last Memory Layout): Beta (之前是实验性)
- 自定义 C++ 类: Beta (之前是实验性)
- PyTorch Mobile: Beta (之前是实验性)
- Java 绑定: Beta (之前是实验性)
- Torch.Sparse (稀疏张量): Beta (之前是实验性)
致意,
Joe, Greg, Woo 和 Jessica