由 PyTorch 团队

传统上,PyTorch 中的功能被分为稳定或实验性,隐含的第三个选项是通过构建 master 或安装夜间构建(通过预构建 whls 提供)来测试 bleeding edge 功能。这在一些建议中导致了一些关于准备程度、对功能的承诺以及用户视角可预期的向后兼容性的混淆。展望未来,我们希望更好地分类这三种功能类型,并明确地在此处定义每个类型对用户而言的含义。

新功能标识

我们将继续保留三种功能标识,但正如之前提到的,有一些变化:稳定、Beta(之前称为实验性)和原型(之前称为夜间构建)。以下是每种标识的简要描述以及预期的向后兼容性评论:

稳定

这里没有变化。稳定功能意味着用户价值已经得到证明,API 不会发生变化,功能性能良好,所有文档都存在以支持最终用户的采用。

承诺水平:我们预计将长期保持这些功能,通常不应存在重大性能限制、文档空白,我们也期望保持向后兼容性(尽管可能会发生破坏性变更,并且将在提前一个版本发布通知)。

测试版

我们之前将这些功能称为“实验性”,我们发现这导致一些用户产生了混淆。对于 Beta 级别的功能,增值效果类似于稳定功能,已经得到验证(例如,剪枝是减少 NN 模型参数数量的常用技术,与我们的特定实现细节无关)并且该功能通常可以正常工作并得到文档说明。该功能被标记为 Beta,因为 API 可能会根据用户反馈而更改,因为性能需要提高,或者因为操作符的覆盖范围尚未完整。

承诺程度:我们承诺将此功能看到稳定分类。然而,我们并不承诺向后兼容。用户可以依赖我们在此领域提供解决方案,但此功能的 API 和性能特性可能会发生变化。

原型

以前,这些是只有密切关注 RFC 和 master 分支功能的开发者所知的特性。这些特性是发布的一部分,可以作为 PyPI 或 Conda 等二进制分发的组成部分使用。我们希望在真实发布之前获得高带宽合作伙伴的反馈,以便评估其效用以及我们需要对用户体验进行的任何更改。对于每个原型功能,将提供指向草案文档或其他说明的指针。

承诺水平:我们只承诺收集高带宽反馈。基于此反馈以及社区成员之间可能出现的进一步互动,我们将作为一个社区来决定是否要升级承诺水平或快速失败。此外,虽然其中一些功能可能更为推测性(例如新的前端 API),而其他功能则具有明显的实用性(例如模型优化),但可能处于无法通过高带宽渠道收集反馈的状态,例如功能可能处于早期阶段,可能发展迅速(PR 提交得太快,无法捕捉到主要版本)以及/或者正在进行一般性开发。

当前功能有哪些变化?

首先最重要的是,您可以在 pytorch.org/docs 上找到这些标识。我们还将在此处链接任何早期阶段的功能,以便清晰。

此外,以下功能将根据这一新标准重新分类:

  1. 高级自动微分 API:Beta(原为实验性)
  2. 紧急模式量化:Beta(原为实验性)
  3. 命名张量:原型(原为实验性)
  4. TorchScript/RPC:原型(原为实验性)
  5. 通道最后记忆布局:Beta(之前为实验性)
  6. 自定义 C++类:Beta(之前为实验性)
  7. PyTorch 移动:Beta(之前为实验性)
  8. Java 绑定:Beta(之前为实验性)
  9. 火炬.Sparse:Beta(曾是实验性)

干杯,

乔、格雷格、吴与杰西卡