模型推理自定义镜像在线服务部署全流程教程
准备一个基础的自定义镜像
-
制作能提供推理服务的镜像
-
文件结构
Dockerfile
CANN包
deploy_infrence
----service.py
----opt_caption
--------infrence_service.py
--------opt_caption_graph.mindir
--------vocab.json -
文件准备
Dockerfile 文件:
CANN包:参考用户手册下载需要的版本
service.py 文件
infrence_service.py文件
caption模型文件:opt_caption_graph.mindir
码表:vocab.json
-
1.2 镜像编译
将Dockerfile,CANN包和model文件夹放在同一级目录,使用如下命令编译镜像:
docker build -t test_deploy:0.0.1 . # test_deploy为镜像名,0.0.1为版本号,教程后续均以此镜像为例展示文件内容
1.3 镜像上传
将刚才编译好的镜像打包上传到容器镜像服务(SWR)。
-
修改上传服务器的配置
-
修改
/etc/hosts
,增加如下内容:(注:*.*.*.*
是对应的IP地址)*.*.*.* swr.cn-central-221.ovaijisuan.com
-
修改
/etc/docker/daemon.json
,具体内容如下(如没有此文件需手动创建):{ "insecure-registries": [ "swr.cn-central-221.ovaijisuan.com" ] }
-
重启docker让配置生效
systemctl daemon-reload systemctl restart docker
-
-
获取登录仓库的命令
- 云资源->ModelArts->镜像服务控制台->组织管理->创建组织->输入组织名称(比如使用用户名作为组织名称)
- 云资源->ModelArts->镜像服务控制台->我的镜像->右上角客户端上传->点击step2 “生成临时登录指令” ->复制到宿主机(服务器)上执行即可登录
-
上传镜像
sudo docker tag test_deploy:0.0.1 swr.cn-central-221.ovaijisuan.com/组织名称/test_deploy:0.0.1 sudo docker push swr.cn-central-221.ovaijisuan.com/组织名称/test_deploy:0.0.1
上传成功后可以在 我的镜像 - 自有镜像 下查看到刚才上传的镜像。
2. 拉起服务
进入 云资源 -> ModelArts -> ModelArts控制台,以下操作均在该控制台进行。
2.1 导入模型
-
进入 模型管理-> 模型 -> 导入
-
在导入模型界面中
-
自行指定模型名称,版本等信息。
-
对于 元模型来源 选项,选择 从容器镜像中选择,填入 容器镜像所在的路径 如下,也可以直接点击右边文件夹符号选择刚才上传的镜像。若无 容器调用接口 配置项,说明当前版本ModelArts不支持自定义模型启动的协议和端口号,则构建的自定义镜像必须使用http协议
swr.cn-central-221.ovaijisuan.com/组织名称/test_deploy:0.0.1
- 对于 配置文件 选项,点击 在线编辑,填入如下配置文件内容,点击文件编辑框右上角保存。若当前版本ModelArts不支持自定义模型启动的协议和端口号,则无需指定protocol字段
{ "model_algorithm": "lenet", "model_type": "Image", "apis": [ { "protocol": "https", "url": "/health", "method": "get", "request": { "Content-type": "application/json" }, "response": { "Content-type": "application/json", "data": { "type": "object", "properties": { "health": { "type": "string" } } } } }, { "protocol": "https", "url": "/infer/image", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "file": { "type": "file" } } } }, "response": { "Content-type": "application/json", "data": { "type": "object", "properties": { "result": { "type": "string" } } } } } ] }
-
最后点击界面右下角 立即创建 即可成功导入模型,在我的模型界面中可以看到刚才创建好的模型。
2.2 部署服务
-
进入 部署上线 -> 在线服务 -> 部署
-
在部署界面中:
- 自行指定服务名称等信息,资源地为公共资源地
- 对于 选择模型及配置 选项,选择刚才创建好的模型
- 点击右下角提交
2.3 获取相关接口
-
进入 部署上线 -> 在线服务,选择刚才部署的服务
-
点击 调用指南 即可获取 API接口地址(用于推理请求)
-
点击 右上角用户名,进入 我的凭证 -> 记录【IAM用户名】;【帐号名】,即可获取账户信息用于认证
3. 验证接口
所有请求使用Postman进行测试,请安装好对应软件
3.1请求Token
-
修改本地host文件,加入
**.**.**.** iam-pub.cn-central-221.huaweicloud.com
避免DNS问题 -
构造请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDKGSWAM-1657011322048)(images/get_token.png)]- 链接: https://iam-pub.cn-central-221.ovaijisuan.com/v3/auth/tokens
- 请求body内容:
{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "【IAM用户名】", "password": "【IAM用户密码】", "domain": { "name": "【帐号名】" } } } }, "scope": { "project": { "name": "cn-central-221" } } } }
-
拿到Token
在返回体的Header中,X-Subject-Token字段的值即为Token,一般生效期为24小时,具体请参阅:ModelArts API
3.2开始验证(默认请求头请保留)
1. `/infer/image` 接口,按要求在Postman中填入如下请求:
+ 请求方式: POST
+ URL: API接口地址/infer/image
+ 请求头(Header):
- X-Auth-Token:"【Token】"
- Content-Type: "multipart/form-data"
+ 请求体(body/form-data)
- file: 选择文件
+ 注意:file字段需要选择为文件 ![infer_image](images/infer_image.png)