文档中心>TI-ONE 训练平台>实践教程>LLM 训练及评测>使用任务式建模进行 GRPO 强化学习训练

使用任务式建模进行 GRPO 强化学习训练

最近更新时间:2025-11-07 18:19:02

我的收藏

总览

本文以 qwen3-0.6b 为例,展示如何使用 TI-ONE 平台对大模型进行 GRPO 强化学习训练,并通过在线服务将训练得到的模型进行推理部署。这里我们使用到的训练框架为开源框架 veRL ,并对 qwen3-0.6b 进行 GRPO 强化学习训练任务,最后使用平台内置镜像 Angel-vLLM 对训练后的模型进行推理部署。

前置要求

申请 CFS 或者 GooseFSx:在自定义大模型精调过程中训练数据、模型、代码等使用到的存储可以为 CFS 或者 GooseFSx ,所以需要您首先申请 CFS 或者 GooseFSx,详情请查看 文件存储-创建文件系统及挂载点数据加速器 GooseFS

操作步骤

物料准备

说明:
目前 TI-ONE 平台不支持在控制台直接进行数据上传操作,为了解决此问题,需要创建一个运维开发机以挂载 CFS 或者 GooseFSx 并使用开发机服务进行上传或下载大模型、训练代码等文件。
单击训练工坊 > 开发机 > 新建按钮,创建调试训练代码用的开发机:

镜像:选择自定义镜像,输入镜像地址:ccr.ccs.tencentyun.com/ti-public/llm-train:app-verl0.5-transformers4.55.4-vllm0.10.0-mcore0.13.0-te2.2
机器来源:选择从 TIONE 平台购买。若您需要从 CVM 机器中选择,请参考 资源组简介 管理您的机器资源。
计费模式:选择按量计费或包年包月均可。平台支持的计费规则请您查看 计费概述
存储配置:选择 CFS 或 GooseFSx 文件系统,名称为上文前置要求中申请配置好的 CFS 或者 GooseFSx,源路径默认为根目录/,用于指定保存用户自定义大模型的位置。
其它设置:默认不需要填写。


模型文件

新建成功后,单击 开发机 > 打开 选择 VSCode 进入开发机,打开 terminal 终端进行操作,在挂载目录下通过脚本或者COS方式下载所需模型。

脚本下载
您可在 魔搭社区Hugging Face 检索需要用到的大模型,通过社区中的 Python 脚本自行下载模型并保存到 CFS 中。本文以 Qwen3-0.6B 模型为例,其下载代码如下:
modelscope download --model Qwen/Qwen3-0.6B --local_dir /home/tione/notebook/models/Qwen3-0.6B
COS 下载
您可以先将所需要的模型上传至腾讯云 COS,然后在开发机内使用 coscli 的方式再从 COS 下载到开发机。
您可以使用 控制台 来完成对您所需要的模型的上传与下载。在开发机上,您可以使用 coscli 完成模型下载。命令参考如下。
coscli sync -r cos://目录名 本地目录名

训练代码

训练框架:veRL
镜像已内置了 veRL 框架仓库,路径为 /workspace/verl,您也可以自行下载开源最新代码。

数据集

本文档中以 gsm8k 数据集为例展示对 qwen-0.6b 模型作强化学习任务的训练和部署推理。简单来说,需要先下载数据集,再用 veRL 的预处理代码进行预处理。
modelscope download --dataset AI-ModelScope/gsm8k --local_dir /home/tione/notebook/download/gsm8k
rm /home/tione/notebook/download/gsm8k/dataset_infos.json
python3 /workspace/verl/examples/data_preprocess/gsm8k.py --local_save_dir /home/tione/notebook/data/gsm8k --local_dataset_path /home/tione/notebook/download/gsm8k
其中,--local_save_dir 参数指向您想要将数据集下载到的地方。后续我们的训练与推理都将使用预处理后得到的数据集。
说明:
由于从 modelscope 下载的数据集目录格式与 huggingface 下载的有稍许区别,为了兼容 huggingface 的 datasets 库加载数据集逻辑,需要手动删除下载保存目录中的 dataset_infos.json 文件。如果直接从 huggingface 下载数据集,不需要上面的 rm 操作。

编写启动脚本

可以参考 veRL 提供的对 gsm8k 数据集的 训练脚本 建立您的训练脚本,以下为在 TI-ONE 运行的示例启动脚本,可以在开发机内创建一个启动脚本文件 /home/tione/notebook/start.sh
#!/bin/bash
set -e

### 训练资源参数
# 训练节点数(若使用任务式建模多机ray训练且head节点未分配GPU,请手动配置为实际分配了GPU的worker节点数)
NNODES="${WORLD_SIZE:-1}"
# 每节点GPU卡数(若使用任务式建模多机ray训练且head节点未分配GPU,请手动配置为实际worker每节点的GPU卡数)
GPU_PER_NODE="${GPU_NUM_PER_NODE:-$(nvidia-smi -L | wc -l)}"

### 路径参数
# 工作目录:该目录需要存在,里面不要包含太大的文件,例如数据集、模型、checkpoints等,否则会导致任务提交很慢或失败(也可以使用 runtime_env 的 excludes 排除掉任务提交不需要的文件)
WORKING_DIR=/home/tione/notebook/verl
# 数据集路径
TRAIN_FILES=/home/tione/notebook/data/gsm8k/train.parquet
VAL_FILES=/home/tione/notebook/data/gsm8k/test.parquet
# 预训练模型路径
MODEL_PATH=/home/tione/notebook/models/Qwen3-0.6B

### 保证日志输出无缓冲
export PYTHONUNBUFFERED=1

### 训练命令及参数
python3 -m verl.trainer.main_ppo \\
algorithm.adv_estimator=grpo \\
trainer.n_gpus_per_node=$GPU_PER_NODE \\
trainer.nnodes=$NNODES \\
data.train_files=$TRAIN_FILES \\
data.val_files=$VAL_FILES \\
data.train_batch_size=256 \\
data.max_prompt_length=512 \\
data.max_response_length=512 \\
data.filter_overlong_prompts=True \\
data.truncation='error' \\
actor_rollout_ref.model.path=$MODEL_PATH \\
actor_rollout_ref.actor.optim.lr=1e-6 \\
actor_rollout_ref.model.use_remove_padding=True \\
actor_rollout_ref.actor.ppo_mini_batch_size=128 \\
actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=40 \\
actor_rollout_ref.actor.use_kl_loss=True \\
actor_rollout_ref.actor.kl_loss_coef=0.001 \\
actor_rollout_ref.actor.kl_loss_type=low_var_kl \\
actor_rollout_ref.actor.entropy_coeff=0 \\
actor_rollout_ref.model.enable_gradient_checkpointing=True \\
actor_rollout_ref.actor.fsdp_config.param_offload=False \\
actor_rollout_ref.actor.fsdp_config.optimizer_offload=False \\
actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=40 \\
actor_rollout_ref.rollout.tensor_model_parallel_size=1 \\
actor_rollout_ref.rollout.name=vllm \\
actor_rollout_ref.rollout.gpu_memory_utilization=0.7 \\
actor_rollout_ref.rollout.n=5 \\
actor_rollout_ref.rollout.disable_log_stats=False \\
actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=40 \\
actor_rollout_ref.ref.fsdp_config.param_offload=True \\
algorithm.use_kl_in_reward=False \\
trainer.critic_warmup=0 \\
trainer.logger='["console","tensorboard"]' \\
trainer.default_local_dir=$WORKING_DIR/checkpoints \\
trainer.project_name='verl_grpo_example_gsm8k' \\
trainer.experiment_name='qwen3_0.6b_function_rm' \\
trainer.save_freq=40 \\
trainer.test_freq=20 \\
trainer.total_epochs=10

所有具体的参数您可以参考 这里,我们对其中您可能需要修改的参数做一些解释:
TRAIN_FILES:指定训练集使用的 parquet 文件。
VAL_FILES:指定验证集使用的 parquet 文件。
MODEL_PATH:要训练的模型路径。
WORKING_DIR:工作目录,训练产物默认都会在该目录下。
data.train_batch_size:训练批次大小。
trainer.save_freq:每多少个 iteration 会保存一次模型参数。模型参数为节省空间以模型并行的分片方式存储。
trainer.test_freq:每多少个 iteration 会进行一次测试,会使用一条数据进行结果验证。
trainer.total_epochs:训练轮数。
trainer.project_name / trainer.experiment_name:本次训练的项目和实验名称,训练产生的 tensorboard 日志会保存在 $WORKING_DIR/tensorboard_log/${trainer.project_name}/${trainer.experiment_name}目录下。
trainer.default_local_dir:训练产生的 checkpoint 保存路径。
其他参数如各个 batchsize、tensor_model_parallel_size、gpu_memory_utilization 等建议根据实际的模型尺寸及机器资源参考veRL官方文档及相关错误对应的 issue 来调整。

创建训练任务

单击 训练工坊 > 任务式建模 > 创建任务 按钮,训练镜像选择一开始准备的镜像,训练模式选择“Ray”,资源配置按需选择。如果需要多机分布式训练,可以选择8卡并配置节点数大于1。
训练镜像:选择自定义镜像,镜像地址:ccr.ccs.tencentyun.com/ti-public/llm-train:app-verl0.5-transformers4.55.4-vllm0.10.0-mcore0.13.0-te2.2
训练模式:veRL 已天然支持使用 Ray 进行分布式训练部署,这里我们可以直接在创建任务式建模任务时选择 Ray 的训练模式。
机器来源:请参考开发机部分。
算力规格:请合理选择训练资源,如果需要多机分布式训练,推荐 head 和 worker 均选择相同的 GPU 卡数(一般为 8 卡),总训练节点数为 head + worker 的节点数;也支持 head 配置为纯 cpu 节点,只有 worker 分配 gpu 参与训练(需要正确配置训练脚本的节点数和每节点显卡数)。
存储路径配置:挂载类型训练输出,和上面开发机配置相同的源路径及容器内路径。
启动命令:
bash /home/tione/notebook/start.sh # 更换为上述启动脚本所在路径,也可以直接把完整的启动脚本内容贴进来
框架高级参数 - RuntimeEnv 配置:
{
"working_dir": "<你的工作目录>",
"excludes": ["/.git/", "/checkpoints/"],
"env_vars": {
"TORCH_NCCL_AVOID_RECORD_STREAMS": "1",
"CUDA_DEVICE_MAX_CONNECTIONS": "1",
"VLLM_ALLREDUCE_USE_SYMM_MEM": "0",
"PYTHONUNBUFFERED": "1",
"NCCL_NVLS_ENABLE": "0"
}
}

查看训练状态

任务启动后,可以点击任务式建模任务名称进入日志页面查看训练日志信息。


获取训练输出结果

训练完成后您可以到训练任务所挂载的 CFS 文件系统上查看输出文件,您可以通过挂载一个开发机,将您在训练输出所在的路径挂载到该开发机中,然后在开发机中执行模型的评测及测试;后续您也可以通过平台 在线服务 模块将该模型所在的 CFS 路径挂载进来发布成在线服务。