腾讯云TI-ONE训练平台使用自定义镜像发布在线服务开发指引_AI解决方案_同尘科技
前言
本文档将向您介绍 TI-ONE 自定义镜像需要遵循的一些容器规范约束,再通过几个典型案例向您演示如何制作镜像。
平台基础镜像说明
平台提供了基础推理镜像。ccr.ccs.tencentyun.com/tione-public-images/ti-cloud-gpu-base-tiinfer:py38-cu111-1.0.0
基础镜像基于 centos 制作,其中包含的软件包有:
软件或包 | 版本 |
CUDA | 11.1.1 |
python | 3.9.13 |
cos-python-sdk-v5 | 1.9.14 |
coscmd | 1.8.6.24 |
numpy | 1.23.1 |
msgpack | 1.0.5 |
opencv-python | 4.6.0.66 |
opencv-contrib-python | 4.6.0.66 |
pandas | 1.4.3 |
Pillow | 9.4.0 |
tiinfer | 0.1.1 |
mosec-tiinfer | 0.0.6 |
基础镜像的启动命令 /usr/local/service/ti-cloud-infer/entrypoint.shentrypoint.sh 中的内容为:
#!/bin/bashsource /etc/profilesource /root/.bashrcexport LD_LIBRARY_PATH=/usr/local/python3/lib/python3.8/site-packages/torch/lib:/usr/local/openmpi/lib:/usr/local/nccl/lib:/usr/local/cuda/lib64:/usr/local/python3/lib:/usr/local/python3/lib64:/usr/local/openmpi/lib:/usr/local/gcc/lib:/usr/local/gcc/lib64
MODEL_DIR=/data/model
echo "================== code path ${MODEL_DIR}=========="cd ${MODEL_DIR}
if [ -f "requirements.txt" ]; then echo "============== install python requirements ======================" echo "python3 -m pip install -r requirements.txt" python3 -m pip install -r requirements.txt echo "============== install python requirements done ================="fi
echo "====================== start serving ============================"echo "python3 -m tiinfer"export TI_MODEL_DIR=${MODEL_DIR}python3 -m tiinfer --timeout 30000
启动逻辑为:1.1 读取环境变量 ${MODEL_DIR} 目录下的 requirements.txt 文件,使用 pip 安装其中指定的依赖 python 包。1.2 tiinfer 框架会读取 ${MODEL_DIR} 下的文件,加载模型后,启动一个 HTTP 服务并监听在 ${REST_PORT} 定义的端口。1.3 tiinfer 框架启动时,会从 model_service.py 文件中加载模型。
自定义镜像规范
基于平台基础镜像制作自定义镜像
1. dockerfile 中添加对基础镜像的引用,例如:FROM ccr.ccs.tencentyun.com/tione-public-images/ti-cloud-gpu-base-tiinfer:py38-cu111-1.0.0
2. 自定义部分集中在 model_service.py 文件及 entrypoint.sh 文件的修改。注意 model_service.py 以及 entrypoint.sh 不能置于 data/model 目录,否则会被平台覆盖。详细可以参考典型案例。
基于其他镜像制作自定义镜像
1. 在线推理服务端口限制为8501。2. 服务必须以 HTTP 协议接受请求,并且只支持 POST 方法。3. Dockerfile 文件中必须包含启动命令。4. 使用 CFS、COS 作为模型来源时,会将源路径下的模型文件(包括子目录),放在服务实例的/data/model
目录下,因此自定义的代码及数据不能置于 /data/model
目录,否则会被平台覆盖。
典型案例
本案例介绍了基于平台基础镜像,通过修改 model_service.py 及 entrypoint.sh 文件,实现一个简单的加法器。需要说明的是,本案例不使用平台提供的模型仓库功能托管模型,而是将模型、推理代码直接封装到镜像中,所以需要避免将模型、代码放到/data/model
目录。
制作镜像
编写代码
一共包含三个文件:
文件 | 作用 |
model_service.py | 按照 tiinfer 的要求,编写加法器模型。 |
entrypoint.sh | 启动脚本,可在此自行安装更多的依赖包。 |
Dockerfile | 负责将前两个文件拷贝到镜像中。 |
1. model_service.py 的内容:
from typing import Dictimport tiinfer
class AdderModel(tiinfer.Model): def __init__(self, model_dir: str): super().__init__(model_dir)
def load(self) -> bool: self.ready = True return self.ready
def preprocess(self, request: Dict) -> Dict: return request
def predict(self, request: Dict) -> Dict: return {'result': request['a'] + request['b']}
def postprocess(self, result: Dict) -> Dict: return result
2. entrypoint.sh 的内容:
#!/bin/bashsource /etc/profilesource /root/.bashrcexport LD_LIBRARY_PATH=/usr/local/python3/lib/python3.8/site-packages/torch/lib:/usr/local/openmpi/lib:/usr/local/nccl/lib:/usr/local/cuda/lib64:/usr/local/python3/lib:/usr/local/python3/lib64:/usr/local/openmpi/lib:/usr/local/gcc/lib:/usr/local/gcc/lib64
MODEL_DIR=/opt/model
echo "================== code path ${MODEL_DIR}=========="cd ${MODEL_DIR}
if [ -f "requirements.txt" ]; then echo "============== install python requirements ======================" echo "python3 -m pip install -r requirements.txt" python3 -m pip install -r requirements.txt echo "============== install python requirements done ================="fi
echo "====================== start serving ============================"echo "python3 -m tiinfer"export TI_MODEL_DIR=${MODEL_DIR}python3 -m tiinfer --timeout 30000
需要注意的是,上述代码中的MODEL_DIR=/opt/model
这一行,将启动目录由默认的/data/model
改为/opt/model
,避免被平台覆盖。3. Dockerfile 的内容:
FROMccr.ccs.tencentyun.com/tione-public-images/ti-cloud-gpu-base-tiinfer:py38-cu111-1.0.0
COPY model_service.py /opt/model/model_service.pyCOPY entrypoint.sh ./entrypoint.shRUN chmod +x ./entrypoint.sh
需要注意的是,上述代码将 model_service.py 拷贝到/opt/model
目录,而非默认的/data/model
目录,避免被平台覆盖。
打包镜像
1. 整体步骤:本地配置 docker 环境,并开通 腾讯云容器镜像服务;创建命名空间及新建个人镜像仓库;编译自定义推理镜像,推送到个人镜像仓库;在启动模型服务时,实例容器栏选择不使用模型文件,选择运行环境进入个人镜像仓库列表,选择上一步推送的自定义镜像环境;配置好参数,启动服务。2. 详细说明:执行如下命令来打包:
docker build . --tag ccr.ccs.tencentyun.com/YOUR_NAMESPACE/YOUR_IMAGENAME
打包完成后,可以通过如下方式在本地检查服务运行是否正常:执行 docker run -d –name myinfer ccr.ccs.tencentyun.com/YOUR_NAMESPACE/YOUT_IMAGENAME 将服务运行起来;执行 docker exec -it myinfer bash 进入容器中;在容器中执行 curl http://127.0.0.1:8501/v1/models/m:predict -d ‘{“a”: 1, “b”: 2}’ 得到正确返回: {“result”: 3};确认服务正常运行后,执行如下命令上传镜像:docker push ccr.ccs.tencentyun.com/YOUR_NAMESPACE/YOUR_IMAGENAME。
运行自定义镜像
创建服务的时候,选择不使用模型。
运行环境选择刚刚上传的镜像即可。
对解决方案有疑惑?想了解解决方案收费? 联系解决方案专家
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠
阿里云解决方案也看看?: 点击对比阿里云的解决方案
暂无评论,你要说点什么吗?