制作强化学习后训练镜像(Verl框架)
Verl是一款专为大语言模型(LLM)后训练阶段设计的灵活、高效且具备生产就绪能力的强化学习训练框架。本章节基于Ubuntu 20.04来构建Verl的后训练镜像。
准备软件包
请按照表1所示,获取对应操作系统的软件包,并准备镜像所需的Dockerfile文件与脚本文件。
软件包 |
是否必选 |
说明 |
获取方法 |
|---|---|---|---|
Kernels |
是 |
CANN二进制算子包,arch可选aarch64或x86_64。示例使用8.2.RC1版本。 |
说明:
请获取和服务器型号匹配的软件包。 |
CANN |
是 |
CANN开发套件包,安装Toolkit和NNAL组件。示例使用8.2.RC1版本。 |
说明:
请获取和服务器型号匹配的软件包。 |
get-pip.py |
是 |
用于安装pip模块。 |
curl -k https://bootstrap.pypa.io/get-pip.py -o get-pip.py |
version.info |
是 |
驱动版本信息文件。 |
从host拷贝“/usr/local/Ascend/driver/version.info”文件。 |
ascend_install.info |
是 |
驱动安装信息文件。 |
从host拷贝“/etc/ascend_install.info”文件。 |
vLLM |
是 |
示例使用的推理引擎,使用v0.9.1分支。 |
git clone -b v0.9.1 https://github.com/vllm-project/vllm.git 下载后,将“vllm/requirements/build.txt”中的torch版本修改为2.5.1。 |
vllm-ascend |
是 |
vLLM推理引擎在NPU上的适配插件,使用commitid:4014ad2a46e01c79fd8d98d6283404d0bc414dce。 |
git clone -b v0.9.1-dev https://github.com/vllm-project/vllm-ascend.git cd vllm-ascend git checkout 4014ad2a46e01c79fd8d98d6283404d0bc414dce 然后修改requirements.txt中的torch-npu版本为2.5.1.post1。 |
Megatron-LM |
是 |
训练后端使用Megatron的v0.12.1版本。 |
git clone https://github.com/NVIDIA/Megatron-LM.git cd Megatron-LM git checkout core_v0.12.1 |
MindSpeed |
是 |
训练后端使用MindSpeed,使用commitid:1f13e6fdbfd701ea7e045c8d6bb2469fab9775a7。 |
git clone https://gitee.com/ascend/MindSpeed.git cd MindSpeed git checkout 1f13e6fdbfd701ea7e045c8d6bb2469fab9775a7 |
Verl |
是 |
后训练框架,使用commitid:02f4386ae89c9a25863dca0bb8b6e119b2f01385。 |
git clone https://github.com/volcengine/verl.git cd verl git checkout 02f4386ae89c9a25863dca0bb8b6e119b2f01385 |
rl-plugin |
是 |
Verl在NPU上的适配插件,使用commitid:9a679fc3be95d162b78d42e9e3df569c30a89a5e。 |
git clone https://gitee.com/ascend/MindSpeed-RL.git cd MindSpeed-RL/rl-plugin git checkout 9a679fc3be95d162b78d42e9e3df569c30a89a5e |
Dockerfile |
是 |
制作镜像需要。 |
- |
为了防止软件包在传递过程中或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。
在软件包下载之后,请参考《OpenPGP签名验证指南》,对从Support网站下载的软件包进行PGP数字签名校验。如果校验失败,请不要使用该软件包,先联系华为技术支持工程师解决。
使用软件包安装/升级之前,也需要按上述过程先验证软件包的数字签名,确保软件包未被篡改。
运营商客户请访问:https://support.huawei.com/carrier/digitalSignatureAction
企业客户请访问:https://support.huawei.com/enterprise/zh/tool/pgp-verify-TL1000000054
本章节以两台Atlas 900 A3 SuperPoD 超节点、Ubuntu 20.04、配套Python 3.10为例来介绍后训练镜像的制作,使用过程中需根据实际情况修改相关步骤。
操作步骤
- 参照表1,在宿主机上完成软件包的准备工作。
- 编写如下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.2.RC1_linux-aarch64.run ARG NNAL=Ascend-cann-nnal_8.2.RC1_linux-aarch64.run ARG KERNEL=Atlas-A3-cann-kernels_8.2.RC1_linux-aarch64.run 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 RUN umask 0022 && apt update && DEBIAN_FRONTEND=noninteractive 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 vim patch gcc g++ make cmake build-essential libbz2-dev libreadline-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev m4 dos2unix libopenblas-dev git libjemalloc2 libomp-dev net-tools # 建立Python软链接 RUN ln -s /usr/bin/python3.10 /usr/bin/python RUN unlink /usr/bin/python3 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 && python get-pip.py # 配置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 # 时区 RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime # 创建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 && \ chmod +x $NNAL RUN umask 0022 && ./$TOOLKIT --install-path=/usr/local/Ascend/ --install --quiet RUN umask 0022 && . /usr/local/Ascend/ascend-toolkit/set_env.sh && ./$KERNEL --install --quiet RUN umask 0022 && . /usr/local/Ascend/ascend-toolkit/set_env.sh && ./$NNAL --install --quiet - 构建镜像。执行以下命令生成镜像。注意不要遗漏命令结尾的“.”。
docker build -t verl-train:v1 .
- 安装推理服务包。执行以下命令启动容器。
docker run -it \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ verl-train:v1 /bin/bash
然后在容器内执行以下命令:
source /usr/local/Ascend/driver/bin/setenv.bash; source /usr/local/Ascend/ascend-toolkit/set_env.sh; source /usr/local/Ascend/nnal/atb/set_env.sh; source /usr/local/Ascend/nnal/asdsip/set_env.sh; # vLLM安装 cd vllm && pip install -r requirements/build.txt -i https://mirrors.aliyun.com/pypi/simple/ && pip install -r requirements/common.txt -i https://mirrors.aliyun.com/pypi/simple/ && VLLM_TARGET_DEVICE=empty python setup.py develop && cd .. # vllm-ascend安装 cd vllm-ascend && pip install -v -e . && cd .. # Megatron安装 cd Megatron-LM && git checkout core_v0.12.1 && pip install -e . && cd .. # MindSpeed安装 cd MindSpeed && pip install -e . && cd .. # Verl安装 cd verl && pip install -e . && cd .. # Verl插件安装 cd MindSpeed-RL/rl-plugin && pip install -v -e . && cd ..
- 如果在安装vllm-ascend过程中,出现找不到torch的cmake路径的报错,可以参考以下命令指定“CMAKE_PREFIX_PATH”进行安装:
CMAKE_PREFIX_PATH=/usr/local/lib/python3.10/dist-packages/torch/share/cmake/Torch/ pip install -v -e .
- 如果在安装Verl过程中,出现找不到README.md的报错,可以在“MindSpeed-RL/rl-plugin”创建README.md文件,内容不限。
- 安装完成后,如果发现torch版本不是2.5.1,torchvision版本不是0.20.1,则重新安装torch 2.5.1和torchvision 0.20.1。
- 如果在安装vllm-ascend过程中,出现找不到torch的cmake路径的报错,可以参考以下命令指定“CMAKE_PREFIX_PATH”进行安装:
- 在另一个窗口执行以下命令保存镜像。为了使Dockerfile更加安全,用户可以根据业务在其中定义HEALTHCHECK检查。通过在容器内部运行HEALTHCHECK [OPTIONS] CMD命令来检查容器的运行状况。
# 找到容器ID docker ps | grep verl-train # 保存容器为镜像,<container_id>替换为实际的容器ID docker commit <container_id> verl-train:v1