腾讯云大模型训推平台TI-ONE TIONE x taco-agentic-rl 实践文档

taco-agentic-rl 是面向智能体强化学习(Agentic RL)场景的训练框架,与 TI-ONE 平台深度集成,为用户提供开箱即用的 Agentic RL 训练能力。这篇档涵盖产品入口、最佳实践操作指南,以及与行业主流框架 VERL 的对比分析。

相关产品
腾讯云大模型训推平台TI-ONE 产品页,含版本规格、价格与购买入口。

二、产品入口

·镜像中心 已上架平台预置镜像 taco-agentic-rl-v1.0.0,如下所示:

·任务式建模 和 开发机 模块可选中该预置镜像。

四、概述

本最佳实践以 Qwen2.5-7B-Instruct 模型为基础,演示如何在 TI-ONE 平台上使用 taco-agentic-rl 框架完成智能体强化学习训练的完整流程。整体流程如下:

操作步骤 说明
步骤1:准备环境 在 TI-ONE 平台启动开发机(HCCPNV6 × 8 卡),配置镜像、CFS 存储及网络端口,下载基座模型。
步骤2:启动 Agent 服务 根据业务场景选择 Agent 实现(如 zeroclaw),部署独立的 Agent 在线服务并完成配置对接。
步骤3:开发机启动训练 在开发机上依次启动 Redis 任务队列、LLM Proxy、训练脚本和 Agent Server 四个组件,协同完成 Agentic RL 训练循环。
步骤4:查看轨迹 使用 Perfetto UI 可视化查看训练过程中的 Agent 交互轨迹,辅助分析和调试。
步骤5:训练后推理 合并 FSDP 格式的 Checkpoint 为 HuggingFace 格式,使用 vLLM 部署训练后模型,通过 Agent 对话验证训练效果。

六、启动开发机

本次实践采用 HCCPNV6 × 8 卡,启动开发机作为训练平台。

·镜像选择:内置镜像-taco-agentic-rl-v1.0.0

·机器资源:8卡 / 256C 2000G

·CFS 资源:请把你的 CFS 挂载到 /home/tione/notebook

·添加端口:推荐使用 CLB,映射 8001 端口,避免服务重启导致 IP 变更需要重新配置。

注意:后续非特别标注,所有命令以及操作均在此开发机执行。

七、模型下载

·下载地址

·请把模型下载到 /home/tione/notebook/models/Qwen2.5-7B-Instruct,如果路径不一样后续需要修改配置文件以及训练脚本。

九、1. 创建在线服务

这部分为一个独立的在线服务,非“准备环境”步骤中启动的开发机。请新建一个在线服务,或者复用你已有的 zeroclaw 服务。

如果你选择新建在线服务,配置如下:

配置项 说明
镜像 ccr.ccs.tencentyun.com/ti-public/notebook-conda-gpu:zeroclaw-ti-dev20260603(可以直接填写该自定义镜像地址拉起 agent 服务)
端口 42617
CFS 挂载 将修改好的配置文件目录挂载到 /opt/ml/conf
启动命令 需要覆盖原有的启动命令(见下方)

十、2. 配置文件

配置文件为 config.toml,需要手动修改以下内容(如果你已有 zeroclaw 服务,则无需使用默认配置文件,直接修改下列内容即可):

# 根据你的配置修改配置文件下列内容 # 1. 调用地址:改为 taco-agentic-rl 开发机的 IP 地址default_provider = "custom:http://172.17.64.13:8001/v1" # 2. 模型名:改为你配置的模型default_model = "/home/tione/notebook/models/Qwen2.5-7B-Instruct"

十一、3. 启动命令

cp /opt/ml/conf/config.toml /zeroclaw-data/.zeroclaw/ && zeroclaw daemon

启动结果:

十二、4. 配对获取 Token

这部分可以用“服务调用” tab 的调用地址访问,也可以直接用在线服务对应的 pod ip + 端口访问。示例:

# IP 修改为你 zeroclaw 在线服务的 pod id# Pairing Code 可以从服务日志中看到curl -X POST http://172.17.x.x:42617/pair -H 'X-Pairing-Code: 045162'

调用结果如下:

Tips:上面的 Pairing Code 是一次性的,请及时保存你获取到的 token,同一个服务无法再次使用同一个 Pairing Code 获取新的 token。

十四、训练代码

此示例的代码路径位于镜像内:/workspace/youtu-agentic-rl/examples/zeroclaw,后续所有脚本均在此目录下执行。

.├── agent_client.py├── agent_handler.py # 包含 agent 调用及奖励函数实现├── agent_server.py├── checkpoint/ # ckpt 默认保存目录├── config.yaml # 配置文件├── run_proxy.sh # 启动 LLM Proxy 的脚本├── run_queue.sh # 启动 redis 任务队列的脚本├── run_server.sh # 启动 agent server 的脚本├── train.sh # 训练脚本└── wandb/

十五、训练过程

按以下顺序分别在新的 shell 中启动各组件:

1. 启动 Redis 任务队列

cd /workspace/youtu-agentic-rl/examples/zeroclawbash run_queue.sh

2. 启动 LLM Proxy

cd /workspace/youtu-agentic-rl/examples/zeroclawbash run_proxy.sh

3. 启动训练脚本

cd /workspace/youtu-agentic-rl/examples/zeroclaw# 配置环境变量export ZEROCLAW_GATEWAY_URL=http://172.17.X.X/ms-XXXexport ZEROCLAW_BEARER_TOKEN=zc_XXXbash train.sh

4. 启动 Agent Server

cd /workspace/youtu-agentic-rl/examples/zeroclawbash run_server.sh

十六、运行日志

·zeroclaw:

·proxy:

·训练进程:

·agent_server:

十七、步骤4:查看轨迹

使用 Perfetto UI 打开 trace.json 文件查看训练轨迹。

训练轨迹如下:

十八、生成轨迹文件

训练脚本 train.sh 默认会生成 trace.json,默认导出所有 batch 的轨迹。如果你需要手动 dump,请确保 Redis 服务存在,然后执行:

python -m tilearn.agentic_rl –config $CONFIG_PATH \\ trace dump \\ –batch 1 $total_training_steps \\ -o $default_local_dir/trace.json

20、1. 合并 Checkpoint 文件

训练后需要将 FSDP 格式的 ckpt 合并为 HuggingFace 格式才能使用 vLLM 等框架一键部署。在开发机执行:

cd /workspace/youtu-agentic-rl/examples/zeroclaw/checkpoint/youtu-agentic-rl/calc_x_claw_testpython -m verl.model_merger merge –backend fsdp \\ –local_dir global_step_10/actor/ –target_dir ./merged_model

21、2. 部署原版模型(对照组)

使用 vLLM 启动原版 Qwen2.5-7B-Instruct:

vllm serve /home/tione/notebook/models/Qwen2.5-7B-Instruct/ \\ –enable-auto-tool-choice –tool-call-parser hermes \\ –served-model-name models/Qwen2.5-7B-Instruct –port 8001

然后在 zeroclaw 服务中进入 CLI 模式交互:zeroclaw agent

对话效果如下:

22、3. 部署训练后模型

使用 vLLM 启动训练后的模型:

cd /workspace/…/calc_x_claw_testvllm serve ./merged_model/ \\ –enable-auto-tool-choice –tool-call-parser hermes \\ –served-model-name models/Qwen2.5-7B-Instruct –port 8001

对话效果如下:

23、已知问题

问题描述:异常退出后显存残留

处理方法:目前训练脚本 train.sh 异常退出后,可能存在显存残留,通过 nvidia-smi 命令可确认。遇到此问题时执行以下命令清理:

pkill -9 -f ray::WorkerDict

25、对比背景

以论文 ReTool: Reinforcement Learning for Strategic Tool Use in LLMs 作为示例 Agent 场景,对比 TACO 和 VERL 两个框架在 Agentic RL 场景下的适配改造成本。

26、VERL 的 Agent 接入方式

项目地址:verl/recipe/retool at release/v0.6.1 · verl-project/verl · GitHub

为了接入 retool,verl 除了 recipe/retool 下的代码外,还在框架内部实现了 tool_agent,用来给 retool 注册:

data = { "data_source": data_source.split("/")[1].lower(), # aime_2024, aime_2025 "prompt": [{"role": "user", "content": prompt}], "ability": "MATH", "reward_model": {"ground_truth": str(answer)}, "agent_name": "tool_agent", }

tool_agent 实现在 verl/experimental/tool_agent_loop.py 下:

@register("tool_agent")class ToolAgentLoop(AgentLoopBase): @classmethod def init_class(cls, config, tokenizer, processor, **kwargs): …

VERL 把"agent"做成了框架内部的一等公民——必须实现一个继承自 AgentLoopBase 的类,注册到 agent_loop 里,框架来调度这个类的 rollout / generate / call_tool 等方法。所以 VERL 的 retool 例子里需要:

·一个 ToolAgentLoop(AgentLoopBase) 类

·一组 OpenAIFunctionToolSchema 描述的工具(位于 tool_parser.py 中)

·agent_name="tool_agent" 在 dataset 里做路由

·tool_config_path 指定工具配置 YAML

ReTool 启动方式:

硬件 HCCPNV6 单机 8 卡
Docker 镜像 mirror.ccs.tencentyun.com/verlai/verl:app-verl0.5-vllm0.9.1-mcore0.12.2-te2.2
模型 Qwen2.5-7B-Instruct
数据集 DAPO-Math-17k、AIME_2024、AIME_2025
启动方式 bash retool/run_qwen2_7b_dapo.sh

27、TACO 的 Agent 接入方式

在 TACO 中,框架要求的“agent”只是一个签名为 (ctx, config) -> dict 的回调函数:

class Server: def __init__(self, …, process_task: Callable[[TaskContext], str] = None, …)

Server 启动 worker 进程后,每来一个任务就调一次这个函数(server.py:484):

result = await process_task(ctx, self.config)

qapython/agent_handler.py 里就是一个普通函数(没有任何继承):

async def process_task_async(ctx: TaskContext, config) -> Dict[str, Any]: # 1. 从 utu 加载现成的 agent agent_config = ConfigLoader.load_agent_config("examples/rl_train/qa_python_sandbox") qapython_agent = get_agent(config=agent_config) await qapython_agent.build() # 2. 跑多轮 result = await qapython_agent.run(input=prompt) # 3. 算 reward 返回 return {"answer": …, "reward": …, "metadata": …}

然后在 agent_server.py:41 把它注入框架:

server = Server(config=config, process_task=process_task_async)

没有一个新类被定义,agent 与框架完全解耦。

qapython 启动方式:

硬件 HCCPNV6 单机 8 卡
Docker 镜像 ccr.ccs.tencentyun.com/ti-platform/ytrl-env:v1
模型 7B-coldstart
数据集 DAPO-Math-17k、AIME_2024、AIME_2025
启动方式 run_queue.sh → run_proxy.sh → run_server.sh → train.sh

28、附录

参考资源

·ZeroClaw 文档

·ReTool 论文

·VERL ReTool 实现

赞 (0)
上一篇 4天前
下一篇 4天前