打包镜像

UAI-Train为用户提供了镜像打包工具,用户只需将所需代码文件放在某一路径下,执行打包命令即可以生成UAI-Train所需的镜像。

该打包工具将在本地docker中生成两个镜像以及运行镜像的指令说明文件uaitrain_cmd.txt。生成的镜像包括cpu和gpu两个版本,其中gpu版本的镜像会自动上传至用户的Uhub镜像仓库。两个版本的镜像均可以用于本地测试,测试命令可在uaitrain_cmd.txt中查询。

Step0: 安装最新版本的UAI SDK和docker支持

安装UAI SDK的方法如下:

git clone https://github.com/ucloud/uai-sdk
cd uai-sdk
sudo python setup.py install

安装Docker的方法请参见:Docker使用指南

Step1: 找到UAI-Train pytorch 操作工具所在目录

undefined ~/uai-sdk/uaitrain_tool/pytorch
pytorch_tool.py

Step2: 将AI训练任务所需的代码放在统一路径下,打包时将其相对路径作为参数code_path上传

例如,我们要将~/uai-sdk/examples/pytorch/train/mnist 下面的训练代码进行打包,该文件路径结构如下:

$ cd ~/uai-sdk/examples/pytorch/train/mnist
$ ls
data  code

我们需要做如下准备工作:

  1. 准备好训练的代码,案例中训练代码在mnist/code下, 名为 mnist.py
  2. 将pytorch_tool.py 工具放入和训练代码目录同级的目录下,即mnist/目录下
  3. Ready To Pack
$ cd ~/uai-sdk/examples/pytorch/train/mnist
$ ls
data/ code/

$ cp ~/uai-sdk/uaitrain_tool/pytorch/pytorch_tool.py ./
$ ls
data/ code/ pytorch_tool.py 

Step3: 执行pack命令,完成镜像的打包

pytorch_tool.py pack命令执行方法如下:

sudo python pytorch_tool.py pack [-h] --public_key PUBLIC_KEY 
                        --private_key PRIVATE_KEY 
                        [--project_id PROJECT_ID] 
                        --code_path CODE_PATH 
                        --mainfile_path MAINFILE_PATH
                        --uhub_username UHUB_USERNAME
                        --uhub_password UHUB_PASSWORD 
                        --uhub_registry UHUB_REGISTRY
                        --uhub_imagename UHUB_IMAGENAME
                        [--uhub_imagetag UHUB_IMAGETAG]
                        [--internal_uhub false/true]
                        --ai_arch_v AI_ARCH_V
                        --test_data_path TEST_DATA_PATH
                        --test_output_path TEST_OUTPUT_PATH
                        --train_params TRAIN_PARAMS
参数 说明 是否必需
public_key 用户的公钥
private_key 用户的私钥
project_id 项目id
code_path 训练任务所需代码路,以/结尾(请填写相对pytorch_tool.py的相对路径,本例中为./code/)
mainfile_path 训练主文件(有main函数),不须包含路径,但须包含后缀名(本例中为:mnist.py)
uhub_username uhub账号(即云知芯账号)
uhub_password uhub密码(即云知芯账号密码)
uhub_registry uhub镜像仓库名称,不支持大写字母
uhub_imagename 生成镜像名称,不支持大写字母
uhub_imagetag 生成镜像tag,不支持大写字母 否,默认为uaitrain
internal_uhub 告诉打包程序是否使用uhub的云知芯内网地址,如果true则使用uhub.service.auto-ai.com.cn,false则使用uhub.auto-ai.com.cn,使用内网地址可以提高镜像拉取和上传的速度 否,默认为false
ai_arch_v 深度学习框架以及版本,暂仅支持pytorch-0.2.0
test_data_path 本地测试环境数据输入路径(建议用绝对路径),生成的本地测试脚本将通过挂载方式接入到docker镜像中
test_output_path 本地测试环境训练输出路径(建议用绝对路径),生成的本地测试脚本将通过挂载方式接入到docker镜像中
train_params 训练所需参数
os 操作系统名称以及版本,用"-"分隔,形如"ubuntu-14.04.05" 否,默认ubuntu-14.04.05
python_version python名称以及版本,用"-"分隔,形如"python-2.7.6" 否,默认python-2.7.6

可以选镜像及相关命令组合

Pytorch 操作系统 Python 命令组合
pytorch-0.4 + py3 ubuntu-16.04 python-3.6.2 --ai_arch_v=pytorch-0.4 --python_version=python-3.6.2 --os=ubuntu-16.04
pytorch-0.2.0 + py2 ubuntu-14.04.05 python-2.7.6 --ai_arch_v=pytorch-0.2.0

命令样例
在mnist案例中,输入数据存放在uai-sdk的examples/pytorch/train/mnist/data目录下
test_data_path为/home/ubuntu/uai-sdk/examples/pytorch/train/mnist/data
test_output_path为/home/ubuntu/uai-sdk/examples/pytorch/train/mnist/output
使用命令时,需要使用sudo,保证docker镜像打包命令有足够权限。

$ cd ~/uai-sdk/examples/pytorch/train/mnist
$ ls
data/ code/ pytorch_tool.py 
$ sudo python pytorch_tool.py pack \
--public_key xxxx \
--private_key xxxx \
--code_path ./code/ \
--mainfile_path mnist.py \
--uhub_username xxxx  \
--uhub_password xxxx  \
--uhub_registry xxxx  \
--uhub_imagename pytorch-mnist \
--test_data_path /home/ubuntu/uai-sdk/examples/pytorch/train/mnist/data \
--test_output_path /home/ubuntu/uai-sdk/examples/pytorch/train/mnist/output \
--ai_arch_v pytorch-0.2.0 

执行完指令后,训练镜像就已经准备好了

Step4: 输出说明

标准输出

成功执行后,界面显示样例如下,会给出部署时所需的CMD命令以及本地测试的cmd命令:

CMD Used for deploying: /data/mnist.py 
CMD for CPU local test: sudo docker run -it -v /home/ubuntu/uai-sdk/examples/pytorch/train/mnist/data:/data/data -v /home/ubuntu/uai-sdk/examples/pytorch/train/mnist/output:/data/output pytorch-mnist-cpu:uaitrain /bin/bash -c "cd /data && /usr/bin/python /data/mnist.py  --work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output"
CMD for GPU local test: sudo nvidia-docker run -it -v /home/ubuntu/uai-sdk/examples/pytorch/train/mnist/data:/data/data -v /home/ubuntu/uai-sdk/examples/pytorch/train/mnist/output:/data/output uhub.service.auto-ai.com.cn/fanrongtest/pytorch-mnist:uaitrain /bin/bash -c "cd /data && /usr/bin/python /data/mnist.py  --work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output"
  • CMD Used for deploying: 该输出的内容为创建训练任务时,训练启动命令框中需要填写的内容(参见create)。可以直接复制黏贴到命令框中。
  • CMD for CPU local test: 该输出的内容为本地通过CPU来测试训练能否正常执行。在本地没有GPU的情况下可以使用该命令测试训练代码能否正常执行。
  • CMD for GPU local test:该输出的内容为本地通过GPU来测试训练能否正常执行。在本地有GPU的情况下可以使用该命令测试训练代码能否正常执行。(注:在使用前请确认GPU驱动已经安装,并已经安装了nvidia-docker,详细安装方法请参见Docker使用指南
本地镜像输出

在本地镜像仓库可以看到生成了两个docker镜像,分别为cpu版本和gpu版本。如下:

$ sudo docker images
REPOSITORY						  TAG		IMAGE ID	CREATED		SIZE
pytorch-mnist-cpu						uaitrain	xxxxxx		xxxx ago	xxx GB
uhub.auto-ai.com.cn//pytorch-mnist	uaitrain	xxxxxx		xxxx ago	xxx GB
标准输出文件

本地文件夹下生成了uaitrain_cmd.txt以及相关的日志文件,其中uaitrain_cmd.txt内容和标准输出的内容一致,防止用户丢失屏幕输出内容。

Step5: 自定义软件包安装

如果训练代码依赖特殊的软件包,例如nltk 等,可以通过Docker命令将软件包放至Docker容器中,然后通过docker commit将其保存为镜像即可。
注:输入数据无需存储在容器中,可上传至ufile