跳转到主要内容
博客

PyTorch 中的模型服务

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

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

  • 在 Python 中
    • 模块(输入)
  • 在跟踪模块中
    • 模块(输入)
  • 在 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 框架构建一个简单的模型微服务。

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

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

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

您的模型

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