打包镜像
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 Keras操作工具所在目录
undefined ~/uai-sdk/uaitrain_tool/keras keras_tool.py
Step2: 将AI训练任务所需的代码放在统一路径下,打包时将其相对路径作为参数code_path上传
例如,我们要将~/uai-sdk/examples/keras/train/mnist/下面的训练代码进行打包,该文件路径结构如下:
$ cd ~/uai-sdk/examples/keras/train/mnist/ $ ls data code
我们需要做如下准备工作:
- 准备好训练的代码,案例中训练代码在mnist/code下, 包括 mnist_cnn.py mnist_datasets.py 两个文件
- 将keras_tool.py 工具放入和训练代码目录同级的目录下,即mnist/ 目录下
- Ready To Pack
$ cd ~/uai-sdk/examples/keras/train/mnist/ $ ls data/ code/ $ cp ~/uai-sdk/uaitrain_tool/keras/keras_tool.py ./ $ ls data/ code/ keras_tool.py
Step3: 执行pack命令,完成镜像的打包
keras_tool.py pack命令执行方法如下:
sudo python keras_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 | 训练任务所需代码路,以/结尾(请填写相对tf_tool.py的相对路径,本例中为./code/) | 是 |
mainfile_path | 训练主文件(有main函数),不须包含路径,但须包含后缀名(本例中为:mnist_cnn.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 | 深度学习框架以及版本,目前支持 keras-2.0.8 | 是 |
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 |
可以选镜像及相关命令组合
Keras | 操作系统 | Python | 命令组合 |
---|---|---|---|
keras-2.0.8 + py2 | ubuntu-14.04.05 | python-2.7.6 | --ai_arch_v=keras-2.0.8 |
keras-2.1.6 + py2 | ubuntu-16.04 | python-2.7.6 | --ai_arch_v=keras-2.1.6 --python_version=python-2.7.6 --os=ubuntu-16.04 |
keras-2.1.6 + py | ubuntu-16.04 | python-3.6.2 | --ai_arch_v=keras-2.1.6 --python_version=python-3.6.2 --os=ubuntu-16.04 |
命令样例
使用mnist中的训练程序为案例。
test_data_path和test_data_path不要求一定在训练代码路径下,如我们可以在/data/test目录下创建了两个子目录:
- /data/test/data 用于存放训练数据,此时test_data_path值为/data/test/data
- /data/test/output 用于存放训练输出数据,此时test_output_path为/data/test/output
train_params为训练代码中使用到的任意训练参数,本例中为"--epochs=10"
使用命令时,需要使用sudo,保证docker镜像打包命令有足够权限。
注:我们可以将~/uai-sdk/examples/keras/train/mnist/data/ 下的测试数据放入/data/test/data/目录下
$ cd ~/uai-sdk/examples/keras/train/mnist $ ls data/ code/ keras_tool.py $ sudo python keras_tool.py pack \ --public_key=\ --private_key= \ --code_path=./code/ \ --mainfile_path=mnist_cnn.py \ --uhub_username= \ --uhub_password= \ --uhub_registry= \ --uhub_imagename= \ --internal_uhub=true \ --ai_arch_v=keras-2.0.8 \ --test_data_path=/data/test/data \ --test_output_path=/data/test/output \ --train_params="--epochs=10" \
执行完指令后,训练镜像就已经准备好了
Step4: 输出说明
标准输出
成功执行后,界面显示样例如下,会给出部署时所需的CMD命令以及本地测试的cmd命令:
CMD Used for deploying: /data/mnist_cnn.py --epochs=10 CMD for CPU local test: sudo docker run -it -v /data/test/data:/data/data -v /data/test/output:/data/output keras-mnist-cpu:uaitrain /bin/bash -c "cd /data && /usr/bin/python /data/mnist_cnn.py --epochs=10--work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output/log" CMD for GPU local test: sudo nvidia-docker run -it -v /data/test/data:/data/data -v /data/test/output:/data/output uhub.auto-ai.com.cn/keras-demo/keras-mnist:uaitrain /bin/bash -c "cd /data && /usr/bin/python /data/mnist_cnn.py --epochs=10 --work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output/log"
本地镜像输出
在本地镜像仓库可以看到生成了两个docker镜像,分别为cpu版本和gpu版本。如下:
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE keras-mnist-cpu uaitrain xxxxxx xxxx ago xxx GB uhub.auto-ai.com.cn//keras-mnist uaitrain xxxxxx xxxx ago xxx GB
标准输出文件
本地文件夹下生成了uaitrain_cmd.txt以及相关的日志文件,其中uaitrain_cmd.txt内容和标准输出的内容一致,防止用户丢失屏幕输出内容。
Step5: 自定义软件包安装
如果训练代码依赖特殊的软件包,例如nltk 等,可以通过Docker 打包的形式将软件包和相关数据打包入训练的Docker镜像,详细方法参见自定义打包镜像