准备镜像
准备大模型训练适用的容器镜像,包括获取镜像地址,了解镜像中包含的各类固件版本,配置Standard物理机环境操作。
基础镜像地址
本教程中用到的训练的基础镜像地址和配套版本关系如下表所示,请提前了解。
基础镜像的使用
用户通过ECS获取和上传基础镜像步骤拉取基础镜像并上传至SWR中。随后可通过使用基础镜像(二选一)、ECS中构建新镜像(二选一)的方式(二选一)来部署训练环境。方案的区别如下:
- 使用基础镜像(二选一):用户可在训练作业中直接选择基础镜像作为运行环境。但基础镜像中pip依赖包缺少或版本不匹配,因此每次创建训练作业时,训练作业的启动命令中都需要执行 install.sh 文件,来安装依赖以及下载完整代码。
- ECS中构建新镜像(二选一):在ECS中,通过运行Dockerfile文件会在基础镜像上创建新的镜像。新镜像命名可自定义。Dockerfile会下载Megatron-LM、MindSpeed、ModelLink源码,并将以上源码打包至镜像环境中。
- 若用户希望修改源码,则需要使用新镜像创建容器,在容器内的/home/ma-user工作目录中访问并编辑以上源码文件。编辑完成后重新构建新镜像。
注意:训练作业的资源池以及ECS都需要联通外网,否则会安装和下载失败。
ECS获取和上传基础镜像
- 创建ECS。
下文中介绍如何在ECS中构建一个训练镜像,请参考ECS文档购买一个Linux弹性云服务器。完成网络配置、高级配置等步骤,可根据默认选择,或进行自定义。创建完成后,单击“远程登录”,后续安装Docker等操作均在该ECS上进行。
注意:CPU架构必须选择鲲鹏计算,镜像推荐选择EulerOS。
图1 购买ECS
- 创建镜像组织。
在SWR服务页面创建镜像组织。
图2 创建镜像组织
- 安装Docker。
- 检查docker是否安装。
docker -v #检查docker是否安装
如尚未安装,运行以下命令安装docker。
yum install -y docker
- 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。
sysctl -p | grep net.ipv4.ip_forward
如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
- 检查docker是否安装。
- 获取训练镜像。
请确保在正确的Region下获取镜像。建议使用官方提供的镜像部署训练服务。镜像地址{image_url}请参见表1。
docker pull {image_url}
- 在ECS中Docker登录。
在SWR中单击右上角的“登录指令”,然后在跳出的登录指定窗口,单击复制临时登录指令。在创建的ECS中粘贴临时登录指令,即可完成登录。
图3 复制登录指令
- 修改并上传镜像。
- 登录指令输入之后,使用下列示例命令:
docker tag {image_url} <镜像仓库地址>/<组织名称>/<镜像名称>:<版本名称>
参数说明:
- <镜像仓库地址>:可在SWR控制台上查询,容器镜像服务中登录指令末尾的域名即为镜像仓库地址。
- <组织名称>:前面步骤中自己创建的组织名称。示例:ma-group
- <镜像名称>:<版本名称>:定义镜像名称。示例:pytorch_2_1_ascend:20240606
示例:
docker tag swr.cn-southwest-2.myhuaweicloud.com/ma-group/pytorch_2_1_ascend:20240606
- 上传镜像至镜像仓库。
docker push <镜像仓库地址>/<组织名称>/<镜像名称>:<版本名称>
示例:
docker push swr.cn-southwest-2.myhuaweicloud.com/ma-group/pytorch_2_1_ascend:20240606
- 登录指令输入之后,使用下列示例命令:
使用基础镜像(二选一)
通过ECS获取和上传基础镜像将镜像上传至SWR服务后,可创建训练作业,在“选择镜像”中选择SWR中基础镜像。
由于基础镜像内需要安装固定版本依赖包,若直接使用基础镜像进行训练,每次创建训练作业时,训练作业的图4中都需要执行 install.sh 文件,来安装依赖以及下载完整代码。命令如下:
cd /home/ma-user/modelarts/user-job-dir/AscendSpeed; sh ./scripts/install.sh; sh ./scripts/obs_pipeline.sh
创建训练作业后,会在节点机器中使用基础镜像创建docker容器,并在容器内进行分布式训练。而 install.sh 则会在容器内安装依赖以及下载完整的代码。当训练作业结束后,对应的容器也会同步销毁。
ECS中构建新镜像(二选一)
通过ECS获取和上传基础镜像获取基础镜像后,可通过ECS运行Dockerfile文件,在镜像的基础上构建新镜像。
- 获取模型软件包,并上传到ECS的目录下(可自定义路径),获取地址参考表1。
- 解压AscendCloud压缩包及该目录下的训练代码AscendCloud-LLM-6.3.907-xxx.zip,并直接进入到llm_train/AscendSpeed文件夹下面
unzip AscendCloud-*.zip -d ./AscendCloud && unzip ./AscendCloud/AscendCloud-LLM-*.zip -d ./AscendCloud/AscendCloud-LLM && cd ./AscendCloud/AscendCloud-LLM/llm_train/AscendSpeed
- 编辑llm_train/AscendSpeed中的Dockerfile文件,修改git命令,填写自己的git账户信息。
git config --global user.email "you@example.com" && \ git config --global user.name "Your Name" && \
- 执行以下命令制作训练镜像。安装过程需要连接互联网git clone,请确保ECS可以访问公网
docker build -t <镜像名称>:<版本名称> .
若无法访问公网,则可以配置代理,增加`--build-arg`参数指定代理地址,可访问公网。
docker build --build-arg "https_proxy=http://xxx.xxx.xxx.xxx" --build-arg "http_proxy=http://xxx.xxx.xxx.xxx" --network=host -t <镜像名称>:<版本名称> .
- <镜像名称>:<版本名称>:定义镜像名称。示例:pytorch_2_1_ascend:20240606
- 记住使用Dockerfile创建的新镜像名称, 后续使用 ${dockerfile_image_name} 进行表示。
- 解压AscendCloud压缩包及该目录下的训练代码AscendCloud-LLM-6.3.907-xxx.zip,并直接进入到llm_train/AscendSpeed文件夹下面
- 在ECS中Docker登录。
在SWR中单击右上角的“登录指令”,然后在跳出的登录指定窗口,单击复制临时登录指令。在创建的ECS中粘贴临时登录指令,即可完成登录。
图5 复制登录指令
- 修改并上传镜像。
- 在ECS服务器中输入登录指令后,使用下列示例命令将Standard镜像上传至SWR:
docker tag ${dockerfile_image_name} <镜像仓库地址>/<组织名称>/<镜像名称>:<版本名称>
参数说明:
${dockerfile_image_name}:在step5中,使用Dockerfile创建的新镜像名称。
<镜像仓库地址>:可在SWR控制台上查询,容器镜像服务中登录指令末尾的域名即为镜像仓库地址。
<组织名称>:前面步骤中自己创建的组织名称。示例:ma-group
<镜像名称>:<版本名称>:定义镜像名称。示例:pytorch_2_1_ascend:20240606
示例:
docker tag {image_url} swr.cn-southwest-2.myhuaweicloud.com/ma-group/pytorch_2_1_ascend:20240606
- 上传镜像至镜像仓库。
docker push <镜像仓库地址>/<组织名称>/<镜像名称>:<版本名称>
示例:
docker push swr.cn-southwest-2.myhuaweicloud.com/ma-group/pytorch_2_1_ascend:20240606
- 在ECS服务器中输入登录指令后,使用下列示例命令将Standard镜像上传至SWR: