昇腾平台VeRL测试方法概述
作者:昇腾实战派
知识地图: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:单步总时长
精度
- 参考指标:
- critic/rewards/mean
类似LLM的loss,但是越高越好,一般要求训练过程中rewards是上升趋势
- 测试验收方式:
如果是有标杆的情况,需要使用训练后保存的权重进行评测,参考下面模型推理的精度测试方法
模型推理(评测)
服务端
使用模型训练的环境拉起服务端
# 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
按需下载aime、MATH等数据集,放到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
故障排查
执行训练脚本后,ray从一开始就连不通
确保各节点python版本、ray的版本一致,且各节点没有开启防火墙,确保ray通信不会被拦截。可以使用以下代码进行测试:
- 关闭防火墙
systemctl stop firewalld- 主节点
ray start --head --port 6366- 备节点
ray start --address='主节点ip:6366若无法联通,需要检查环境的集群配置是否正常。
- 执行训练脚本后,一开始ray能联通,后续ray自行断联
这种情况一般是备节点能够联通主节点,但主节点无法联通备节点。可以互换主备节点,使用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 = 输入+输出。
更多推荐

所有评论(0)