1.5.6.6 使用自定义镜像
简介
Xiaomi Cloud-ML支持Bring Your Own Image功能,允许用户传入自定义的Docker镜像来启动训练任务,可以解决训练任务依赖非Python库的问题。
注意,用户提供的镜像地址应该是公开可访问的,如果在DockerHub中下载镜像和启动任务时间较长。
制作Docker镜像
Cloud-ML的镜像中包含了平台通用的python,nvidia cuda,FDS FUSE等软件依赖。因此不推荐用户从头制作docker镜像,建议使用Cloud-ML的镜像作为基础镜像,进行增量修改。 和普通docker镜像制作过程相同,用户可以使用Dockerfile和docker commit
两种方式制作新的镜像。下面分别举例介绍两种方式。
使用Dockerfile制作docker镜像
创建Dockerfile,使用某个Cloud-ML镜像作为基础镜像,添加用户自定义的内容。举例如下:
FROM cnbj6-repo.cloud.mi.com/cloud-ml/tensorflow-gpu:1.3.0-xm1.0.0
# Install python3
apt-get install python3
# Add local files
COPY init_env.py /
编译Dockerfile,生成镜像
docker build -t cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3 .
推送镜像到docker registry, (不熟悉docker registry的用户可以参考http://docs.api.xiaomi.com/app-engine/docker-image.html)
docker login cnbj6-repo.cloud.mi.com
docker push cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3
使用docker commit
制作docker镜像
使用某个Cloud-ML镜像创建容器,进入容器后添加用户自定义的内容
docker run it --name mycontainer1 cnbj6-repo.cloud.mi.com/cloud-ml/tensorflow-gpu:1.3.0-xm1.0.0 bash
apt-get install python3
echo "export PYTHONUNBUFFERED=0" > /init_env.py
打包docker容器,生成镜像
docker commit --change='CMD /train.py' mycontainer1 cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3 .
推送镜像到docker registry, (不熟悉docker registry的用户可以参考http://docs.api.xiaomi.com/app-engine/docker-image.html)
docker login cnbj6-repo.cloud.mi.com
docker push cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3
使用示例
用户提交任务时指定Docker镜像地址即可。
cloudml jobs submit -n linear -m trainer.task -u fds://cloud-ml/linear/trainer-1.0.tar.gz -d cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3
参数介绍
-d
表示用户指定的Docker镜像地址,注意不可与-F
和-V
参数同时使用。
注意:
Cloud-ML Trainjob的启动脚本是 /train.py
,启动的时候会默认执行/train.py -m <module_name>
,所以,这个文件是必须的,里面的内容则可以根据自己的具体情况定义。