云服务器内容精选

  • CCE集群 Octopus平台依赖算子镜像内的/bin/bash、stdbuf、tee软件,请确保基础镜像内包含上述软件且能通过PATH找到。 一般情况下,训练与评测定义为同一个引擎,主要包括算法或评测脚本运行所需要的基本依赖环境。用户可使用命令行模式或Dockerfile模式进行构建。以训练、评测镜像为例,一般的镜像制作Dockerfile示例如下(xxx替换为实际路径): # 载入基础镜像,训练或评测引擎一般需包含cuda/cudnn等算法基础环境。用户可手动制作或拉取官方镜像 FROM xxx/cuda:11.0.3-devel-ubuntu18.04 # 设置工作目录【可选】默认为ROOT,用户可修改USER及PATH WORKDIR /root/workspace # 安装用户APT环境。如果需要修改/etc/apt/sources.list可替换 COPY /path/to/sources.list /etc/apt/sources.list RUN apt-get install vim # 安装用户算法环境。如果需要修改~/.pip/pip.conf可替换。用户也可安装miniconda进行包管理 COPY /path/to/pip.conf /root/.pip/pip.conf COPY /path/to/requirements.txt /root RUN pip install –r /root/requirements.txt # 设置环境变量【可选】 ENV PYTHONUNBUFFERED 1 编译镜像类似上述训练、评测镜像制作方式,但一般不包含cuda/cudnn库,需替换为用户的编译环境。 对于Dockerfile的统一构建方式如下: docker build –f [DockerfileName] –t [ImageName:ImageVersion] . 镜像运行时,会向运行环境注入部分默认文件配置: 表1 环境变量说明 任务名称 文件名 环境变量 训练任务 增量模型目录 MODEL="/tmp/data/model" 训练产物目录 RESULT= "/tmp/result" 数据集目录 DATASET="/tmp/data/dataset/" 评测任务 评测结果目录 EVAL_RESULT= "/tmp/result" 模型版本文件目录 MODEL="/tmp/data/model" 数据集目录 DATASET= "/tmp/data/dataset/dataset-0" 编译任务 模型版本文件目录 MODEL_PATH="/tmp/data/model" 编译产物目录 TMP_RESULT_PATH= "/tmp/result" 预标注任务 数据集目录 OCTPS_DATASET_DIR="/tmp/…/data" 模型版本文件目录 OCTPS_MODEL_DIR="/tmp/…/model" 模型版本关联标注物文件路径 OCTPS_META_PATH="/tmp/…/meta/label_meta_infos.json" 预标注结果数据目录 TARGET_RESULT_DIR="/tmp/…/result/data" 预标注日志文件目录 TARGET_ LOG _DIR="/tmp/…/result/log" 父主题: 镜像制作(训练)
  • 推理服务 推理服务镜像同训练任务镜像一样,必须内置一个用户名为“ma-user”,组名为“ma-group”的普通用户,且必须确保该用户的uid=1000、gid=100。 需要明确设置镜像的启动命令。执行命令如下: CMD sh /home/mind/run.sh 服务端必须使用https协议, 且暴露在所有网络平面(0.0.0.0)的“8080”端口。 在“8080”端口,提供URL路径为“/health”的健康检查接口供健康检查使用。 接口仅支持POST、GET、PUT、DELETE四种方法。 Dockerfile示例: FROM python:3.11 USER root RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user USER ma-user RUN pip install --progress-bar off flask cryptography WORKDIR /home/ma-user COPY server.py . CMD python server.py HTTPS Server示例: 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__': # 访问创建推理服务时选择的模型版本文件 torchserve = PTVisionService(model_path=os.getenv('OCTOPUS_MODEL') + '/best.pt') # host must be "0.0.0.0", port must be 8080 app.run(host="0.0.0.0", port=8080, ssl_context='adhoc') 注意:在创建推理服务时选择的模型版本文件将在服务启动时下载到OCTOPUS_MODEL对应的路径下: 环境变量名称 含义 默认值(默认值可能会随版本变化,不建议直接使用) OCTOPUS_MODEL 模型版本文件下载目录 /home/mind/model 在本地机器调试 自定义引擎的规范可以在安装有docker的本地机器上通过以下步骤提前验证: 将自定义引擎镜像下载至本地机器,假设镜像名为custom_engine:v1。 将模型版本文件夹复制到本地机器,假设模型包文件夹名字为model。 在模型文件夹的同级目录下验证如下命令拉起服务: docker run -u 1000:100 -p 8080:8080 -v /home/model:/home/mind/model -e OCTOPUS_MODEL=/home/mind/model custom_engine:v1 在本地机器上启动另一个终端,执行以下验证指令,得到符合预期的推理结果。 curl -k https://127.0.0.1:8080/${推理服务的请求路径} 本地调试完成后,每次都需将镜像推送至新版本,使用二次推送镜像功能会导致推理服务镜像更新不生效。