使用自定义引擎在ModelArts Standard创建模型
使用自定义引擎创建模型,用户可以通过选择自己存储在SWR服务中的镜像作为模型的引擎,指定预先存储于OBS服务中的文件目录路径作为模型包来创建模型,轻松地应对ModelArts平台预置引擎无法满足个性化诉求的场景。
自定义引擎创建模型的规范
使用自定义引擎创建模型,用户的SWR镜像、OBS模型包和文件大小需要满足以下规范:
- SWR镜像规范:
- 镜像必须内置一个用户名为“ma-user”,组名为“ma-group”的普通用户,且必须确保该用户的uid=1000、gid=100。内置用户的dockerfile指令如下:
groupadd -g 100 ma-group && useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user
- 明确设置镜像的启动命令。在dockerfile文件中指定cmd,dockerfile指令示例如下:
CMD sh /home/mind/run.sh
启动入口文件run.sh需要自定义。示例如下:
#!/bin/bash # 自定义脚本内容 ... # run.sh调用app.py启动服务器,app.py请参考https示例 python app.py
除了按上述要求设置启动命令,您也可以在镜像中自定义启动命令,在创建模型时填写与您镜像中相同的启动命令。
- 提供的服务可使用HTTPS/HTTP协议和监听的容器端口,端口和协议可根据镜像实际使用情况自行填写,ModelArts提供的请求协议和端口号的缺省值是HTTPS和8080。请参考https示例。
- (可选)健康检查的URL路径必须为"/health"。
- 镜像必须内置一个用户名为“ma-user”,组名为“ma-group”的普通用户,且必须确保该用户的uid=1000、gid=100。内置用户的dockerfile指令如下:
- OBS模型包规范
模型包的名字必须为model。模型包规范请参见模型包规范介绍。
- 文件大小规范
当使用公共资源池时,SWR的镜像大小(指下载后的镜像大小,非SWR界面显示的压缩后的镜像大小)和OBS模型包大小总和不大于30G。
https示例
使用Flask启动https,Webserver代码示例如下:
from flask import Flask, request import json app = Flask(__name__) @app.route('/greet', methods=['POST']) def say_hello_func(): print("----------- in hello func ----------") data = json.loads(request.get_data(as_text=True)) print(data) username = data['name'] rsp_msg = 'Hello, {}!'.format(username) return json.dumps({"response":rsp_msg}, indent=4) @app.route('/goodbye', methods=['GET']) def say_goodbye_func(): print("----------- in goodbye func ----------") return '\nGoodbye!\n' @app.route('/', methods=['POST']) def default_func(): print("----------- in default func ----------") data = json.loads(request.get_data(as_text=True)) return '\n called default func !\n {} \n'.format(str(data)) @app.route('/health', methods=['GET']) def healthy(): return "{\"status\": \"OK\"}" # host must be "0.0.0.0", port must be 8080 if __name__ == '__main__': app.run(host="0.0.0.0", port=8080, ssl_context='adhoc')
在本地机器调试
自定义引擎的规范可以在安装有docker的本地机器上通过以下步骤提前验证:
- 将自定义引擎镜像下载至本地机器,假设镜像名为custom_engine:v1。
- 将模型包文件夹复制到本地机器,假设模型包文件夹名字为model。
- 在模型包文件夹的同级目录下验证如下命令拉起服务:
docker run --user 1000:100 -p 8080:8080 -v model:/home/mind/model custom_engine:v1
该指令无法完全模拟线上,主要是由于-v挂载进去的目录是root权限。在线上,模型文件从OBS下载到/home/mind/model目录之后,文件owner将统一修改为ma-user。
- 在本地机器上启动另一个终端,执行以下验证指令,得到符合预期的推理结果。
curl https://127.0.0.1:8080/${推理服务的请求路径}
推理部署示例
本节将详细说明以自定义引擎方式创建模型的步骤。
- 创建模型并查看模型详情
登录ModelArts管理控制台,进入“模型管理”页面中,单击“创建模型”,进入模型创建页面,设置相关参数如下:
- 元模型来源:选择“从对象存储服务(OBS)中选择”。
- 选择元模型:从OBS中选择一个模型包。
- AI引擎:选择“Custom”。
- 引擎包:从容器镜像中选择一个镜像。
- 容器调用接口:端口和协议可根据镜像实际使用情况自行填写。
单击“立即创建”,跳转到模型列表页,查看模型状态,当状态变为“正常”,模型创建成功。
图1 创建模型
单击模型名称,进入模型详情页面,查看模型详情信息。
- 部署服务并查看详情
在模型详情页面,单击右上角“部署>在线服务”,进入服务部署页面,模型和版本默认选中,选择合适的“计算节点规格”(例如CPU:2核 8GB),其他参数可保持默认值,单击“下一步”,跳转至服务列表页,当服务状态变为“运行中”,服务部署成功。
单击服务名称,进入服务详情页面,查看服务详情信息,单击“日志”页签,查看服务日志信息。
图2 查看服务日志信息
- 服务预测
图3 服务预测