ModelArts自定义镜像完成定制化作业训练【玩转华为云】
主要内容有:
- 一 容器镜像是啥
- 二 实验条件先准备好
- 三 用自定义镜像建Notebook
- 四 自定义镜像建训练作业
一 容器镜像是啥
1.1 先搞清楚定义
- 它是一种支持镜像全生命周期管理的服务, 提供简单易用安全可靠的镜像管理功能,来快速部署容器化服务。
通过使用容器镜像服务,您不用自建和维护镜像仓库,即可享有云上的镜像安全托管及高效分发服务,并且可配合云容器引擎 CCE、云容器实例 CCI使用,获得容器上云的顺畅体验;
容器镜像服务的计费项包括存储空间与流量费用,目前均免费提供给您哈!
1.2 这服务有啥功能呢(具体点)
- 镜像全生命周期管理
- 私有镜像仓库
- 镜像加速
- 镜像仓库触发器
容器镜像服务支持容器镜像版本更新自动触发部署。您只需要为镜像设置一个触发器,通过触发器,可以在每次镜像版本更新时,自动更新使用该镜像部署的应用。
- 镜像安全扫描(这里可集成容器安全服务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
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.com@g" /etc/apt/sources.list && \
sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@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
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. 提交作业
提交完成,状态显示“等待中”
待状态显示“运行中”,可点击作业名称,查看具体详情
- 点赞
- 收藏
- 关注作者
评论(0)