ModelArts本地进行GPU自定义镜像构建

举报
星月菩提 发表于 2020/07/18 18:21:24 2020/07/18
【摘要】 使用modelarts自定义镜像功能将将本地训练环境迁移到modelarts上


1   配置docker环境

Ubuntu系统参考https://www.runoob.com/docker/ubuntu-docker-install.html

2      配置nvidia-docker

https://github.com/NVIDIA/nvidia-docker

3      本地登录SWR服务

进入SWR服务

获取登录指令

复制登录指令,在本地docker环境中输入,完成了SWR登录

4      创建SWR组织

点击创建组织,创建一个全局唯一的组织,例如组织名称为myhuaweicloudtest,记住这个名称

5      SWR上获取自定义镜像基础镜像

不同版本cuda镜像地址https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0217.html

  • swr.cn-north-1.myhuaweicloud.com/modelarts-job-dev-image/custom-base-cuda10.0-cp36-ubuntu18.04-x86:1.1
  • swr.cn-north-1.myhuaweicloud.com/modelarts-job-dev-image/custom-base-cuda10.1-cp36-ubuntu18.04-x86:1.1
  • swr.cn-north-1.myhuaweicloud.com/modelarts-job-dev-image/custom-base-cuda10.2-cp36-ubuntu18.04-x86:1.1

minicoda安装在了/root下面,里面自带moxing

假如我要获取cuda10.1的镜像,我可以使用如下命令

docker pull swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-base-cuda10.1-cp36-ubuntu18.04-x86:1.1

6      构建自定义镜像

cuda10.1为例,假如我有本地的机器有个目录,目录路径为”/home/huaweicloud/install/install.sh”,需要执行这个脚本来完成依赖软件的安装。

执行如下命令,启动镜像,并将/home/huaweicloud/install 挂载到容器的/home/work/denpendency目录下

docker run -gpus all -u 0 -v /home/huaweicloud/install:/home/work/denpendency   -it swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-base-cuda10.1-cp36-ubuntu18.04-x86:1.1 bash

有关-gpus的参数参考https://github.com/NVIDIA/nvidia-docker

启动容器以后能够看到/home/work/denpendency目录和/home/huaweicloud/install是同一个目录,同时看到输入的命令行如下

其中的docker实例的id就是6c763d053466,记住这个id

对镜像进行构建,例如安装python安装包,或者apt-get安装,和本地进行linux环境构建相同,构建成功后。

………………..

当镜像构建完成以后,可以另起一个terminal执行下面的命令完成docker镜像的构建,这里以6c763d053466这个实例为例

执行:

docker commit 6c763d053466 swr.cn-north-4.myhuaweicloud.com/myhuaweicloudtest/huaweicloud-custom-image:1.0.0

swr.cn-north-4.myhuaweicloud.com是北京四SWR的地址,北京一的地址为swr.cn-north-1.myhuaweicloud.com

myhuaweicloudtest是步骤3创建的组织名称

huaweicloud-custom-image是自定义的镜像名称,可以根据自己的喜好命名

1.0.0是此镜像的版本号,可以根据自己喜好命名

 

自定义镜像的一些约束参考

https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0217.html


ubuntu镜像源通过如下地址更新为华为ubuntu源

https://mirrors.huaweicloud.com/ 


官方文档

https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0088.html

7      提交自定义镜像到SWR

重复步骤3,登录SWR

将自定义镜像推到SWR中执行

docker push swr.cn-north-4.myhuaweicloud.com/myhuaweicloudtest/huaweicloud-custom-image:1.0.0

经过一定时间的等待,镜像就上传到SWR中了

使用自定义镜像创建训练作业

8      将本地代码迁移到云上

8.1      适配代码用引用的路径

使用Modelarts创建训练作业时,需要先将代码整体传到OBS上作为存储介质,训练作业运行时,程序会将配置的OBS目录整体下载到容器中,然后执行入口脚本实现训练作业的运行。

假如我在OBS创的桶名为huaweicloud-test,目录名称为work,我本地工程存储在myproject目录下面。那么我可以通过obs提供的工具obsutil实现将整个目录上传到obs,工具连接如下

https://support.huaweicloud.com/utiltg-obs/obs_11_0001.html

 

训练作业在运行时,myproject目录会被下载到/home/work/user-job-dir/myproject,因此如果原来的工程中有一些硬编码的绝对路径,那么需要更改为/home/work/user-job-dir/myproject

8.2      适配代码中的PYTHONPATH

PYTHONPATH同时也需要动态的修改。

myproject的目录原始结构如下,3rd目录为PYTHONPATH目录,main.py为入口脚本

 

可以在myproject目录下面创建一个start.py内容如下,start.py上传到obsmyproject目录下

import os

os.system(‘export PYTHONPATH=/home/work/user-job-dir/myproject/3rd;python /home/work/user-job-dir/myproject/yolo_v4/main.py’)

运行命令设置为 bash /home/work/run_train.sh python /home/work/user-job-dir/myproject/start.py

 

 

9      通过自定义镜像创建训练作业

https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0087.html

 

 

注意事项:

1.镜像中的run_train.sh不要更改,此文件包含了代码下载的逻辑。

2.如果要在cuda10.1镜像中安装cuda10,新版本libcudnn安装后也要把老版本的libcudnn删除,删除方法通过 find / -name “libcudnn*” 找到libcudnn文件,然后手动删除。

3.如果cuda版本由10.1变为10,那么pytorchtensorflow这类深度训练框架需要重新进行安装。

 

 

 

 

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。