PAI-ChatLearn:Qwen3强化学习最佳实践

本文以Qwen3模型为例,基于PAI-ChatLearn训练框架,介绍如何在PAI中使用灵骏智算资源进行LLM高效分布式强化学习训练并部署训练后模型。

一、准备工作

1.1 开发环境准备

在开始执行操作前,请确认您已经完成以下工作:

  1. 开通PAI并创建默认工作空间

  2. 购买灵骏智算资源创建资源配额。本文示例必须使用灵骏资源。完成示例需2台机器,节点规格为ml.gx8xf.8xlarge-gu108。关于灵骏智算资源的节点规格详情,请参见AI计算资源计费说明

  3. 创建数据集,用于存储训练所需的文件和结果文件。

    • 存储类型:选择文件存储类的,本文使用文件存储(通用型NAS)。如没有NAS文件系统请参见创建文件系统

      说明

      如果您的训练任务对数据读取有很高的读写速度与性能要求,建议您使用文件存储(智算CPFS)

      image

    • 默认挂载路径:使用默认值/mnt/data/。

  4. 创建DSW实例,其中关键参数配置如下。

    • 资源配额:选择已创建的灵骏智算资源的资源配额。

    • 资源规格:配置以下资源规格。

      • GPU(卡数):至少为8。

      • CPU(核数):90。

      • 内存(GiB):1024。

      • 共享内存(GiB):1024。

    • 镜像:选择镜像地址,配置镜像为dsw-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-training-algorithm/chatlearn:torch2.5.1-vllm0.6.6-ubuntu22.04-cuda12.6-py310。需要根据当前region信息来更改镜像地址,比如,启动在上海的DSW实例,镜像中region信息更改为cn-shanghai

    • 数据集挂载:单击自定义数据集,选择已创建的数据集,并使用默认挂载路径。

  5. 如果使用RAM用户完成以下相关操作,需要为RAM用户授予DSW、DLCEAS的操作权限。具体操作,请参见云产品依赖与授权:DSW云产品依赖与授权:DLC云产品依赖与授权:EAS

1.2 下载代码库

  1. 进入PAI-DSW开发环境。

    1. 登录PAI控制台,在页面左上方选择地域,推荐华北6(乌兰察布)。

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。

    3. 在左侧导航栏,选择模型开发与训练 > 交互式建模(DSW),单击目标实例操作列下的打开

  2. 在顶部菜单栏单击Terminal,在该页签中单击创建terminal

  3. 下载ChatLearn代码库。

    git clone https://github.com/alibaba/ChatLearn.git && cd ChatLearn && git checkout 4ad5912306df5d4a814dc2dd5567fcb26f5d473b

1.3 准备Qwen3模型

modelscope下载Qwen3模型权重。

modelscope download --model Qwen/Qwen3-8B --local_dir Qwen3-8B

1.4 准备训练数据集

本案例以MATH-lighteval数据集为例,介绍ChatLearn强化学习流程。

  • 该数据集是一个数学推理任务数据集,使用固定规则来验证reward打分。

  • 如果需要在自定义任务上进行强化学习训练,可参考chatlearn代码库中examples/fsdp/models/rule_reward.py实现自定义reward打分函数。

# 下载数据集
mkdir -p dataset
modelscope download --dataset AI-ModelScope/MATH-lighteval --local_dir dataset/MATH-lighteval
# 数据集预处理
python examples/fsdp/data/data_preprocess/math_lighteval.py --input_dir dataset/MATH-lighteval --local_dir dataset/MATH-lighteval

二、强化学习训练

说明

建议您先在DSW环境中开发调试完成后,再在DLC环境中提交多机多卡分布式训练任务。

本示例使用FSDP作为训练引擎,若需要使用megatron加速训练可参考tutorial_grpo_mcore

2.1 DSW单机训练

直接在DSW环境中继续执行如下命令开始训练。训练后的模型将存储到挂载的数据集中,用于后续部署。

bash examples/fsdp/scripts/train_grpo_qwen3.sh
说明

使用train_grpo_qwen3.sh默认参数,预计训练耗时2~3小时。

2.2 DLC多机训练

在单机开发调试完成后,您可以在DLC环境中配置多机多卡的分布式任务,加快模型的训练速度。具体操作步骤如下:

  1. 进入新建任务页面。

    1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入DLC

    2. 在分布式训练(DLC)页面,单击新建任务

  2. 新建任务页面,配置以下关键参数,其他参数取默认配置即可。更多详细内容,请参见创建训练任务

    参数

    描述

    基本信息

    任务名称

    自定义任务名称。本方案配置为:test_qwen3_dlc。

    环境信息

    节点镜像

    选中镜像地址并在文本框中输入:dsw-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-training-algorithm/chatlearn:torch2.5.1-vllm0.6.6-ubuntu22.04-cuda12.6-py310,需要根据当前region信息来更改镜像地址。

    数据集

    单击自定义数据集,并配置以下参数:

    • 自定义数据集:选择已创建的NAS类型数据集,

    • 挂载路径:配置为/mnt/data/

    启动命令

    配置以下命令,其中train_grpo_qwen3.sh脚本输入的启动参数与DSW单机预训练模型一致。

    cd /mnt/data/ChatLearn && bash examples/fsdp/scripts/train_grpo_qwen3.sh

    资源信息

    资源类型

    选择灵骏智算

    资源来源

    选择资源配额

    资源配额

    本方案选择已创建的灵骏智算资源的资源配额。

    框架

    选择PyTorch

    任务资源

    Worker节点配置页签配置以下参数:

    • 节点数量:2,如果需要多机训练,配置节点数量为需要的机器数即可。

    • GPU(卡数):8

    • CPU(核数):90

    • 内存(GiB):1024

    • 共享内存(GiB):1024

  3. 单击提交,页面自动跳转到分布式训练(DLC)页面。您可以单击任务名称,在任务详情页面查看任务执行状态。当状态变为已成功时,表明训练任务执行成功。

    说明

    当前DLC任务出现ray.exceptions.RpcError: Timed out while waiting for GCS to become available.时并显示失败时,实际训练任务已经完成,可以直接使用保存模型部署服务。

2.3 主要参数说明

单击查看train_grpo_qwen3.sh中需要配置的主要参数

参数

描述

model_path

模型权重路径

output_dir

输出路径,用于保存日志、模型、数据信息

train_data_path

训练数据集路径

eval_data_path

评测数据集路径

sp_size

ulysses 序列并行配置,用于长思考模型训练

tensor_model_parallel_size

vLLM推理服务,张量切分配置

gpu_memory_utilization

vLLM推理服务预分配的显存占比

seq_length

最大序列长度(prompt长度+生成长度)

max_new_tokens

最大生成长度

num_inference_per_prompt

每个prompt生成的response数量

sample_per_episode

每轮迭代中训练的样本条数=prompt数量 * num_inference_per_prompt

train_micro_batch_size

训练过程中前向推理的batch size

enable_eval_before_training

是否在训练前进行评测

num_episode

强化学习训练轮数

eval_episode_interval

评测轮数间隔

save_episode_interval

模型保存轮数间隔

三、部署及调用模型

完成模型训练后,您可以直接将模型部署为在线服务,并在实际的生产环境中调用。

3.1 部署模型服务

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 单击部署服务,然后在自定义模型部署区域,单击自定义部署

  3. 自定义部署页面配置以下关键参数,其他参数取默认配置即可。

    参数

    描述

    基本信息

    服务名称

    自定义模型服务名称,同地域内唯一。本方案配置为:test_qwen3。

    环境信息

    部署方式

    本方案选择镜像部署

    镜像配置

    选择镜像地址,在本文框中配置镜像地址eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/vllm:v0.8.5.post1,需要根据当前region信息来更改镜像地址。

    模型配置

    选择通用型NAS,并配置以下参数:

    • 选择文件系统:选择创建数据集使用的NAS文件系统。

    • 文件系统挂载点:选择创建数据集使用的挂载点。

    • 文件系统路径:配置为存放在NAS中的Huggingface格式模型的路径。本方案配置为/ChatLearn/output/qwen3-grpo/save_model/policy_trainer/20/huggingface/

    • 挂载路径:指定挂载后的路径,本方案配置为:/qwen3_rlhf

    运行命令

    配置为vllm serve /qwen3_rlhf --host 0.0.0.0 --port 8000 --max-model-len 8192

    说明

    如您使用V100部署,运行命令配置为vllm serve /qwen3_rlhf --host 0.0.0.0 --port 8000 --max-model-len 8192 --dtype=half

    端口号

    配置为:8000。

    资源部署

    资源类型

    本方案选择公共资源

    实例数

    根据模型和选择的资源情况进行配置。以8b模型为例,实例数配置为1。

    部署资源

    资源规格选择A10V100,本方案配置为ecs.gn7i-c32g1.8xlarge

    专有网络

    专有网络(VPC)

    配置好NAS挂载点后,系统自动匹配与预设的NAS文件系统一致的VPC、交换机,根据需求设置安全组。

    交换机

    安全组名称

  4. 单击部署。服务部署时间约为6分钟,当服务状态变为运行中时,表明服务部署成功。

3.2 调用服务

  1. 获取服务访问地址和Token。在推理服务页签,找到目标服务,单击调用信息

    image

  2. 使用如下代码调用服务。其中,<YOUR EAS URL>替换为步骤1中的调用地址;Token建议设置为环境变量。

    import os
    from openai import OpenAI
    
    # 建议将Token设置为环境变量
    openai_api_key =os.environ.get("Token")
    # <YOUR EAS URL>替换为服务的访问地址。
    openai_api_base = "<YOUR EAS URL>/v1"
    
    client = OpenAI(
        api_key=openai_api_key,
        base_url=openai_api_base,
    )
    
    chat_response = client.chat.completions.create(
        model="/qwen3_rlhf",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Find the smallest positive integer solution to $\\tan{19x^{\\circ}}=\\dfrac{\\cos{96^{\\circ}}+\\sin{96^{\\circ}}}{\\cos{96^{\\circ}}-\\sin{96^{\\circ}}}$. Let's think step by step and output the final answer within \\boxed{}."},
        ],
        temperature=0.7,
        top_p=0.8,
        presence_penalty=1.5,
        extra_body={
            "top_k": 20, 
            "chat_template_kwargs": {"enable_thinking": False},
        }
    )
    print("Chat response:", chat_response)

附录:训练部署所需资源规格参考

不同的模型参数量支持的资源规格列表如下:

模型参数量

全参数训练资源(最低)

推理资源(最低)

数量

规格

Qwen3-8B

1

ml.gu7xf.c96m1600.8-gu108

ml.gu7ef.c96m1600.8-gu100

ml.gx8xf.8xlarge-gu108

1*V100(32 GB显存) / 1*A10(22 GB显存)

Qwen3-32B

2

4*V100(32 GB显存)/ 4*A10(22 GB显存)

Qwen3-30B-A3B

2

4*V100(32 GB显存)/ 4*A10(22 GB显存)