昇腾社区首页
中文
注册
开发者
下载

制作强化学习后训练镜像(Verl框架)

Verl是一款专为大语言模型(LLM)后训练阶段设计的灵活、高效且具备生产就绪能力的强化学习训练框架。本章节基于Ubuntu 20.04来构建Verl的后训练镜像。

准备软件包

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

表1 准备软件包

软件包

是否必选

说明

获取方法

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. 参照表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.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 
     
  3. 构建镜像。执行以下命令生成镜像注意不要遗漏命令结尾的“.”
    docker build -t verl-train:v1 .
  4. 安装推理服务包。执行以下命令启动容器。
    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。
  5. 在另一个窗口执行以下命令保存镜像。为了使Dockerfile更加安全,用户可以根据业务在其中定义HEALTHCHECK检查。通过在容器内部运行HEALTHCHECK [OPTIONS] CMD命令来检查容器的运行状况。
    # 找到容器ID
    docker ps | grep verl-train
    # 保存容器为镜像,<container_id>替换为实际的容器ID
    docker commit <container_id> verl-train:v1