ModelArts自定义镜像完成定制化作业训练【玩转华为云】

举报
龙哥手记 发表于 2022/11/24 14:05:33 2022/11/24
【摘要】 用自定义镜像功能建notebook与训练作业,来满足AI应用开发环境的定制需求

主要内容有:

  • 一 容器镜像是啥
  • 二 实验条件先准备好
  • 三 用自定义镜像建Notebook
  • 自定义镜像建训练作业

1.gif

一 容器镜像是啥

1.1 先搞清楚定义

  • 它是一种支持镜像全生命周期管理的服务, 提供简单易用安全可靠的镜像管理功能,来快速部署容器化服务。

通过使用容器镜像服务,您不用自建和维护镜像仓库,即可享有云上的镜像安全托管及高效分发服务,并且可配合云容器引擎 CCE云容器实例 CCI使用,获得容器上云的顺畅体验;

2.gif

容器镜像服务的计费项包括存储空间与流量费用,目前均免费提供给您哈!

1.2 这服务有啥功能呢(具体点)

  • 镜像全生命周期管理

    容器镜像服务支持镜像的全生命周期管理,包括镜像的上传、下载、删除等。

  • 私有镜像仓库

    容器镜像服务提供私有镜像库,并支持细粒度的权限管理,可以为不同用户分配相应的访问权限(读取、编辑、管理)。

  • 镜像加速

    容器镜像服务通过华为自主专利的镜像下载加速技术,使CCE集群下载镜像时在确保高并发下能获得更快的下载速度。

  • 镜像仓库触发器

    容器镜像服务支持容器镜像版本更新自动触发部署。您只需要为镜像设置一个触发器,通过触发器,可以在每次镜像版本更新时,自动更新使用该镜像部署的应用。

  • 镜像安全扫描(这里可集成容器安全服务CGS

1.3 这服务有啥吗

简单易用

  • 无需自行搭建和运维,即可快速推送拉取容器镜像。
  • 容器镜像服务的管理控制台简单易用,支持镜像的全生命周期管理。

安全可靠

  • 容器镜像服务遵循HTTPS协议保障镜像安全传输,提供帐号间、帐号内多种安全隔离机制,确保用户数据访问的安全。
  • 容器镜像服务依托华为专业存储服务,确保镜像存储更可靠。

镜像加速

  • 容器镜像服务通过华为自主专利的镜像下载加速技术,使CCE集群下载时在确保高并发下能获得更快的下载速度。


1.4 他有什么场景没有

镜像生命周期管理

提供镜像构建、镜像上传、下载、同步、删除等完整的生命周期管理能力。

优势

  • 镜像下载加速:华为自主专利的加速下载技术,提升华为云容器拉取镜像的速度。
  • 高可靠的存储:依托华为OBS专业存储,确保镜像的存储可靠性高达11个9。
  • 更安全的存储:细粒度的授权管理,让用户更精准的控制镜像访问权限。

建议搭配使用

云容器引擎CCE + 云容器实例CCI



二 实验条件先准备好

2.1 先创建ECS

1. 控制台服务列表下,找到弹性云服务器ECS,点击进入ECS控制台界面

2. 点击“购买弹性云服务器”

3. 计费模式选择“按需计费”,区域选择“北京四”

4. 选择“x86计算”架构,规格选择“c7.large.2”

5. 镜像选择“Ubuntu 18.04 server 64bit”

6. 系统盘大小增加至100G

7. 点击“下一步:配置”

8. 选择默认VPC

说明:如果没有默认VPC, 可点击“前往控制台创建”:

9. 选择default安全组

说明:如果没有默认安全组,可点击“新建安全组”:

10. 选择“按带宽计费”,带宽大小设置为10

11. 点击“下一步:高级配置”

12. 输入名称、密码,点击“下一步:确认配置”

13. 勾选协议,点击“立即购买”:

创建完成,可在首页看到刚创建的ECS


2.2 配置ECS环境

1. 远程登录ECS

2. 使用CloudShell登录

3. 输入密码后点击“连接”

进入后,如下所示

4. 安装docker环境

命令行终端输入如下命令下载安装脚本

apt-get update
apt -y install docker.io

安装成功如下所示

5. 测试验证

命令行终端执行docker命令,验证docker是否安装成功

2.3 配置SWR容器镜像服务

1. 登录SWR容器镜像服务

服务列表搜索定位至SWR容器镜像服务

点击后进入SWR服务控制台:

2. 创建组织

单击右上角“创建组织”,输入组织名称完成组织创建。您可以自定义组织名称,本示例使用“deep-learning-dcyang”, 请将其替换为自己的名称

3. 获取登录指令

单击右上角“登录指令”,获取登录访问指令

点击复制按钮

4. 终端登录SWR

命令行终端粘贴刚复制的登录命令并执行:





三 用自定义镜像建Notebook

3.1 创建基础开发环境

1. 进入ModelArts控制台

服务列表搜索点击进入ModelArts控制台

2. 创建Notebook

ModelArts控制台依次点击“开发环境”、“Notebook”、“创建”

3. 输入名称、描述信息

4. 选择“pytorch1.8”公共镜像

5. 资源规格保持默认CPU规格

6. 存储选择云硬盘EVS,磁盘规格保持默认5GB,点击“立即创建”

返回页,显示“创建中”

7. 打开notebook

待状态显示“运行中”,点击“打开”

打开后,进入jupyterlab界面

8. 新建notebook文件

点击“pytorch_1_8”,新建notebook文件

9. 运行测试

notebook里输入如下代码,验证输出是否正常:

import torch
print(torch.__version__)

如下所示


3.2 将Notebook实例保存为自定义镜像

ModelArts支持将notebook实例导出成自定义镜像,用户可根据自己需要在已创建好的notebook实例上安装其他依赖库后导出成自定义镜像,后续可以基于新的镜像创建notebook。

1. 此处以transformers库为例,在notebook内执行以下语句,安装transformers库

! pip install transformers

2. 回到notebook首页,点击“更多”、“保存镜像”

3. 选择之前SWR控制台创建的组织,镜像名称变更为“pytorch_1_8_transformers”,版本v1,添加描述信息

点击“确定”后,状态显示“快照中”

过程约8分钟,请耐心等待

4. 在镜像管理页面进一步查看

3.3 基于自定义镜像创建notebook

1. 创建新notebook,镜像选择“自定义”,其余步骤同2.1小节

创建成功,如下所示

2. 运行测试

打开新创建的notebook环境,新建notebook文件

notebook内输入如下内容,测试输出是否正常

import transformers

运行成功,输出如下,警告可忽略




自定义镜像建训练作业

4.1 制作自定义镜像

1. 进入CloudShell命令行终端

2. 创建并进入镜像目录

mkdir -p ~/custom-image/trainjob
cd ~/custom-image/trainjob

3. 执行wget命令下载镜像制作相关文件压缩包

wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20221019/trainjob_image.zip
4. 执行unzip命令解压镜像制作文件压缩包
unzip trainjob_image.zip

执行ls命令确认文件夹内容

ls trainjob_image


其中Dockerfile为构建镜像的文本文件,其余为镜像内需要预置安装的一些工具及依赖库

Dockerfile具体内容如下

# 容器镜像构建主机需要连通公网

# 基础容器镜像, https://github.com/NVIDIA/nvidia-docker/wiki/CUDA
# 
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
# require Docker Engine >= 17.05
#
# builder stage
FROM nvidia/cuda:10.2-runtime-ubuntu18.04 AS builder

# 基础容器镜像的默认用户已经是 root
# USER root

# 使用华为开源镜像站提供的 pypi 配置
RUN mkdir -p /root/.pip/
COPY pip.conf /root/.pip/pip.conf

# 拷贝待安装文件到基础容器镜像中的 /tmp 目录
COPY Miniconda3-py37_4.12.0-Linux-x86_64.sh /tmp
COPY torch-1.8.1+cu102-cp37-cp37m-linux_x86_64.whl /tmp
COPY torchvision-0.9.1+cu102-cp37-cp37m-linux_x86_64.whl /tmp
COPY torchaudio-0.8.1-cp37-cp37m-linux_x86_64.whl /tmp

# https://conda.io/projects/conda/en/latest/user-guide/install/linux.html#installing-on-linux
# 安装 Miniconda3 到基础容器镜像的 /home/ma-user/miniconda3 目录中
RUN bash /tmp/Miniconda3-py37_4.12.0-Linux-x86_64.sh -b -p /home/ma-user/miniconda3

# 使用 Miniconda3 默认 python 环境 (即 /home/ma-user/miniconda3/bin/pip) 安装 torch*.whl
RUN cd /tmp && \
    /home/ma-user/miniconda3/bin/pip install --no-cache-dir \
    /tmp/torch-1.8.1+cu102-cp37-cp37m-linux_x86_64.whl \
    /tmp/torchvision-0.9.1+cu102-cp37-cp37m-linux_x86_64.whl \
    /tmp/torchaudio-0.8.1-cp37-cp37m-linux_x86_64.whl

# 构建最终容器镜像
FROM nvidia/cuda:10.2-runtime-ubuntu18.04

# 安装 vim / curl 工具(依然使用华为开源镜像站)
RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \
    sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.cn@g" /etc/apt/sources.list && \
    sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.cn@g" /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y vim curl && \
    apt-get clean && \
    mv /etc/apt/sources.list.bak /etc/apt/sources.list

# 增加 ma-user 用户 (uid = 1000, gid = 100)
# 注意到基础容器镜像已存在 gid = 100 的组,因此 ma-user 用户可直接使用
RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user

# 从上述 builder stage 中拷贝 /home/ma-user/miniconda3 目录到当前容器镜像的同名目录
COPY --chown=ma-user:100 --from=builder /home/ma-user/miniconda3 /home/ma-user/miniconda3

# 设置容器镜像预置环境变量
# 请务必设置 PYTHONUNBUFFERED=1, 以免日志丢失
ENV PATH=$PATH:/home/ma-user/miniconda3/bin \
    PYTHONUNBUFFERED=1

# 设置容器镜像默认用户与工作目录
USER ma-user
WORKDIR /home/ma-user
5. 执行以下命令编译镜像
cd trainjob_image
docker build . -t pytorch_trainjob:1.8.1-cuda10.2

编译过程约15分钟,编译完成,如下所示

4.2 上传镜像

1. 使用docker tag命令给上传镜像打标签

docker tag pytorch_trainjob:1.8.1-cuda10.2 swr.cn-north-4.myhuaweicloud.com/deep-learning-dcyang/pytorch_trainjob:1.8.1-cuda10.2

注意:请将上述命令中的“deep-learning-dcyang”替换成自己创建的SWR组织名

2. 使用docker push命令上传镜像

docker push swr.cn-north-4.myhuaweicloud.com/deep-learning-dcyang/pytorch_trainjob:1.8.1-cuda10.2

注意:请将上述命令中的“deep-learning-dcyang”替换成自己创建的SWR组织名

上传过程约5分钟,上传成功,如下所示:

可在SWR控制台主页进一步查看上传的镜像。

4.3 OBS上传实验

1. 服务列表搜索进入OBS控制台

2. 点击右上角“创建桶”按钮

3. 地区选择“北京四”,输入桶名称(桶名称不能重名,请改成自己的桶名称),策略选择“公共读”,其余保持默认,然后点击“立即创建”:

创建完成,可在桶列表下看到创建的桶:

3. 点击进入桶,点击创建“文件夹”:

4. 分别创建“demo-code”、“log”两个文件夹

5. 将以下链接复制到浏览器地址栏,浏览器自动下载文件至本地:

https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20221019/pytorch-verification.py

测试代码内容如下:

import torch
import torch.nn as nn

x = torch.randn(5, 3)
print(x)

available_dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
y = torch.randn(5, 3).to(available_dev)
print(y)

6. 进入“demo-code”文件夹

7. 点击“上传对象”

8. 点击“添加文件”

9. 选中之前下载的测试代码文件

10. 点击“上传”

完成后,可看到对应的文件

4.4 创建ModelArs训练作业

1. 进入ModelArts控制台

2. 点击“创建训练作业”

3. 名称描述信息

4. 选择自定义算法,自定义镜像

5. 指定代码目录

6. 设置启动命令:

/home/ma-user/miniconda3/bin/python ${MA_JOB_DIR}/demo-code/pytorch-verification.py

7. 选中“公共资源池”,“GPU规格”

8. 设置日志保存路径

9. 提交作业

提交完成,状态显示“等待中”

待状态显示“运行中”,可点击作业名称,查看具体详情

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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