AI开发平台MODELARTS-AI应用的自定义镜像制作流程:自定义镜像的配置规范

时间:2024-08-16 20:39:17

自定义镜像 的配置规范

  • 镜像对外接口

    设置镜像的对外服务接口,推理接口需与config.json文件中apis定义的url一致,当镜像启动时可以直接访问。下面是mnist镜像的访问示例,该镜像内含mnist数据集训练的模型,可以识别手写数字。其中listen_ip为容器IP,您可以通过启动自定义镜像,在容器中获取容器IP。

    • 请求示例
      curl -X POST \ http://{listen_ip}:8080/ \ -F images=@seven.jpg
      图4 listen_ip获取示例
    • 返回示例
      {"mnist_result": 7}
  • (可选)健康检查接口
    如果在滚动升级时要求不中断业务,那么必须在config.json文件中配置健康检查的接口,供ModelArts调用,在config.json文件中配置。当业务可提供正常服务时,健康检查接口返回健康状态,否则返回异常状态。
    • 如果要实现无损滚动升级,必须配置健康检查接口。
    • 自定义镜像如果需要在“在线服务”模块使用OBS外部存储挂载功能,需要新建一个OBS挂载专属目录如“/obs-mount/”,避免选择存量目录覆盖已有文件。OBS挂载仅开放对挂载目录文件新增、查看、修改功能,如果需要删除文件请到OBS并行文件系统中手动删除。

    健康检查接口示例如下。

    • URI
      GET /health
    • 请求示例curl -X GET \ http://{listen_ip}:8080/health
    • 响应示例
      {"health": "true"}
    • 状态码
      表1 状态码

      状态码

      编码

      状态码说明

      200

      OK

      请求成功

  • 日志文件输出

    为保证日志内容可以正常显示,日志信息需要打印到标准输出。

  • 镜像启动入口

    如果需要部署批量服务,镜像的启动入口文件需要为“/home/run.sh”,采用CMD设置默认启动路径,例如Dockerfile配置如下:

    CMD ["sh", "/home/run.sh"]

  • 镜像依赖组件

    如果需要部署批量服务,镜像内需要集成python、jre/jdk、zip等组件包。

  • (可选)保持Http长链接,无损滚动升级

    如果需要支持滚动升级的过程中不中断业务,那么需要将服务的Http的“keep-alive”参数设置为200s。以gunicorn服务框架为例,gunicorn缺省情形下不支持keep-alive,需要同时安装gevent并配置启动参数“--keep-alive 200 -k gevent”。不同服务框架参数设置有区别,请以实际情况为准。

  • (可选)处理SIGTERM信号,容器优雅退出

    如果需要支持滚动升级的过程中不中断业务,那么需要在容器中捕获SIGTERM信号,并且在收到SIGTERM信号之后等待60秒再优雅退出容器。提前优雅退出容器可能会导致在滚动升级的过程中业务概率中断。要保证容器优雅退出,从收到SIGTERM信号开始,业务需要将收到的请求全部处理完毕再结束,这个处理时长最多不超过90秒。例如run.sh如下所示:

    #!/bin/bash
    gunicorn_pid=""
    
    handle_sigterm() {
      echo "Received SIGTERM, send SIGTERM to $gunicorn_pid"
      if [ $gunicorn_pid != "" ]; then
          sleep 60
          kill -15 $gunicorn_pid  # 传递 SIGTERM 给gunicorn进程
          wait $gunicorn_pid           # 等待gunicorn进程完全终止
      fi
    }
    
    trap handle_sigterm TERM
support.huaweicloud.com/usermanual-standard-modelarts/modelarts_23_0219.html