BayesServing 模型部署

介绍在 OpenBayes 下的模型部署

最后更新于

在完成了模型的训练后可以将模型以某种方式部署到服务端或者存放到设备端对外提供实时的模型推理服务。「模型部署(BayesServing)」就是 OpenBayes 提供的服务端模型推理功能。

创建 BayesServing 需要以下三个步骤:

  1. 导出训练好的模型,模型的训练可以在 BayesGear - 算力容器 中完成
  2. 编写 predictor.py 模型部署脚本,其编写规则在 Serving Predictor 有详细的介绍,在 openbayes-serving-examples 模型仓库中有编写样例作为参考
  3. 选择导出模型合适的「模式」,将以上准备的数据「绑定」到服务中部署模型

其中「数据绑定」与创建算力容器时类似,同时支持容器输出和数据仓库中的路径绑定。

模型部署 - 快速上手 中介绍了创建一个模型部署的完整样例。

支持的模式

目前「模型部署」支持两种模式:

  1. ONNX 格式模型部署
  2. Python 通用模型部署

其中 ONNX 格式模型部署对 *.onnx 格式模型在其所使用的 ONNXPredictor 做了封装,省去了 *.onnx 模型加载的一些通用代码。Python 则支持所有格式和框架的模型部署。

模型数据与 predictor.py 的存放

在创建模型部署前,需要将训练好的模型文件与 predictor.py 放在同一个目录下。具体目录所在的位置不受限制:

  • 可以是任意算力容器的工作空间下
  • 也可以是通过文件上传而已来的数据仓库中
  • 甚至是 OpenBayes 中的公开模型内容

其绑定时的选取方式与算力容器创建时绑定数据非常类似:

不过与算力容器也有以下的区别:

  1. 模型部署时只能绑定一个目录,因此要求模型文件 predictor.py 必须同属于同一个数据空间下,该目录以只读形式绑定,没有目录的写权限,请勿存储任意数据到目录中
  2. 模型部署时可以选择具体绑定的「数据仓库」或「模型输出」的目录层级,而不是必须选取根目录,如下图所示,可以绑定 onnx/image-classifier-modelnetv2 这样的子目录

模型文件与 predictor.py 代码结构

模型部署必须包含两部分内容:

  1. predictor.py 以及其所依赖的文件,用于模型请求的处理
  2. 模型文件,尤其是 ONNX 模式下,*.onnx 文件必须存放在所绑定目录的根目录下,并且只支持一个 *.onnx 文件的部署

其中 predictor.py 文件的要求在 Serving Predictor 有详细的介绍。模型文件的导出在模型导出有详细的介绍。

除此之外还可以包含另外两类内容:

  1. .env 用于创建在 predictor.py 中所使用的环境变量,每一行的格式必须是 VARIABLE=value 这种形式。
  2. requirements.txt dependencies.sh conda-packages.txt 等外部依赖管理的文件,用于安装除镜像中预装之外其他依赖,详细内容可以在依赖管理找到。

版本管理

模型部署有「版本」的概念,版本之间相互独立可以支持不同的运行时环境、资源类型以及部署内容。当部署新的版本的时候老的版本会自动下线。与「数据集」类似其版本号以数字序号递增。

详细的操作在 模型部署的管理 有介绍。