模型包
推理模型包把模型部署上线所需的代码、模型、配置等统一打包到容器镜像中。一个模型包可以有多个版本。模型包有四种类型:
TFServing:适用于支持 TFServing 的推理模型,提供 TFServing Predict REST API 接口 。
Seldon:适用于通用的推理模型,提供 Seldon REST API 接口 。
自定义:适用于通用的推理模型,可以自由定义推理接口。
模型包收藏:资源仓库 中收藏的模型包。
具体 API 调用方式,参见 在线服务 。
创建推理模型包
创建推理模型包时会自动创建一个推理模型包版本,操作步骤:
左侧功能栏选择“部署上线->模型包”;
在上部标签栏选择所需创建的模型包类型;
单击右上角“添加 TFServing 模型包”、“添加 Seldon 模型包”或者“添加自定义模型包”;
按照页面提示配置参数。
TFServing 模型包
名称
必填项
说明
模型包名称
是
版本号
是
需要包含3位数字,如 1.0.0
创建模式
是
在线制作:平台根据所选的模型、参数打包
离线导入:参考 推理模型包的导入和导出
模型
是
根据 模型包目录结构 进行映射
动态加载
否
模型文件不会被保存到模型包中,而是在部署时动态加载
存储集群
是
开启动态加载后,创建存储卷保存模型文件
存储大小
是
保存模型文件的存储卷大小
基础镜像
是
在线制作:选择 TFServing 官方镜像,
或者参考 准备 TFServing 类型模型包基础镜像 。
离线导入:需要导入的模型包镜像
环境变量
否
他人访问权限
是
具体参见 他人访问权限
标签
否
描述
否
可在 TF Serving 官方教程 中查阅如何保存适用于 TF Serving 的 Tensorflow SavedModel 模型。
Seldon 模型包
名称
必填项
说明
模型包名称
是
版本号
是
需要包含3位数字,如 1.0.0
创建模式
是
在线制作:平台根据所选的模型、参数打包
离线导入:参考 推理模型包的导入和导出
模型
是
根据 模型包目录结构 进行映射
动态加载
否
模型文件不会被保存到模型包中,而是在部署时动态加载
存储集群
是
开启动态加载后,创建存储卷保存模型文件
存储大小
是
保存模型文件的存储卷大小
基础镜像
是
在线制作:Seldon 模型包的基础镜像
离线导入:需要导入的模型包镜像
推理代码
是
根据 模型包目录结构 进行映射
环境变量
否
运行参数
否
推理代码的初始化函数参数
具体参考 准备 Seldon 类型模型包推理代码
软件依赖
否
支持运行 pip、yum、apt 来安装软件
Docker Run 命令
否
同 Dockerfile 的 RUN 命令
他人访问权限
是
具体参见 他人访问权限
标签
否
描述
否
自定义模型包
名称
必填项
说明
模型包名称
是
版本号
是
需要包含3位数字,如 1.0.0
创建模式
是
在线制作:平台根据所选的模型、参数打包
模型
否
根据 模型包目录结构 进行映射
动态加载
否
模型文件不会被保存到模型包中,而是在部署时动态加载
存储集群
是
开启动态加载后,创建存储卷保存模型文件
存储大小
是
保存模型文件的存储卷大小
基础镜像
是
在线制作:自定义模型包的基础镜像
离线导入:需要导入的模型包镜像
推理代码
否
根据 模型包目录结构 进行映射
环境变量
否
运行参数
否
推理代码的初始化函数参数
软件依赖
否
支持运行 pip、yum、apt 来安装软件
Docker Run 命令
否
同 Dockerfile 的 RUN 命令
端口号
否
推理服务监听的端口号
API
否
调用推理服务时所用的 HTTP 方法和 API 路径
启动命令
是
同 Dockerfile 的 ENTRYPOINT 命令
他人访问权限
是
具体参见 他人访问权限
标签
否
描述
否
单击“添加”。
用户可以为已有的模型包创建一个版本,操作步骤:
左侧功能栏选择“部署上线->模型包”;
查找需要添加版本的模型包,单击模型包名称;
单击右上角“添加版本”;
按照页面提示配置参数。参数含义与“创建推理模型包”时相同;
单击“添加”。
推理模型包的导入和导出
2.1 版本新增: 支持导入推理模型包。
模型包对应的镜像可以导出,然后再重新导入到平台。常用于在不同项目、集群间迁移模型包。
导出步骤:
选择成功状态的模型包,进入版本详情页。在“基础信息->模型包镜像”处单击复制按钮;
参考 镜像管理 拉取镜像。
导入步骤:
参考 镜像管理 将镜像上传到平台;
创建推理模型包,选择创建模式为“离线导入”,基础镜像为上一步上传的镜像;
单击“添加”。
建议仅导入平台“在线制作”生成的的模型包镜像,并在导入时选择对应类型。
离线导入后,将生成新的模型包镜像,导入前的原始镜像可删除。
模型包目录结构
模型包容器内的目录结构为:
/
└── workspace
├── inference_model(创建时选择的模型文件夹)
└── inference_code (创建时选择的推理代码文件夹,仅对自定义模型包有效)
查看推理模型包详情
左侧功能栏选择“部署上线->模型包”;
查找需要查看详情的模型包,单击模型包名称。模型包详情页展示了模型包的各个版本和其具体的配置参数。
搜索推理模型包
用户可以在推理模型包概览页搜索推理模型包,操作步骤:
左侧功能栏选择“部署上线->模型包”;
单击左上角搜索框;
在下拉列表中,可基于“名称”、“标签”和“创建人”搜索模型包。
用户可以在推理模型包详情页搜索推理模型包版本,操作步骤:
左侧功能栏选择“部署上线->模型包”;
查找需要搜索版本的模型包,单击模型包名称;
单击左上角搜索框;
在下拉列表中,可基于“版本”或“状态”搜索模型包版本。
编辑推理模型包
左侧功能栏选择“部署上线->模型包”;
查找需要编辑的模型包,单击该模型包的“操作”按钮;
在下拉列表中,单击“编辑”;
修改模型包“描述”和“标签”,创建人可修改“他人访问权限”;
单击“确认”。
克隆推理模型包
2.3 版本新增: 支持克隆推理模型包。
用户可以克隆推理模型包的某个版本,操作步骤:
左侧功能栏选择“部署上线->模型包”;
查找需要克隆的模型包,单击模型包名称;
查找需要克隆的版本,单击该版本的“操作”按钮;
在下拉列表中,单击“克隆”;
调整配置;
单击“创建”。
删除推理模型包
用户可以在推理模型包概览页删除推理模型包,操作步骤:
左侧功能栏选择“部署上线->模型包”;
单个删除:查找需要删除的模型包,单击该模型包的“操作”按钮,在下拉列表中,单击“删除”;
批量删除:单击表格右上角“编辑”按钮,勾选多个需要删除的模型包,单击表格右上角“删除”按钮;
单击“确认删除”。
用户可以在推理模型包详情页单独删除推理模型包的一个特定版本,操作步骤:
左侧功能栏选择“部署上线->模型包”;
查找需要删除版本的模型包,单击模型包名称;
查找需要删除的模型包版本,单击该版本的“操作”按钮;
在下拉列表中,单击“删除”;
单击“确认删除”。
在删除模型包前需要清理关联任务。当删除模型包时系统中存在关联任务时,会弹出关联任务列表。用户可在关联任务的列表中单击“删除”按钮快速删除对应的任务。
删除之后,在相关应用的列表页、详情页,仍会显示该模型包的名字,但会有删除线的标记。
准备 TFServing 类型模型包基础镜像
可以使用 TFServing 官方镜像作为 TFServing 类型模型包基础镜像。操作步骤:
在 DockerHub tensorflow/serving 仓库 中下载所需版本的 TFServing 官方镜像,或者使用符合要求的自定义 TFServing 镜像。自定义 TFServing 镜像能够接受:
--rest_api_port
参数指定 RESTful API 的端口;--model_base_path
参数指定模型所在文件夹;--model_name
参数指定模型名。
参考 镜像管理 页面推送镜像到平台并设置适用范围为 “模型包”。
准备 Seldon 类型模型包推理代码
自定义类型模型包推理代码至少需要包含一个名为 inference_service.py
的文件,其中定义一个名为 inference_service
的类 。比如:
class inference_service(object):
def __init__(self, **kargs):
"""
类初始化函数
参数
-----
kargs: 运行参数。创建模型包时添加的运行参数将会作为字典传递到此参数中。
"""
print("Initializing")
def predict(self, X, features_names):
"""
返回预测结果
参数
-----
X: 输入数组或者数据。API 调用时 "tensor" 中的数组或者 "strData" 字段中的数据将会被传递到此参数中。
feature_names: 特征名数组(可选)。API 调用时 "names" 字段中的字符串将会被传递到此参数中。
"""
print("Predict called - will run identity function")
return X
参数类型 |
参数名 |
参数值 |
inference_service 类型 __init__ 函数 kargs 参数 |
---|---|---|---|
STRING |
TestKey |
TestValue |
|
INT |
TestKey |
2 |
|
FLOAT |
TestKey |
4.6 |
|
DOUBLE |
TestKey |
3.5 |
|
BOOL |
TestKey |
True |
|
API POST 数据 |
推理代码参数 X |
推理代码参数 feature_names |
---|---|---|
{
"data": {
"names": [
"a",
"b"
],
"tensor": {
"shape": [
2,
2
],
"values": [
0,
0,
1,
1
]
}
}
}
|
[[0, 0], [1, 1]]
|
['a', 'b']
|
{"strData":"data"}
|
'data'
|
[]
|
准备 Seldon 类型模型包基础镜像
自定义类型模型包要求用户提前准备基础镜像,基础镜像中必须安装 1.18+ 版本的 seldon-core 软件库。操作步骤:
定义 Dockerfile
# 选择合适的 python 版本作为基础镜像 FROM python:3.7-slim # 安装 seldon core 等推理代码所需的通用的软件库。 RUN pip install seldon-core==1.18.2
建议在自定义类型模型包基础镜像中安装一些推理代码通用的软件库依赖,比如 Python、CUDA、TensorFlow、PyTorch、Seldon Core 等。 特定推理代码专用的软件库比如 opencv、pillow 等可以在创建模型包时配置。这么做既可以做到复用 自定义类型模型包基础镜像 , 不用每次为了不同推理代码反复构建基础镜像;又可以加快模型包创建速度,避免每次创建模型包时都安装一遍 CUDA、TensorFlow 等大型软件库。
构建镜像
在本地使用 Docker 构建镜像:
docker build . -t <镜像仓库地址>/<镜像名>:<Tag>
并参考 镜像管理 页面推送镜像到平台。
在开发环境中使用 container-utils 构建并推送镜像:
container-utils build <镜像名>:<Tag> ./Dockerfile .
设置镜像适用范围。参考 镜像管理 页面给该镜像增加“模型包”适用范围。
他人访问权限
4.0 版本新增: 支持为模型包配置他人访问权限。
创建模型包时,可以限制同项目内其他用户的访问权限,包括:“可读写”、“只读”和“不可读写”。 若管理员关闭共享权限,则他人访问权限只能为“不可读写”。
不同权限支持的操作如下:
可读写 |
只读 |
不可读写 |
|
---|---|---|---|
查看详情 |
√ |
√ |
X |
编辑 |
√ |
X |
X |
删除 |
√ |
X |
X |
添加版本 |
√ |
X |
X |
编辑版本 |
√ |
X |
X |
删除版本 |
√ |
X |
X |
使用模型包 |
√ |
√ |
X |