自定义镜像规范
针对您本地开发的模型,在制作AI应用的自定义镜像时,需满足ModelArts定义的规范。
- 自定义镜像中不能包含恶意代码。
- 自定义镜像大小不超过10GB。
- 镜像对外接口
- (可选)健康检查接口
- 日志文件输出
- 镜像启动入口
- 镜像依赖组件
- (可选)保持Http长链接,无损滚动升级
- (可选)处理SIGTERM信号,容器优雅退出
镜像对外接口
ModelArts用于推理的镜像的对外服务接口需要为8080,推理接口需与config.json文件中apis定义的url一致,当镜像启动时可以直接访问。下面是mnist镜像的访问示例,该镜像内含mnist数据集训练的模型,可以识别手写数字。其中listen_ip为容器IP,您可以通过启动自定义镜像,在容器中获取容器IP。
镜像对外接口请求示例
◉ 请求示例
listen_ip获取示例
◉ 返回示例
(可选)健康检查接口
如果在滚动升级时要求不中断业务,那么必须在config.json文件中配置健康检查的接口,供ModelArts调用,在config.json文件中配置。当业务可提供正常服务时,健康检查接口返回健康状态,否则返回异常状态。如果要实现无损滚动升级,必须配置健康检查接口。
健康检查接口示例如下:
◉ URI
GET /health
◉ 请求示例
curl -X GET \ http://{listen_ip}:8080/health
◉ 响应示例
{"health": "true"}
◉ 状态码
200 请求成功
日志文件输出
为保证日志内容可以正常显示,日志信息需要打印到标准输出。
当前ModelArts推理基础镜像使用的python的logging模块,采用的是默认的日志级别Warnning,即当前只有warning级别的日志可以默认查询出来。如果想要指定INFO等级的日志能够查询出来,需要在代码中指定logging的输出日志等级为INFO级别。
镜像启动入口
如果需要部署ModelArts批量服务,镜像的启动入口文件需要为“/home/run.sh”,采用CMD设置默认启动路径,例如Dockerfile如下:
CMD ["sh", "/home/run.sh"]
镜像依赖组件
如果需要部署ModelArts批量服务,镜像内需要安装python、jre/jdk、zip等组件包。
(可选)保持Http长链接,无损滚动升级
ModelArts服务如果需要支持滚动升级的过程中不中断业务,那么需要将服务的Http的“keep-alive”参数设置为200s。以gunicorn服务框架为例,gunicorn缺省情形下不支持keep-alive,需要同时安装gevent并配置启动参数“--keep-alive 200 -k gevent”。不同服务框架参数设置有区别,请以实际情况为准。
(可选)处理SIGTERM信号,容器优雅退出
ModelArts服务如果需要支持滚动升级的过程中不中断业务,那么需要在容器中捕获SIGTERM信号,并且在收到SIGTERM信号之后等待60秒再优雅退出容器。提前优雅退出容器可能会导致在滚动升级的过程中业务概率中断。要保证容器优雅退出,从收到SIGTERM信号开始,业务需要将收到的请求全部处理完毕再结束,这个处理时长最多不超过90秒。例如run.sh如下所示: