更新时间:2024-09-21 GMT+08:00
分享

准备镜像

准备大模型训练适用的容器镜像,包括获取镜像地址,了解镜像中包含的各类固件版本,配置Standard物理机环境操作。

基础镜像地址

本教程中用到的训练的基础镜像地址和配套版本关系如下表所示,请提前了解。

表1 基础容器镜像地址

镜像用途

镜像地址

配套版本

训练基础镜像

swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc2-py_3.9-hce_2.0.2312-aarch64-snt9b-20240727152329-0f2c29a

CANN:cann_8.0.rc2

PyTorch:2.1.0

基础镜像的使用

用户通过ECS获取和上传基础镜像步骤拉取基础镜像并上传至SWR中。随后可通过使用基础镜像(二选一)ECS中构建新镜像(二选一)的方式二选一来部署训练环境。方案的区别如下:

  • 使用基础镜像(二选一):用户可在训练作业中直接选择基础镜像作为运行环境。但基础镜像中pip依赖包缺少或版本不匹配,因此每次创建训练作业时,训练作业的启动命令中都需要执行 install.sh 文件,来安装依赖以及下载完整代码。
  • ECS中构建新镜像(二选一)在ECS中,通过运行Dockerfile文件会在基础镜像上创建新的镜像。新镜像命名可自定义。Dockerfile会下载Megatron-LM、MindSpeed、ModelLink源码,并将以上源码打包至镜像环境中。
    • 若用户希望修改源码,则需要使用新镜像创建容器,在容器内的/home/ma-user工作目录中访问并编辑以上源码文件。编辑完成后重新构建新镜像。

注意:训练作业的资源池以及ECS都需要联通外网,否则会安装和下载失败。

ECS获取和上传基础镜像

  1. 创建ECS。

    下文中介绍如何在ECS中构建一个训练镜像,请参考ECS文档购买一个Linux弹性云服务器。完成网络配置、高级配置等步骤,可根据默认选择,或进行自定义。创建完成后,单击“远程登录”,后续安装Docker等操作均在该ECS上进行。

    注意:CPU架构必须选择鲲鹏计算,镜像推荐选择EulerOS。

    图1 购买ECS

  2. 创建镜像组织。

    在SWR服务页面创建镜像组织。

    图2 创建镜像组织

  3. 安装Docker。

    1. 检查docker是否安装。
      docker -v   #检查docker是否安装

      如尚未安装,运行以下命令安装docker。

      yum install -y docker
    2. 配置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

  4. 获取训练镜像。

    请确保在正确的Region下获取镜像。建议使用官方提供的镜像部署训练服务。镜像地址{image_url}请参见表1

    docker pull {image_url}

  5. 在ECS中Docker登录。

    在SWR中单击右上角的“登录指令”,然后在跳出的登录指定窗口,单击复制临时登录指令。在创建的ECS中粘贴临时登录指令,即可完成登录。

    图3 复制登录指令

  6. 修改并上传镜像。

    1. 登录指令输入之后,使用下列示例命令:
      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

    2. 上传镜像至镜像仓库。
      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 则会在容器内安装依赖以及下载完整的代码。当训练作业结束后,对应的容器也会同步销毁。

图4 训练作业启动命令

ECS中构建新镜像(二选一)

通过ECS获取和上传基础镜像获取基础镜像后,可通过ECS运行Dockerfile文件,在镜像的基础上构建新镜像。

  1. 获取模型软件包,并上传到ECS的目录下(可自定义路径),获取地址参考表1

    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
    1. 编辑llm_train/AscendSpeed中的Dockerfile文件,修改git命令,填写自己的git账户信息。
      git config --global user.email "you@example.com" &&  \
      git config --global user.name "Your Name" &&  \
    2. 执行以下命令制作训练镜像。安装过程需要连接互联网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} 进行表示。

  2. 在ECS中Docker登录。

    在SWR中单击右上角的“登录指令”,然后在跳出的登录指定窗口,单击复制临时登录指令。在创建的ECS中粘贴临时登录指令,即可完成登录。

    图5 复制登录指令

  3. 修改并上传镜像。

    1. 在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

    2. 上传镜像至镜像仓库。
      docker push <镜像仓库地址>/<组织名称>/<镜像名称>:<版本名称>

      示例:

      docker push swr.cn-southwest-2.myhuaweicloud.com/ma-group/pytorch_2_1_ascend:20240606

相关文档