基于云主机的ModelArts模型训练实践,让开发环境化繁为简

本文分享自华为云社区《【开发者空间实践】云主机安装Docker并制作自定义镜像在ModelArts平台做模型训练》,作者: 开发者空间小蜜蜂。

1.1 案例介绍

在AI业务开发以及运行的过程中,一般都会有复杂的环境依赖需要进行调测并固化。面对开发中的开发环境的脆弱和多轨切换问题,在ModelArts的AI开发最佳实践中,通过容器镜像的方式将运行环境进行固化,以这种方式不仅能够进行依赖管理,而且可以方便的完成工作环境切换。配合ModelArts提供的云化容器资源使用,可以更加快速、高效的进行AI开发与模型实验的迭代等。

本案例将指导开发者如何在云主机上安装Docker制作一个自定义模型镜像并在ModelArts平台使用这个镜像作模型训练。

1.2 免费领取云主机

如您还没有云主机,可点击链接,领取专属云主机后进行操作。

如您已领取云主机,可直接开始实验。

1.3 实验流程

说明:

  1. 在云主机上安装docker;

  2. 制作模型训练镜像并上传到SWR;

  3. 在云主机创建训练脚本,使用浏览器打开OBS服务,上传训练脚本;

  4. 在ModelArts平台创建训练作业完成模型训练。

1.4 实验资源

本次实验花费总计约1元 ,资源采取按需计费,点击链接,可根据步骤加入华为云沃土云创计划,申领云资源代金券,即可免费体验。体验结束后,请及时释放资源,避免产生多余费用,给您带来不便。

1.5 在云主机安装Docker

进入云主机后,点击左面菜单的"终端"按钮,打开命令行工具。

在命令行中输入以下命令安装Docker:

复制代码
curl -fsSL get.docker.com -o get-docker.sh
	sh get-docker.sh

输入命令"sudo docker info" 确认Docker已经安装完毕。

接下来需要配置镜像加速,输入命令"vim /etc/docker/daemon.json"编辑docker配置文件,单击"i"键进入插入模式,然后输入以下内容,

复制代码
{
"registry-mirrors": [ "https://a3cc4b6f1d0747bda78ca8d86e4c5419.mirror.swr.myhuaweicloud.com" ]
}

输入完成后,按"Esc"退出插入模式,再输入":wq"保存文件,再输入"sudo systemctl restart docker"命令重启docker,然后输入命令"sudo docker info"查看,显示如下信息则表示镜像加速配置完成。

1.6 准备制作镜像的必要文件

确认安装好Docker以后,在当前目录使用命令"mkdir -p context"创建文件夹

使用"cd context/"命令进入context文件夹。

使用"vim pip.conf"命令编辑pip源文件pip.conf ,单击"i"键进入插入模式,输入如下内容,确认无误后单击ESC回到命令模式,使用":wq"命令保存退出。

复制代码
[global]
index-url = https://repo.huaweicloud.com/repository/pypi/simple
trusted-host = repo.huaweicloud.com
timeout = 120

使用wget命令下载"torch*.whl "文件,一共三个文件

复制代码
wget https://download.pytorch.org/whl/cu111/torch-1.8.1%2Bcu111-cp37-cp37m-linux_x86_64.whl
wget https://download.pytorch.org/whl/torchaudio-0.8.1-cp37-cp37m-linux_x86_64.whl
wget https://download.pytorch.org/whl/cu111/torchvision-0.9.1%2Bcu111-cp37-cp37m-linux_x86_64.whl

使用"wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-x86_64.sh"命令,下载Miniconda3 py37 4.12.0安装文件

将上述pip源文件、torch*.whl文件、Miniconda3安装文件放置在context文件夹内,完成上述操作后context文件夹内容如下。

复制代码
context
├── Miniconda3-py37_4.12.0-Linux-x86_64.sh
├── pip.conf
├── torch-1.8.1+cu111-cp37-cp37m-linux_x86_64.whl
├── torchaudio-0.8.1-cp37-cp37m-linux_x86_64.whl
└── torchvision-0.9.1+cu111-cp37-cp37m-linux_x86_64.whl

使用"vim 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:11.1.1-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+cu111-cp37-cp37m-linux_x86_64.whl /tmp
COPY torchvision-0.9.1+cu111-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+cu111-cp37-cp37m-linux_x86_64.whl \
    /tmp/torchvision-0.9.1+cu111-cp37-cp37m-linux_x86_64.whl \
    /tmp/torchaudio-0.8.1-cp37-cp37m-linux_x86_64.whl

# 构建最终容器镜像
FROM nvidia/cuda:11.1.1-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

完成编辑后,按"Esc"键退出编辑模式,输入":wq"命令保存文件。完成操作后,使用"ll"命令查看context文件夹内容如下

复制代码
context

├── Dockerfile

├── Miniconda3-py37_4.12.0-Linux-x86_64.sh

├── pip.conf

├── torch-1.8.1+cu111-cp37-cp37m-linux_x86_64.whl

├── torchaudio-0.8.1-cp37-cp37m-linux_x86_64.whl

└── torchvision-0.9.1+cu111-cp37-cp37m-linux_x86_64.whl

1.7 制作镜像并上传SWR

在context文件夹下,输入"sudo docker build . -t pytorch:1.8.1-cuda11.1"命令构建镜像。

此过程需要5-8分钟,可以先进行下面的步骤。

打开火狐浏览器,进入华为云首页,依次选择"产品">"容器">"容器镜像服务SWR",进入服务页面,然后点击"控制台"进入SWR控制台页面。

点击右上角的"创建组织"按钮,输入组织名,点击"确定"。如果已经有可用的组织,此步骤可以跳过。

然后回到总览页面,点击上方的"登录指令"按钮,复制弹出的docker命令,在此命令前面加上"sudo "然后在云主机的终端命令行输入,显示"Login Succeeded"则表示登录成功。

使用下列命令给新做好的镜像打标签

复制代码
sudo docker tag pytorch:1.8.1-cuda11.1 swr.{区域参数}/{组织名称}/pytorch:1.8.1-cuda11.1

区域参数从登录指令中获取,如下图红框所示,组织名称也请替换为上面步骤创建的组织名。此处以华为云 华南-广州区为例

复制代码
sudo docker tag pytorch:1.8.1-cuda11.1 swr.cn-south-1.myhuaweicloud.com/ai-test/pytorch:1.8.1-cuda11.1

使用下列命令将镜像上传到SWR

复制代码
sudo docker push swr.{区域参数}/{组织名称}/pytorch:1.8.1-cuda11.1

区域参数从登录指令中获取,如下图红框所示,组织名称也请替换为上面步骤创建的组织名。此处以华为云 华南-广州区为例

复制代码
sudo docker push swr.cn-south-1.myhuaweicloud.com/ai-test/pytorch:1.8.1-cuda11.1

完成镜像上传后,在容器镜像服务控制台的"我的镜像"页面可查看已上传的自定义镜像。

1.8 创建OBS桶和文件夹并上传训练脚本

在华为云首页,依次选择"产品">"存储">"对象存储服务OBS",进入服务页面,然后点击"购买"进入资源包购买页面。

按照如下规格购买:

购买完成后,在控制台页面左面的菜单中,点击"桶列表"。

然后点击右上角"创建桶"按钮,进入创建页面,

按照如下规格创建:

创建好桶后,就可以在桶列表页面看到,点击桶的名称链接进入桶的详情页。

点击"新建文件夹"按钮,创建一个名为"pytorch"的文件夹,在此文件夹下再创建两个子文件夹,分别命名"log"和"demo-code"。Demo-code文件夹存放训练脚本,log文件夹存放训练日志。

回到命令行窗口,在context文件夹下,使用vim pytorch-verification.py命令新建编辑训练脚本,单击"i"键进入插入模式,输入如下内容,确认无误后单击ESC回到命令模式,使用":wq"命令保存退出。

复制代码
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)

新建好脚本后,回到OBS控制台页面,进入到demo-code文件夹,将脚本上传到demo-code文件夹下。

点击"添加文件",在/developer/context目录下,选择刚刚创建的pytorch-verification.py文件,点击"打开",完成上传。

1.9 在ModelArts上创建训练作业

在华为云首页,依次选择"产品">"人工智能">"AI开发平台ModelArts",进入服务页面,点击"控制台"按钮,进入控制台页面。

第一次使用ModelArts平台,会提示权限不足,需要授权OBS服务和SWR服务。

点击上面红框的"此处"的超链接,进入授权委托页面,选择"新增委托",权限配置选择"普通用户",然后点击"创建"按钮即可。重新回到ModelArts控制台页面,提示权限不足的红框就消失了,可以正常使用了。

在左侧导航栏中选择"模型训练 > 训练作业",默认进入"训练作业"列表。

按照如下表格填入参数信息:

训练作业创建完成后,后台将自动完成容器镜像下载、代码目录下载、执行启动命令等动作。

训练作业一般需要运行一段时间。

训练完成后,在OBS服务,我们创建的桶和log文件夹下找到训练日志并下载下来,在下载的日志文件中搜索关键字:tensor,看到如下信息表示训练成功。

至此,实验完成。

相关推荐
undsky_几秒前
【RuoYi-SpringBoot3-Pro】:将 AI 编程融入传统 java 开发
java·人工智能·spring boot·ai·ai编程
lcx_defender2 分钟前
【Docker】Docker部署运行nacos
运维·docker·容器
AI应用开发实战派14 分钟前
AI人工智能中Bard的智能电子商务优化
人工智能·ai·bard
AI原生应用开发23 分钟前
AIGC领域Bard在通信领域的内容创作
ai·aigc·bard
啦啦啦小石头34 分钟前
docker添加用户权限不使用sudo
运维·docker·容器
cuber膜拜43 分钟前
Weaviate 简介与基本使用
数据库·python·docker·向量数据库·weaviate
唐诺1 小时前
深入了解AI
人工智能·ai
ZEGO即构开发者1 小时前
如何用一句话让AI集成 ZEGO 产品
ai·实时互动·实时音视频·rtc
阿杰学AI1 小时前
AI核心知识76——大语言模型之RAG 2.0(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·rag·检索增强生成·rag2.0
xuefuhe1 小时前
Docker常用命令
docker