MindSpeed-LLM作为昇腾大模型训练框架,旨在为昇腾芯片提供端到端的大语言模型训练方案,包含分布式预训练、分布式指令微调、分布式偏好对齐以及对应的开发工具链。MindSpeed-LLM使用指南包括了仓库拉取、环境搭建与大模型训练等章节,制作MindSpeed-LLM训练框架镜像可以结合本章节和MindSpeed-LLM使用指南。
断点续训可以基于基础训练镜像制作,基础训练镜像的制作可参考使用Dockerfile构建容器镜像(PyTorch)章节进行操作。
本章节结合基础训练镜像的制作步骤,展示基于Ubuntu20.04来构建训练镜像。
以下示例使用MindSpeed-LLM 1.0.0分支。
请按照表1所示,获取对应操作系统的软件包,并准备镜像所需的Dockerfile文件与脚本文件。
软件包 |
是否必选 |
说明 |
获取方法 |
---|---|---|---|
mindx_elastic-{version}-py3-none-linux_{arch}.whl |
是 使用优雅容错、Pod级别重调度或者进程级别重调度功能时,必须安装该whl包。 |
集群调度组件断点续训whl包,arch为CPU架构,可选aarch64或x86_64。 说明:
安装Elastic Agent组件前需确保PyTorch框架已正确安装,当前支持的PyTorch版本为:2.1.0、2.3.0、2.4.0、2.5.0。 |
说明:
用户通过获取链接得到的是Ascend-mindxdl-elastic_{version}_linux-{arch}.zip压缩包,需要通过解压后,获得相应的whl软件包。 |
mindio_ttp-{version}-py3-none-linux_{arch}.whl |
是 |
MindIO TFT安装包 |
|
apex-0.1+ascend-cp3x-cp3x-linux_{arch}.whl |
是 MindSpeed-LLM依赖 |
混合精度训练是在训练时混合使用单精度(float32)与半精度(float16)数据类型,将两者结合在一起,并使用相同的超参数实现了与float32几乎相同的精度。arch为CPU架构,可选aarch64或x86_64。 x表示8、9、10或11,当前可支持Python 3.8、Python 3.9、Python 3.10和Python3.11。 |
请参见《Ascend Extension for PyTorch 软件安装指南》中的“安装APEX模块”章节,根据实际情况编译APEX软件包。 |
torch_npu-2.1.0.post{version}-cp3x-cp3x-manylinux_2_17_{arch}.manylinux2014_{arch}.whl |
是 MindSpeed-LLM依赖 |
Ascend Extension for PyTorch插件是基于昇腾的深度学习适配框架,使昇腾NPU可以支持PyTorch框架,为PyTorch框架的使用者提供昇腾AI处理器的超强算力。 Pythonx表示8、9、10或11,当前可支持Python 3.8、Python 3.9、Python 3.10和Python3.11。 |
说明:
如果使用MindSpeed-LLM代码仓上的PyTorch模型,需要使用Ascend Extension for PyTorch 2.1.0及以上版本。 |
|
是 MindSpeed-LLM依赖 |
官方PyTorch包。x表示8、9、10或11,当前可支持Python3.8、Python3.9、Python3.10和Python3.11。 |
|
Kernels |
是 |
CANN二进制算子包,提供了静态库,并能够节省算子编译时间,在大模型推理、训练场景,使用静态库编译应用程序,和运行包含动态shape网络或单算子API(例如aclnn类API)相关业务时安装。arch可选aarch64或x86_64。 |
说明:
请获取和服务器型号匹配的软件包。 |
MindSpeed |
是 |
MindSpeed是针对昇腾设备的大模型加速库。 |
git clone https://gitee.com/ascend/MindSpeed.git cd MindSpeed git checkout 969686ff |
version.info |
是 安装cann需要 |
驱动版本信息文件。 |
从host拷贝“/usr/local/Ascend/driver/version.info”文件。 |
ascend_install.info |
是 安装cann需要 |
驱动安装信息文件。 |
从host拷贝“/etc/ascend_install.info”文件。 |
Dllogger代码仓 |
是 |
PyTorch日志工具。 |
git clone https://github.com/NVIDIA/dllogger.git |
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 Arm操作系统、配套Python 3.8为例来介绍训练镜像的制作,使用过程中需根据实际情况修改相关步骤。
FROM ubuntu:20.04 WORKDIR /root COPY . . ARG PYTORCH_WHL=torch-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl ARG PYTORCH_NPU_WHL=torch_npu-2.1.0.post10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl ARG APEX_WHL=apex-0.1+ascend-cp38-cp38-linux_aarch64.whl 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 MINDSPEED=MindSpeed ARG DLLOGGER=dllogger 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 \ 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 \ python3.8 python3.8-dev \ curl unzip liblapack3 liblapack-dev \ libhdf5-dev libxml2 patch # 时区 RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime # 建立Python软链接 RUN ln -s /usr/bin/python3.8 /usr/bin/python RUN ln -s /usr/bin/python3.8 /usr/bin/python3 RUN ln -s /usr/bin/python3.8-config /usr/bin/python-config RUN ln -s /usr/bin/python3.8-config /usr/bin/python3-config # 配置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.8 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 # 安装torch、torch_npu、apex包 RUN umask 0022 && pip install $PYTORCH_WHL && \ pip install $PYTORCH_NPU_WHL && \ pip install $APEX_WHL RUN umask 0022 && \ pip install sympy==1.4 && \ pip install cffi && \ pip install pathlib2 && \ pip install grpcio && \ pip install grpcio-tools && \ pip install torchvision==0.16.0 && \ pip install absl-py && \ pip install datasets && \ pip install tokenizers==0.20.1 && \ pip install pyOpenSSL # 创建HwHiAiUser用户和属主,UID和GID请与物理机保持一致避免出现无属主文件。示例中会自动创建user和对应的group,UID和GID都为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 Runtime挂载进来 RUN rm -f version.info && rm -f ascend_install.info \ rm -rf /usr/local/Ascend/driver/ RUN umask 0022 && cd $MINDSPEED && \ pip install -r requirements.txt && \ pip install -e . && \ echo "export PYTHONPATH=/root/MindSpeed:\$PYTHONPATH" >> ~/.bashrc RUN umask 0022 && cd $DLLOGGER && \ python setup.py build && \ python setup.py install # 导入环境变量 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 # MindCluster断点续训适配脚本 RUN umask 0022 && \ pip install $MINDX_ELASTIC_WHL && \ pip install $MINDIO_TTP_WHL # 可选,使用优雅容错、Pod级别重调度或进程级别重调度时必须配置以下命令 RUN sed -i '/import logging/i import mindx_elastic.api' $(pip3 show torch | grep Location | awk -F ' ' '{print $2}')/torch/distributed/run.py # 增加安装任务调度依赖库 RUN pip install apscheduler RUN rm -rf tmp && \ rm -f $PYTORCH_WHL && \ rm -f $PYTORCH_NPU_WHL && \ rm -f $APEX_WHL && \ rm -f $TOOLKIT && \ rm -f $KERNEL && \ rm -f $MINDX_ELASTIC_WHL && \ rm -f $MINDIO_TTP_WHL && \ rm -rf $DLLOGGER && \ rm -rf Dockerfile ## 最后打包成镜像mindspeed-dl:v1
docker build -t mindspeed-dl:v1 .