制作MindFormers训练镜像(MindSpore框架)

MindSpore Transformers套件(以下简称MindFormers)的目标是构建一个大模型训练、微调、评估、推理、部署的全流程开发套件,提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性。期望帮助用户轻松实现大模型训练和创新研发。

MindSpore Transformers文档的快速入门包括了安装与快速启动章节,可以在镜像制作时参考。

训练镜像可以基于基础训练镜像,结合MindFormers文档自行制作,基础训练镜像的制作可参考使用Dockerfile构建容器镜像(MindSpore)章节进行操作。

本章节结合基础训练镜像的制作步骤,展示基于Ubuntu20.04来构建训练镜像。

准备软件包

请按照表1所示,获取对应操作系统的软件包,并准备镜像所需的Dockerfile文件与脚本文件。

表1 准备软件包

软件包

是否必选

说明

获取方法

MindFormers代码仓

构建一个大模型训练、微调、评估、推理、部署的全流程开发套件,提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性

git clone https://gitee.com/mindspore/mindformers.git

cd mindformers

git checkout 2c8853d5

requirements.txt文件

由于通过pip安装MindSpore时,可能出现依赖的组件安装报错,故可以先安装依赖。

wget https://gitee.com/mindspore/mindspore/raw/r2.4.1/requirements.txt

说明:

MindSpore软件包与Atlas 训练系列产品需配套使用,请参见MindSpore安装指南查看对应关系。

mindspore-{version}-cp3x-cp3x-linux_aarch64.whl

mindspore 2.4.10支持片上内存uce故障恢复

获取链接

mindx_elastic-{version}-py3-none-linux_{arch}.whl

使用优雅容错模式、Pod级别重调度或者进程级别重调度功能时,必须安装该whl包。

集群调度组件断点续训whl包,arch为CPU架构,可选aarch64或x86_64。

获取链接

说明:

用户通过获取链接得到的是Ascend-mindxdl-elastic_{version}_linux-{arch}.zip压缩包,需要通过解压后,获得相应的whl软件包。

mindio_ttp-{version}-py3-none-linux_{arch}.whl

MindIO TFT安装包

获取链接

Kernels

CANN二进制算子包,提供了静态库,并能够节省算子编译时间,在大模型推理、训练场景,使用静态库编译应用程序,和运行包含动态shape网络或单算子API(例如aclnn类API)相关业务时安装。arch可选aarch64或x86_64。

获取链接

说明:

请获取和服务器型号匹配的软件包。

Ascend-cann-toolkit_{version}_linux-{arch}.run

CANN开发套件包,在训练&推理&开发调试场景下安装,主要用于训练和推理业务、模型转换、算子/应用/模型的开发和编译。arch可选aarch64或x86_64。

获取链接

说明:

请获取和服务器型号匹配的软件包。

taskd-{version}-py3-none-linux_{arch}.whl

集群调度组件断点续训whl包,arch为CPU架构,可选aarch64或x86_64。

获取链接

说明:
  • Mindspore场景下使用优雅容错、Pod级别重调度、进程级别重调度、进程级在线恢复,必须安装该whl包。
  • 用户通过获取链接得到的是TaskD压缩包,需要通过解压后,获得相应的whl软件包。

version.info

安装cann需要

驱动版本信息文件。

从host拷贝“/usr/local/Ascend/driver/version.info”文件。

ascend_install.info

安装cann需要

驱动安装信息文件。

从host拷贝“/etc/ascend_install.info”文件。

get-pip.py

用于安装pip模块

curl -k https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Dockerfile

制作镜像需要。

--

为了防止软件包在传递过程中或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。

在软件包下载之后,请参考《OpenPGP签名验证指南》,对从Support网站下载的软件包进行PGP数字签名校验。如果校验失败,请不要使用该软件包,先联系华为技术支持工程师解决。

使用软件包安装/升级之前,也需要按上述过程先验证软件包的数字签名,确保软件包未被篡改。

运营商客户请访问:https://support.huawei.com/carrier/digitalSignatureAction

企业客户请访问:https://support.huawei.com/enterprise/zh/tool/pgp-verify-TL1000000054

本章节以单台Atlas 800T A2 训练服务器Ubuntu 20.04、配套Python 3.10为例来介绍制作镜像的详细过程,使用过程中需根据实际情况修改相关步骤。

操作步骤

  1. 在宿主机上完成软件包的准备工作。
  2. 构建如下的Dockerfile。

    FROM ubuntu:20.04
     
    WORKDIR /root
     
    COPY . .
     
    ARG HOST_ASCEND_BASE=/usr/local/Ascend
    ARG TOOLKIT_PATH=/usr/local/Ascend/toolkit/latest
    ARG TOOLKIT=Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run
    ARG KERNEL=Ascend-cann-kernels-910b_8.1.RC1_linux-aarch64.run
    ARG MINDX_ELASTIC_WHL=mindx_elastic-7.0.RC1-py3-none-linux_aarch64.whl
    ARG MINDIO_TTP_WHL=mindio_ttp-1.0.0-py3-none-linux_aarch64.whl
    ARG MINDFORMERS=mindformers
    ARG MINDSPORE_REQUIREMENTS=requirements.txt
    ARG MINDSPORE_WHL=mindspore-2.5.0-cp310-cp310-linux_aarch64.whl
    ARG TASKD_WHL=taskd-7.0.RC1-py3-none-linux_aarch64.whl    
     
    RUN echo "nameserver 114.114.114.114" > /etc/resolv.conf
     
    RUN echo "deb http://repo.huaweicloud.com/ubuntu-ports/ focal main restricted universe multiverse\n\
    deb http://repo.huaweicloud.com/ubuntu-ports/ focal-updates main restricted universe multiverse\n\
    deb http://repo.huaweicloud.com/ubuntu-ports/ focal-backports main restricted universe multiverse\n\
    deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse" > /etc/apt/sources.list
     
     
    ARG DEBIAN_FRONTEND=noninteractive
     
    RUN umask 0022 && apt update && \
        apt-get install -y --no-install-recommends \
        software-properties-common
    RUN umask 0022 && add-apt-repository ppa:deadsnakes/ppa && \
        apt update && \
        apt autoremove -y python python3 && \
        apt install -y python3.10 python3.10-dev
     
    # 建立Python软链接
    RUN ln -s /usr/bin/python3.10 /usr/bin/python
    RUN ln -s /usr/bin/python3.10 /usr/bin/python3
    RUN ln -s /usr/bin/python3.10-config /usr/bin/python-config
    RUN ln -s /usr/bin/python3.10-config /usr/bin/python3-config
     
    # 系统包
    RUN umask 0022 && apt update && \
        apt-get install -y --no-install-recommends \
            gcc g++ make cmake vim \
            zlib1g zlib1g-dev \
            openssl libsqlite3-dev libssl-dev \
            libffi-dev unzip pciutils \
            net-tools libblas-dev \
            gfortran libblas3 libopenblas-dev \
            curl unzip liblapack3 liblapack-dev \
            libhdf5-dev libxml2 patch
     
    # 时区
    # RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime
     
    # 配置pip源
    RUN mkdir -p ~/.pip \
    && echo '[global] \n\
    index-url=https://mirrors.huaweicloud.com/repository/pypi/simple\n\
    trusted-host=mirrors.huaweicloud.com' >> ~/.pip/pip.conf
     
    # pip3.10
    RUN cd /tmp && \
        apt-get download python3-distutils && \
        dpkg-deb -x python3-distutils_*.deb / && \
        rm python3-distutils_*.deb && \
        cd - && \
        python get-pip.py && \
    rm get-pip.py
     
    RUN umask 0022 && \
        pip install sympy==1.4 && \
        pip install cffi && \
        pip install pathlib2 && \
        pip install grpcio && \
        pip install grpcio-tools && \
        pip install absl-py && \
        pip install datasets && \
        pip install tokenizers==0.20.1 && \
        pip install pyOpenSSL
     
    # 创建HwHiAiUser用户和属主,UIDGID请与物理机保持一致避免出现无属主文件。示例中会自动创建user和对应的group,UIDGID都为1000
    RUN useradd -d /home/HwHiAiUser -u 1000 -m -s /bin/bash HwHiAiUser
     
    # Ascend包
    # 构建之前把host的/usr/local/Ascend/driver/version.info拷贝一份到当前目录
    RUN umask 0022 &&  \
        cp ascend_install.info /etc/ && \
        mkdir -p /usr/local/Ascend/driver/ && \
        cp version.info /usr/local/Ascend/driver/ && \
        chmod +x $TOOLKIT && \
        chmod +x $KERNEL
     
    RUN umask 0022 && ./$TOOLKIT --install-path=/usr/local/Ascend/ --install --quiet
    RUN echo "source /usr/local/Ascend/ascend-toolkit/set_env.sh" >> ~/.bashrc
    RUN umask 0022 && ./$KERNEL --install --quiet
     
    # 只为了安装toolkit包,所以需要清理,容器启动时通过ascend docker挂载进来
    RUN rm -f version.info && \
        rm -rf /usr/local/Ascend/driver/
     
    # 安装mindspore
    RUN umask 0022 && pip uninstall te topi hccl -y && \
             pip install sympy && \
             pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/te-*-py3-none-any.whl && \
             pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/hccl-*-py3-none-any.whl
    RUN umask 0022 && \
        pip install -r $MINDSPORE_REQUIREMENTS && \
        pip install $MINDSPORE_WHL
     
    # 安装mindformers
    RUN umask 0022 && cd $MINDFORMERS && \
        pip install -r requirements.txt && bash build.sh
     
    # MindCluster无损失断点续训适配脚本
    RUN umask 0022 && \
        pip install $MINDX_ELASTIC_WHL && \
        pip install $MINDIO_TTP_WHL && \
        pip install $TASKD_WHL
     
     
    # 环境变量
    ENV HCCL_WHITELIST_DISABLE=1
     
    # 创建/lib64/ld-linux-aarch64.so.1
    RUN umask 0022 && \
        if [ ! -d "/lib64" ]; \
        then \
            mkdir /lib64 && ln -sf /lib/ld-linux-aarch64.so.1 /lib64/ld-linux-aarch64.so.1; \
        fi
     
    # 增加安装任务调度依赖库
    RUN pip install apscheduler
     
     
    RUN rm -rf tmp && \
        rm -f $TOOLKIT && \
        rm -f $KERNEL && \
        rm -f $MINDX_ELASTIC_WHL && \
        rm -f $MINDIO_TTP_WHL && \
        rm -f $MINDSPORE_REQUIREMENTS && \
        rm -f $MINDSPORE_WHL
    ## 最后打包成镜像mindformers-dl:v1

  3. 构建镜像。执行以下命令生成镜像为了使Dockerfile更加安全,用户可以根据业务在其中定义HEALTHCHECK检查。通过在容器内部运行HEALTHCHECK [OPTIONS] CMD命令来检查容器的运行状况。注意不要遗漏命令结尾的“.”

    docker build -t mindformers-dl:v1 .