定制训练任务Docker镜像

简介

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镜像作为基础镜像,添加用户自定义的内容。举例如下:

  1. FROM cnbj6-repo.cloud.mi.com/cloud-ml/tensorflow-gpu:1.3.0-xm1.0.0
  2. # Install python3
  3. apt-get install python3
  4. # Add local files
  5. COPY init_env.py /

编译Dockerfile,生成镜像

  1. 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)

  1. docker login cnbj6-repo.cloud.mi.com
  2. docker push cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3

使用docker commit制作docker镜像

使用某个Cloud-ML镜像创建容器,进入容器后添加用户自定义的内容

  1. docker run it --name mycontainer1 cnbj6-repo.cloud.mi.com/cloud-ml/tensorflow-gpu:1.3.0-xm1.0.0 bash
  2. apt-get install python3
  3. echo "export PYTHONUNBUFFERED=0" > /init_env.py

打包docker容器,生成镜像

  1. 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)

  1. docker login cnbj6-repo.cloud.mi.com
  2. docker push cnbj6-repo.cloud.mi.com/user1/tensorflow-gpu:1.3.0-xm1.0.0-python3

使用示例

用户提交任务时指定Docker镜像地址即可。

  1. 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>,所以,这个文件是必须的,里面的内容则可以根据自己的具体情况定义。

原文: http://docs.api.xiaomi.com/cloud-ml/trainjob/0504_use_docker_image.html