亚马逊AWS官方博客

推出适用于 Apache MXNet 的模型服务器

本周早些时候,AWS 宣布推出适用于 Apache MXNet 的模型服务器,这是构建于 Apache MXNet 上的开源组件,用于处理深度学习模型。Apache MXNet 是一种可快速进行训练和推理的可扩展框架,具有易于使用、简明扼要的机器学习 API。工程师们现在可以利用适用于 Apache MXNet 的模型服务器,轻松、快速地对 MXNet 模型进行大规模处理。

什么是适用于 Apache MXNet 的模型服务器?

适用于 Apache MXNet 的模型服务器 (MMS) 是一种开源组件,旨在简化深度学习推理模型的大规模部署任务。部署推理模型并不是无关紧要的任务。它需要收集各种模型构件、设置处理堆栈、初始化并配置深度学习框架、公开终端节点、发送实时指标,以及运行自定义预处理和后处理代码,而这只是众多工程任务中的几项。虽然每项任务都不是特别复杂,但与部署模型相关的所有工作足以使部署过程变得缓慢而繁琐。

MMS 是 AWS 贡献的一款适用于 Apache MXNet 的开源工程工具集,可以极大地简化部署深度学习模型的过程。如果您使用 MMS 部署模型,可以使用以下主要功能:

  • 将所有模型构件打包并导出为单一“模型存档”文件 (其中封装了处理 MXNet 模型的所有必要内容) 的工具作业。
  • 自动设置处理堆栈,其中包括 HTTP 推理终端节点、基于 MXNet 的引擎,所有组件均根据处理的具体模型进行自动配置。
  • 预配置的 Docker 镜像,利用 NGINX、MXNet 和 MMS 进行设置,以实现可扩展的模型处理。
  • 能够自定义推理执行管道中的每个步骤,从模型初始化到预处理和推理,再到对模型输出的后处理。
  • 用于监控推理服务和终端节点的实时运行指标,涵盖延迟、资源利用率和错误。
  • 支持 OpenAPI 规范,可实现轻松集成和自动生成热门堆栈的客户端代码,例如 Java、JavaScript、C# 等等。

可通过 PyPi 程序包使用 MMS,或直接通过模型服务器 GitHub 存储库使用 MMS,它可在 Mac 和 Linux 上运行。对于可扩展的生产使用案例,我们建议使用 MMS GitHub 存储库中提供的预配置 Docker 镜像

下图演示了示例参考架构:

模型处理快速启动

MMS 很容易入门,我们将在以下示例中进行展示。此示例利用了经过预训练的 SqueezeNet v1.1 目标物检测模型,该模型在 MMS Model Zoo 中公开提供。

要开始使用,您需要具有 Python,这是使用 MMS 的唯一先决条件。如果您未安装 Python,请根据 Python 网站上的说明,安装 Python 2.7 或 3.6。

接下来,使用 PyPi 在您所选的机器上安装 MMS。MMS 支持 Mac 和 Linux 操作系统。

$ pip install mxnet-model-server

只需要运行 MMS 并向其提供模型存档 URL 或本地文件,即可完成模型的处理:

$ mxnet-model-server --models squeezenet=https://s3.amazonaws.com/model-server/models/squeezenet_v1.1/squeezenet_v1.1.model

执行此命令后,MMS 处理将启动:下载并解压缩模型存档,使用模型构件配置服务,并开始在 /squeezenet/predict 终端节点的 localhost、端口 8080 上侦听传入请求 (可配置主机和端口)。

为了测试您新建的服务,让我们通过 HTTP 发送一个推理请求,要求模型对一个图像进行分类:

$ curl -O https://s3.amazonaws.com/model-server/inputs/kitten.jpg
$ curl http://127.0.0.1:8080/squeezenet/predict -F "input0=@kitten.jpg"

您将会看到与以下内容类似的一条响应,模型识别出图像中的目标物是一只“埃及猫”,概率为 85%。成功啦!

{
  "prediction": [
    [
      {
        "class": "n02124075 Egyptian cat",
        "probability": 0.8515276312828064
      },
… (other lower probability predictions) …
}

要深入了解模型处理,请查看服务器文档

导出用于处理的模型

MMS 可处理以 MMS 模型存档格式打包的模型。它包括命令行界面 mxnet-model-export ,用于打包模型构件并导出为单一模型存档文件。导出的模型存档封装了处理模型所需的所有构件和元数据,MMS 在初始化处理终端节点时会用到它。进行处理无需其他模型元数据或资源。

下图阐明了导出过程:

如图所示,打包模型存档所需的必要构件是模型的神经网络架构和参数 (层、运算符和权重),以及服务输入和输出数据类型和张量形状定义。但是,在真实的使用案例中使用模型需要的可不只是神经网络。例如,在为模型提供图像前,许多视觉模型需要对输入图像进行预处理和转换。另一个示例是分类模型,通常需要进行后处理,以便对分类结果进行排序和截断。为了应对这些需求,并将模型完全封装到模型存档中,MMS 可以将自定义处理代码以及所有辅助文件打包到存档中,并在运行时提供这些文件。利用这一强大机制,您可以生成封装了整个处理管道的模型存档:从预处理输入到自定义推理,并在网络输出通过网络返回客户端之前应用类别标签标识符。

要了解有关模型存档导出的更多信息,请查看 MMS 导出文档

了解更多信息并做出贡献

MMS 的设计宗旨是易于使用、灵活和可扩展。除了此篇博文中提到的内容,它还提供其他功能,包括处理终端节点的配置、实时指标和日志、预配置容器映像等。

要了解有关 MMS 的更多信息,我们建议您首先参阅我们的 Single Shot MultiBox Detector (SSD) 教程,您可以通过它了解到如何导出并处理 SSD 模型。在存储库的文档文件夹中提供了更多示例和其他文档。

我们欢迎您以提问、提出请求的方式参与社区讨论并做出贡献,帮助我们进一步开发和扩展 MMS。请访问 awslabs/mxnet-model-server 存储库,开始使用!


补充阅读

了解有关 AWS 和 MXNet 的更多信息!


作者简介

Hagay Lupesko 是 AWS 深度学习的工程经理。他专注于构建让开发人员和科学家能够创造智能应用程序的深度学习工具。在业余时间,他喜欢阅读、徒步旅行以及与家人共享天伦之乐。

Ruofei Yu 是 AWS 深度学习的软件工程师。他专注于为软件工程师和科学家构建创新的深度学习工具。在业余时间,他喜欢与朋友和家人共度美好时光。

Yao Wang 是 AWS 深度学习的软件工程师。他专注于为软件工程师和科学家构建创新的深度学习工具。在业余时间,他喜欢徒步旅行、阅读和听音乐。