Seldon 使用 (二):打包模型
当部署模型服务(即创建 SeldonDeployment)时,模型文件已包含在 docker image 中。那模型文件是如何打包成 docker image 呢?
1 Seldon 支持的模型服务类型
一个模型服务可由三部分组成:
运行环境:包括系统环境,python 环境,依赖库等
服务代码:包括 http 服务(或 grpc 服务),metrics 服务等
模型代码:包括预测代码,模型文件等
以上三个部分,通常更新较频繁的是模型代码,通常可以复用运行环境和服务代码,简化和加快部署效率。但是有些特殊的模型服务,会需要定制的依赖环境。为了满足这两种不同的部署需求,seldon 支持两种类型的模型服务:
可复用的(reusable):复用 docker image,每次部署仅需从存储服务(repo)获取模型代码
不可复用的(non-reusable):每次部署需要重新构建 docker image,将模型代码打包在 docker image 内
2 如何构建 docker image
无论是哪种方式,我们都需要将模型打包成 docker image 形式再进行部署。这里主要先讨论 non-reusable 的方式。而构建 docker image,seldon 推荐两种方式 s2i(source-to-image)和 Dockerfile 方式。最终结果是一样的,都是产生用于部署的 docker image。两种方式的差别只是 Dockerfile 更原始和直接(需要用户了解 dockerfile 和 build 的一些相关知识),而 s2 则更贴近使用,相对更容易理解。但我觉得构建效率上并没有太大区别,看用户各自的使用习惯吧。我个人更推荐 Dockerfile 的方式。
2.1 Dockerfile 方式
需要文件如下:
模型文件:MyModel.py
依赖文件:requirements.txt
构建文件:Dockerfile 文件
其中,MyModel.py 文件内容如下:
说明:
class 类名称保持与文件同名
__init__()初始化模型,predict()模型推理时被调用
requirements.txt 内容如下:
说明:
镜像将使用 seldon-core 包实现的 microservice 加载和启动模型服务
如果 MyModel.py 还有其他依赖包,应该也加上
最后 Dockerfile 内容如下:
说明:
镜像将使用 seldon-core-microservice 加载模型,并启动 http 服务
--service-type,当前支持 MODEL,ROUTER,TRANSFORMER,COMBINER,OUTLIER_DETECTOR 这五种。将在后续文章展开说明。
所需文件准备好之后,执行如下命令,构建镜像。
其中,-t 指定镜像的名称及标签,例如 hub.abc.com:business-A/alpha-model:v1。
2.2 s2i 方式(非必须了解,可跳过)
s2i(source-to-image)是 openshift 提供的用于程序代码(source)构建成 docker image 的简化方式。
而 seldon 在 s2i 的基础上,预先构建了包含 seldon-core-microservices 的镜像,用户只需要提供自己的模型代码,就可以使用 s2i 构建镜像。
首先,需要安装 s2i(可参考官方https://github.com/openshift/source-to-image)
需要准备如下文件:
模型文件:MyModel.py(同 2.1)
依赖文件:requirements.txt(同 2.1)
构建文件:.s2i/environment
注:依赖文件默认使用的是 requirements.txt 方式,但还支持 setup.py 和 enviroment.yml 的方式。
.s2i/environment 内容如下:
这里指定了 seldon-core-microservices 服务启动时所需要的三个参数(同 2.1 Dockerfile 文件中服务的启动参数一致)。
执行如下命令完成镜像构建
其中,seldonio/seldon-core-s2i-python3 是由 seldon 提供的基础镜像,这是使用 s2i 的方式时必须选择的基础镜像。主要原因是,它们包含了两个脚本 assemble 和 run。其中 assemble 用于支持更丰富的依赖文件,run 脚本包含了启动 seldon-core-microservices 的实现方式,包括读取 s2i/environment 文件内的环境变量。
相比较于 Dockerfile 方式,s2 方式更简洁一点,用户不需要懂 Dockerfile 如何写,只需要配置好环境变量。
但却也封装和屏蔽了底层细节,有利有弊。
后面的文章,我们将介绍 seldon-core-microservices 是如何实现模型加载及推理服务的。
版权声明: 本文为 InfoQ 作者【托内多】的原创文章。
原文链接:【http://xie.infoq.cn/article/bf2ded5df304e47b7de5f1801】。文章转载请联系作者。
评论