作者​:昇腾实战派
知识地图​:https://blog.csdn.net/Lumos_Lovegood/article/details/161601003

背景简介

VeRL原生支持GPU,昇腾作为VeRL开源社区贡献方,对VeRL进行适配,使其能在NPU上运行。因此,需要对社区原生特性在NPU上的支持情况以及一些NPU上的新增特性进行测试。

简单说,强化学习包含训练和推理两部分,是一种边推边训的框架。区别于预训练和微调,强化学习是后训练,基于推理的结果对训练进行指导。

下面介绍VeRL的测试方法:

环境部署

安装HDK、CANN、PTA
准备VeRL、vllm、vllm-ascend、Megatron(可选)、MindSpeed(可选)等源码,安装相关依赖verl/blob/main/docs/ascend_tutorial/get_start/quick_start.rst

以release的版本(v0.8.0)为例,基本配套如下:

verl vllm vllm-ascend torch torch_npu cann
v0.8.0 0.18.0 0.18.0 2.9.0 2.9.0.post2 9.0.0

详细配套请参考verl/docs/ascend_tutorial/get_start/install_guidance.rst at main · verl-project/verl · GitHub

模型训练

数据预处理、权重转换、参数配置、启动训练

性能

  • throughput:端到端吞吐
  • perf/time_per_step:单步总时长

精度

  1. 参考指标:
  • critic/rewards/mean

    类似LLM的loss,但是越高越好,一般要求训练过程中rewards是上升趋势

  1. 测试验收方式:
    如果是有标杆的情况,需要使用训练后保存的权重进行评测,参考下面模型推理的精度测试方法

模型推理(评测)

服务端

使用模型训练的环境拉起服务端

# NPU服务端
python -m vllm.entrypoints.openai.api_server \
       --model="/home/zbz/Qwen3-32B/" \
       --served-model-name auto \
       --gpu-memory-utilization 0.9 \
       --max-num-seqs 24 \
       --max-model-len 22528 \
       --max-num-batched-tokens 22528 \
       --enforce-eager \
       --trust-remote-code \
       --distributed_executor_backend=mp \
       --tensor-parallel-size 4 \
       --data-parallel-size 1 \
       --generation-config vllm \
       --port 6380
  • model:训练后的权重路径,需要是hf格式,保存后的若是mg格式,需要转回hf
  • tensor-parallel-size:TP建议和训练时infer的配置保持一致
  • data-parallel-size:DP建议和训练时infe的配置保持一致
  • port:可任意设置空闲端口
  • max-model-len:输入序列长度+输出序列长度
  • max-num-batched-tokens: 和max-model-len一致即可
客户端

另起一个会话,并且需要新建一个conda或者venv环境安装ais-benchmark(避免环境依赖冲突)

git clone https://gitee.com/aisbench/benchmark.git
cd benchmark/
pip3 install -e ./ --use-pep517

按需下载aimeMATH等数据集,放到benchmark/ais_bench/datasets目录下

然后修改评测脚本
vim benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py

from ais_bench.benchmark.utils.model_postprocessors import extract_non_reasoning_content
from ais_bench.benchmark.models import VLLMCustomAPIChatStream

models = [
    dict(
        attr="service", # local or service
        type=VLLMCustomAPI,
        abbr='vllm-api-general',
        path="",
        model="",
        max_seq_len = 2048, # 输入长度
        request_rate = 0,
        rpm_verbose = False,
        retry = 2,
        host_ip = "localhost", # 推理服务的IP
        host_port = 6380, # 推理服务的端口
        enable_ssl = False,
        max_out_len = 20480, # 最大输出tokens长度
        batch_size=48, # 推理的最大并发数
        generation_kwargs = dict(
            temperature = 0,
            seed = 1234,
        )
    )
]

评测命令如下:

ais_bench --models vllm_api_chat --datasets aime2024_gen

其中datasets的值需要和benchmark/ais_bench/benchmark/configs/datasets/下各数据集的py文件名称对应一致

下面提供循环评测的代码以便验证:

# 启动命令
#!/bin/bash

for ((i=1; i<=4; i++))
   do
   	echo "==================aime2024_gen times: $i"
   	ais_bench --models vllm_api_stream_chat --datasets aime2024_gen
done

for ((i=1; i<=4; i++))
do
	echo "==================math_prm800k_500_0shot_cot_gen times: $i"
	ais_bench --models vllm_api_stream_chat --datasets math_prm800k_500_0shot_cot_gen
done

故障排查

  1. 执行训练脚本后,ray从一开始就连不通
    确保各节点python版本、ray的版本一致,且各节点没有开启防火墙,确保ray通信不会被拦截。可以使用以下代码进行测试:

    • 关闭防火墙 systemctl stop firewalld
    • 主节点ray start --head --port 6366
    • 备节点ray start --address='主节点ip:6366

    若无法联通,需要检查环境的集群配置是否正常。

  1. 执行训练脚本后,一开始ray能联通,后续ray自行断联
    这种情况一般是备节点能够联通主节点,但主节点无法联通备节点。可以互换主备节点,使用1的方式进行测试。
  1. 评测报错ValueError: This model’s maximum context length is 0 tokens. However, your request has 195 input tokens. Please reduce the length of the input messages.
    benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_general.py脚本中的输入输出长度和服务端脚本max_model_len不对应,max_model_len = 输入+输出。
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐