跳转到主要内容
博客

PyTorch 中的模型服务

作者: 2019 年 5 月 8 日2024 年 11 月 16 日暂无评论

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

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

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

服务策略

然而,这种关于如何在推理中使用模型的局部视图通常并非全部。在真实的机器学习系统中,您通常需要做的不只是在 REPL 或 Jupyter notebook 中运行单个推理操作。相反,您通常需要以某种方式将模型集成到更大的应用程序中。根据您的需求,您通常可以采用以下方法之一。

直接嵌入

在移动应用程序等场景中,我们经常将模型作为较大程序的一部分直接调用。这不仅仅适用于应用程序;通常,这也是机器人和专用设备的工作方式。在代码层面,对模型的调用与上面推理部分所示的完全相同。一个关键的担忧是,此类环境中通常不存在 Python 解释器,这就是为什么 PyTorch 允许您从 C++ 调用模型并在不需要 Python 运行时的情况下部署模型。

模型微服务

如果您在服务器端上下文中使用模型并管理多个模型,您可能会选择将每个单独的模型(或每个单独的模型版本)视为一个独立的服务,通常使用某种打包机制,例如 Docker 容器。然后,该服务通常通过某种服务(使用 HTTP 上的 JSON 或 gRPC 等 RPC 技术)提供网络访问。这种方法的关键特征是您正在定义一个具有单个端点的服务,该服务只调用您的模型。然后,您通过您已经用于管理服务(例如 kubernetes、ECS)的任何系统来执行所有模型管理(升级、回滚等)。

模型服务器

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

演进中的模式

以上是基于时间快照对不同方法的某种任意划分。设计模式仍在不断演进。最近,模型服务器设计已开始采用更多通用服务基础设施技术,例如 Docker 容器和 kubernetes,因此许多模型服务器已开始共享上述模型微服务设计的属性。如需深入了解模型服务器设计的通用概念,您可以查阅我的机器学习系统书籍

PyTorch 模型服务

那么,如果您是 PyTorch 用户,如果想将模型投入生产,应该使用什么呢?

如果您在移动设备上或从事机器人等嵌入式系统工作,直接嵌入到您的应用程序中通常是正确的选择。对于移动设备,您的用例可能由 ONNX 导出功能提供服务。请注意,ONNX 本身具有局限性,并且不支持更大型 PyTorch 项目提供的所有功能。您可以查阅本教程,了解如何使用 ONNX 将 PyTorch 模型部署到移动设备,以查看此路径是否适合您的用例。话虽如此,我们听说 PyTorch 用户希望在移动设备上做更多事情,因此未来 PyTorch 中将提供更多移动设备专用功能。对于其他嵌入式系统,例如机器人,从 C++ API 对 PyTorch 模型进行推理可能是正确的解决方案。

如果您无法使用云或更喜欢使用相同的技术管理所有服务,您可以按照此示例,使用 Flask Web 框架构建一个简单的模型微服务。

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

如果您可以在应用程序中使用云,则有几个很棒的选项可以在云中处理模型。对于 AWS Sagemaker,您可以找到一份指南,其中包含 AWS 提供的所有 PyTorch 相关资源,包括如何使用 Sagemaker Python SDK 的文档。您还可以观看我们关于在 Sagemaker 上使用 PyTorch 的 一些 讲座。最后,如果您碰巧通过 FastAI 使用 PyTorch,那么他们编写了一个非常简单的指南,说明如何在 Sagemaker 上快速入门。

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

您的模型

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