PyTorch 团队发布

传统上,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 上找到这些命名。我们也将在此处链接任何早期阶段的特性以供清晰参考。

此外,以下特性将在此新分类体系下进行重新分类

  1. 高级 Autograd API: Beta (之前是实验性)
  2. 即时模式量化 (Eager Mode Quantization): Beta (之前是实验性)
  3. 命名张量 (Named Tensors): 原型 (之前是实验性)
  4. TorchScript/RPC: 原型 (之前是实验性)
  5. Channels Last 内存布局 (Channels Last Memory Layout): Beta (之前是实验性)
  6. 自定义 C++ 类: Beta (之前是实验性)
  7. PyTorch Mobile: Beta (之前是实验性)
  8. Java 绑定: Beta (之前是实验性)
  9. Torch.Sparse (稀疏张量): Beta (之前是实验性)

致意,

Joe, Greg, Woo 和 Jessica