由杰夫·史密斯著

PyTorch 在研究方面得到了广泛的应用,但人们可能会对 PyTorch 模型投入生产的效果感到困惑。本文旨在消除人们对 PyTorch 投入生产之路的任何疑虑。通常当人们谈论将模型“投入生产”时,他们通常指的是执行推理,有时也称为模型评估、预测或服务。在 PyTorch 中,从函数调用的层面来看,推理看起来像这样:

  • 在 Python 中
    • module(input)
  • 在跟踪模块中
    • module(input)
  • 在 C++
    • at::Tensor output = module->forward(inputs).toTensor();

由于我们在 Facebook 每天使用 PyTorch 进行数百亿次的推理操作,我们已经做了很多工作来确保推理尽可能高效地运行。

服务策略

然而,关于您如何在推理中使用模型的放大视图通常并不是全部故事。在现实世界的机器学习系统中,您通常需要做的不仅仅是运行单个推理操作在 REPL 或 Jupyter 笔记本中。相反,您通常需要以某种方式将您的模型集成到更大的应用程序中。根据您需要做什么,您通常可以采取以下方法之一。

直接嵌入

在移动端等应用设置中,我们通常只是将模型作为更大程序的一部分直接调用。这不仅仅适用于应用程序;通常,机器人和专用设备也是这样工作的。在代码层面,对模型的调用与上面关于推理的部分所展示的完全相同。一个关键问题是通常在这些环境中没有 Python 解释器,这就是为什么 PyTorch 允许您从 C++调用模型,并且可以在不使用 Python 运行时的情况下分发模型。

模型微服务

如果你在服务器端环境中使用模型,并且管理多个模型,你可能选择将每个单独的模型(或每个单独的模型版本)视为一个独立的服务,通常使用某种打包机制,如 Docker 容器。然后,该服务通常通过某种服务使网络可访问,无论是使用 JSON over HTTP 还是 gRPC 等 RPC 技术。这种方法的特征是,你定义了一个具有单个端点的服务,该端点仅调用你的模型。然后,你通过管理服务(例如 kubernetes、ECS)的现有系统进行所有模型管理(推广、回滚等)。

模型服务器

另一个可能的解决方案是使用模型服务器。这是一个用于管理和提供模型的应用程序。它允许您上传多个模型并为每个模型获取不同的预测端点。通常,此类系统包括许多其他功能,以帮助解决管理和提供模型的整体问题。这可以包括指标、可视化、数据预处理等功能。甚至像自动版本控制模型系统这样简单的东西,也可以使构建模型回滚等重要功能变得更加容易。

发展模式

上面的内容是根据某一时间点的快照对不同的方法进行的一种相对随意的划分。设计模式仍在不断发展。最近,模型服务器设计开始采用更多通用服务基础设施的技术,如 Docker 容器和 Kubernetes,因此许多模型服务器开始具有上述模型微服务设计的属性。要深入了解模型服务器设计的一般概念,您可以查阅我的关于机器学习系统的书籍。

提供 PyTorch 模型

那么,如果你是 PyTorch 用户,如果你想将你的模型部署到生产环境中,你应该使用什么?

如果你使用的是移动设备或正在开发嵌入式系统,如机器人,直接在应用程序中嵌入通常是正确的选择。对于移动设备来说,你的用例可能由 ONNX 导出功能提供支持。请注意,ONNX 由于其本质特性,存在局限性,并不支持 PyTorch 项目提供的所有功能。你可以查看这个教程,了解如何使用 ONNX 将 PyTorch 模型部署到移动设备,看看这条路径是否适合你的用例。话虽如此,我们听说 PyTorch 用户在移动设备上还有更多想要做的事情,所以未来 PyTorch 可能会提供更多针对移动设备的特定功能。对于其他嵌入式系统,如机器人,可以使用 C++ API 在 PyTorch 模型上运行推理,这可能是一个合适的解决方案。

如果你不能使用云服务或更愿意使用相同的技术来管理所有服务,你可以按照这个示例使用 Flask Web 框架构建一个简单的模型微服务。

如果您想在非云服务解决方案中管理多个模型,有团队正在开发 MLFlow、Kubeflow 和 RedisAI 等模型服务器中的 PyTorch 支持。我们很高兴看到多个团队在构建开源模型服务器方面的创新,我们将在未来继续突出 PyTorch 生态系统中的创新。

如果您可以使用云来运行您的应用程序,在云中与模型一起工作有许多不错的选择。对于 AWS Sagemaker,您可以找到 AWS 提供的所有资源指南,包括如何使用 Sagemaker Python SDK 的文档。您还可以查看我们关于在 Sagemaker 上使用 PyTorch 的一些演讲。最后,如果您通过 FastAI 使用 PyTorch,他们已经编写了一个非常简单的指南,教您如何在 Sagemaker 上快速启动和运行。

在其他主要云服务中,情况也类似。在 Google Cloud 上,您可以按照这些说明获取预装 PyTorch 的深度学习虚拟机。在 Microsoft Azure 上,您有多种方式可以从 Azure Machine Learning Service 开始,到 Azure Notebooks 展示如何使用 PyTorch。

您的模型

无论您选择哪种方法将 PyTorch 模型投入生产,我们都希望支持您,帮助您取得成功。您喜欢上述选项中的哪一个?您是否在某个关键特性上遇到困难,找不到支持?我们很乐意在 PyTorch Discuss 论坛上更多讨论部署类别。我们愿意提供帮助,并在您取得成功的地方放大您的故事。