基于verl框架和代码沙盒环境工具调用的代码强化学习实践
基于verl框架和代码沙盒环境工具调用的代码强化学习实践【免费下载链接】cann-recipes-train本项目针对LLM与多模态模型训练业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-train概述本项目基于 Qwen3-1.7B 模型采用 verl实现了高效且稳定的长上下文多轮工具调用 Code RL训练。我们的贡献主要有开发了一个可扩展的分布式代码执行沙盒 ScaleBox支持大规模多机部署、主流 RL 框架兼容训练及多种模型与基准的高效统一评估提供了融合 verl 与 ScaleBox 的统一部署镜像支持在单一节点中同时运行 ScaleBox 服务与 verl 训练任务同时支持零成本迁移至华为云平台 ModelArts在昇腾环境中验证了基于 verl 框架与 ScaleBox 沙盒的 Code RL 训练效果。组织Coding Toolcall的SFT数据以及SFT策略并在RL中引入Coding Agent多轮工具调用的训练首个开源的基于verl支持多轮工具调用的Coding Agent RL Recipe。提供将推测解码EAGLE3 与 Suffix集成至 verl vLLM-Ascend Rollout 流水线的补丁并实现无累计开销的逐步推测解码指标采集——包括草稿 Token 数、接受 Token 数、草稿接受率、平均接受长度及逐位置接受率。在昇腾 NPU 上验证了 EAGLE3 与 Suffix 推测解码在多轮工具调用 Code RL 训练中的效果端到端吞吐量最高提升38%训练步骤时间缩短25%且精度无损失。ScaleBox 是一个可扩展的分布式代码执行沙盒其核心特性包括可扩展的分布式代码沙盒体系支持多机分布式沙盒部署与请求负载均衡支持单元测试并行与实例级并行面向 Code RL 的统一训练接口和评估套件提供高效的批量评估接口common_evaluate_batch相较于run_code通过单次请求处理多个测试用例显著提升训练效率内置对 LiveCodeBench、HumanEval、MBPP 等主流代码评测基准的支持实现一键式快速评估灵活的 Special Judge 判题机制支持自定义判题逻辑能够灵活适应具有多种正确答案的复杂编程题目硬件要求Atlas A2/A3 系列产品单机八卡。软件要求基础配方和SD扩展共享相同的verl提交但vLLM版本不同。SD扩展使用的是vLLM0.13.0和 vLLM-Ascendv0.13.0版本这些版本相比0.11.0带来了更稳定的推测解码支持和异步实现。请注意以下软件版本反映了测试环境的情况——CANN8.3.RC1预计同样适用于SD扩展。组件基础样例推测解码扩展verlcommitc651b7b基于 v0.7.0.devcommitc651b7b基于 v0.7.0.devvllm0.11.00.13.0vllm-ascendv0.11.0rc1v0.13.0CANN8.3.RC18.5.0文件说明├── patches │ ├── verl # verl 补丁目录 │ │ ├── 0001-verl-feature-improve_rl_usability.patch # Code RL 通用可用性改进共享 │ │ ├── 0002-enable-tool-agent-loop.patch # 多轮工具调用支持共享 │ │ ├── 0003-toolcall-reward.patch # 工具调用奖励基础样例 │ │ └── 0004-enable-eagle-specrl-clean.patch # Suffix/EAGLE3 推测解码集成推测解码扩展 │ └── vllm │ └── 0001-enable-eagle-sprl.patch # vLLM 侧 EAGLE3 推测解码支持推测解码扩展 ├── figures │ ├── evaluation_progress.png # 训练 ckpts 的测试折线图基础样例 │ ├── training_progress.png # 训练指标进度折线图基础样例 │ ├── sd_nosd_accuracy.png # 精度对比推测解码 vs. 无推测解码推测解码扩展 │ ├── throughput_speedup.png # 吞吐量加速结果推测解码扩展 │ └── acceptance_rate_overall.png # RL 训练过程中草稿接受率变化推测解码扩展 ├── tool_config │ └── scalebox_tool_config.yaml # ScaleBox 工具调用配置文件共享 ├── build_dataset.py # RL 训练数据集构建脚本共享 ├── filter_sft_data.py # SFT 工具调用数据集构建脚本基础样例 ├── scalebox.py # verl 适配 ScaleBox 的自定义奖励函数共享 ├── download_eagle.py # EAGLE3 草稿模型下载脚本推测解码扩展 ├── run_code_rl_demo.sh # RL 训练脚本基础样例 ├── run_multi_turn_livecodebench_eval.sh # 多轮工具调用 LiveCodeBench 测试脚本基础样例 ├── run_toolcall_sft_demo.sh # 多轮工具调用 SFT 训练脚本基础样例 ├── eagle3_rl_run.sh # 含 EAGLE3 推测解码的 RL 训练脚本推测解码扩展 ├── suffix_rl_run.sh # 含 Suffix 推测解码的 RL 训练脚本推测解码扩展 ├── no_spec_rl_run.sh # 不含推测解码的 RL 训练脚本——基线推测解码扩展 ├── process_all_the_logs_sprl.py # 日志处理与指标分析脚本推测解码扩展 └── README.md # 说明文档第一部分基础样例——含工具调用奖励的多轮工具调用 Code RL环境准备构建 Docker 镜像构建支持 Code RL 的 verl 镜像verl.Dockerfile 与 verl_sandbox.Dockerfile 请参见agent_rl/qwen2_code_rl样例中的文件docker build --networkhost -f verl.Dockerfile -t verl:main-c651b7b-py311-cann8.3.RC1 .在 verl 镜像基础上构建支持 ScaleBox 的镜像实现 ScaleBox 和 verl 的融合部署。首先拉取 ScaleBox 代码git clone https://link.gitcode.com/i/7a2fe23514ba08a55d31ba36bb7273ca docker build --networkhost -f verl_sandbox.Dockerfile -t verl_sandbox:main-c651b7b-py311-cann8.3.RC1 .构建适配 ScaleBox 的 verl 框架拉取 verl 代码并切换到指定版本git clone https://github.com/volcengine/verl cd verl git checkout c651b7b4207e408875f132c4226969ef3495d408 cd ..应用指定 patch。为了更好地执行 Code RL 训练任务verl 框架需应用以下 patch主要包含以下修改在prime reward manager中增加对code_contests数据源的支持调整prime reward manager的并发进程数从 64 降至 32以避免沙盒资源竞争延长prime reward manager的任务超时时间从 300s 延长至 3000s以支持更大批量数据下的代码执行增强训练过程中的日志打印便于调试支持 Coding 多轮工具调用的训练逻辑增加 Toolcall reward增强训练稳定性。遵循下面的指令应用对应 patchgit apply patches/verl/0001-verl-feature-improve_rl_usability.patch git apply patches/verl/0002-enable-tool-agent-loop.patch git apply patches/verl/0003-toolcall-reward.patch部署 ScaleBox 服务启动 verl_sandbox 融合镜像docker run -it --privileged --namestart_verl_sandbox --user root --network host \ --shm-size 500g \ --device/dev/davinci0 \ --device/dev/davinci1 \ --device/dev/davinci2 \ --device/dev/davinci3 \ --device/dev/davinci4 \ --device/dev/davinci5 \ --device/dev/davinci6 \ --device/dev/davinci7 \ --device/dev/davinci_manager \ --device/dev/hisi_hdc \ --device /dev/devmm_svm \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/bin/hccn_tool:/usr/bin/hccn_tool \ -v /usr/local/sbin:/usr/local/sbin \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /etc/hccn.conf:/etc/hccn.conf \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ verl_sandbox:main-c651b7b-py311-cann8.3.RC1 /bin/bash激活 ScaleBox 服务必备环境source /home/ma-user/miniconda3/bin/activate sandbox-base部署 ScaleBox 服务。以下提供针对 Code RL 单节点训练的部署命令更多分布式部署功能见 ScaleBox 仓库export HOST0.0.0.0 # 服务器主机地址 export PORT8080 # 服务端口 export WORKERS32 # Uvicorn 服务并行 Worker 数量 export MAX_MEM50000000 # 单进程最大内存占用 cd ScaleBox make run-online deploy_${HOST}:${PORT}.log 21 验证服务是否成功部署curl http://localhost:8080/run_code \ -H Content-Type: application/json \ --data-raw {code: print(\Hello, world!\), language: python}预期返回{status:Success,message:,compile_result:null,run_result:{status:Finished,execution_time:0.02984905242919922,return_code:0,stdout:Hello, world!\n,stderr:}数据集准备SFT 工具调用数据构建基于 Gen-Verse/Open-AgentRL-SFT-3K 数据过滤出其中包含多轮 Python 工具调用的 Coding 推理数据并将其转换格式以符合后续 RL 训练python build_toolcall_sft_data.pyRL 数据构建基于 PrimeIntellect/verifiable-coding-problems 数据过滤其中较高质量的 Python 代码数据部分作为 RL 训练数据verifiable-coding-problems-python-onlypython build_rl_dataset.py工具调用微调准备模型权重hf download Qwen/Qwen3-1.7B --local-dir Qwen/Qwen3-1.7B工具调用的 SFT 脚本为run_toolcall_sft_demo.sh可依情况对应更改默认模型权重和数据等路径source /home/ma-user/miniconda3/bin/activate base mkdir -p log/sft_run_log bash run_toolcall_sft_demo.sh选用 sft_step_50 的 ckpt合并训练好的模型权重python3 -m verl.model_merger merge \ --backend fsdp \ --local_dir checkpoint/multiturn-toolcall-sft-qwen-3-1b/global_step_50 \ --target_dir checkpoint/multiturn-toolcall-sft-qwen-3-1b/global_step_50/huggingface强化学习训练强化学习的训练脚本为run_code_rl_demo.sh可依情况对应更改默认模型权重和数据等路径bash run_code_rl_demo.sh训练结果下图为训练中各个指标图一为模型在训练数据无重复数据上的得分图二为推理长度及截断比例图三为工具调用交互轮次。模型评测本实验基于 LiveCodeBench 数据集评测模型的代码生成能力推理参数遵循 DeepSeek-R1 相关实验设置。评测数据相关参数release_version: v5start_date: 2024-08-01code_execution: ScaleBox推理相关参数n: 4temperature: 0.6top_p: 0.95max_tokens: 32768StepsLiveCodeBench (Pass1)2016.034016.746018.088018.6310019.1912020.1414021.3416024.4518026.2020025.9722026.3624028.39第二部分推测解码扩展本节介绍如何在基础样例之上启用 Suffix 与 EAGLE3 推测解码。该扩展使用更新版本的 vLLM并在 Conda 环境下完成验证。注意本扩展直接使用 HuggingFace 上的公开 Qwen3-1.7B 模型权重无需基础样例中的 SFT 微调步骤。我们的分析表明Rollout 阶段占总 RL 训练步骤时间的78.3%Qwen3-1.7B 每步 3596.5s 中的 2816.6s。推测解码通过加速 vLLM Rollout 阶段的 Token 生成直接解决这一瓶颈目标是在不损失精度的前提下实现≥25% 的端到端训练加速。说明0001-verl-feature-improve_rl_usability.patch、0002-enable-tool-agent-loop.patch、build_dataset.py及scalebox.py均直接沿用自基础样例未作任何修改。本节其余文件为推测解码扩展新增内容。第一部分中的 SFT 微调与工具调用奖励步骤无需应用于推测解码扩展。推测解码扩展直接使用 HuggingFace 上的公开 Qwen3-1.7B 模型权重。环境准备1. 创建 Conda 环境conda create -n verl-specrl python3.11 -y conda activate verl-specrl source /path/to/CANN_8.5.0/ascend-toolkit/set_env.sh source /path/to/CANN_8.5.0/nnal/atb/set_env.sh2. 安装 vLLMgit clone --depth 1 --branch v0.13.0 https://github.com/vllm-project/vllm.git cd vllm VLLM_TARGET_DEVICEempty pip install -v -e . cd ..3. 安装 vLLM-Ascendgit clone --depth 1 --branch v0.13.0 https://github.com/vllm-project/vllm-ascend.git cd vllm-ascend pip install decorator python -m pip install -U pip setuptools wheel python -m pip install -U cmake ninja pybind11 python -m pip install -U setuptools-scm8 pip install --no-cache-dir torch2.8.0 torch-npu2.8.0 pip install torchvision0.23.0 --no-deps pip install -e . --no-build-isolation --no-deps # vllm-ascend commit id: 6281c1207a7a499e9f23a42b3a1e7027469f2b10 cd ..4. 安装 verlgit clone https://github.com/volcengine/verl cd verl git checkout c651b7b4207e408875f132c4226969ef3495d408 pip install -r requirements-npu.txt pip install click8.2.1 pip install githttps://github.com/ShaohonChen/PyExt.gitpy311support pip install -e . cd ..5. 应用补丁# verl 补丁——在 verl 目录下执行 git apply ../patches/verl/0001-verl-feature-improve_rl_usability.patch git apply ../patches/verl/0002-enable-tool-agent-loop.patch git apply ../patches/verl/0004-enable-specrl-clean.patch # vLLM 补丁——在 vllm 目录下执行 cd /path/to/vllm git apply /path/to/cann-recipes-train/agent_rl/qwen3_code_toolcall/patches/vllm/0001-enable-eagle-sprl.patch cd ..6. 修复依赖pip install numba pip uninstall triton-ascend triton -y pip install transformers4.57.6 pip install setuptools80.10.2 pip install decorator pip install arctic-inference0.1.1部署 ScaleBox 服务conda create -n scalebox python3.11 -y conda activate scalebox git clone https://github.com/icip-cas/ScaleBox.git cd ScaleBox pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliyun.com pip install -U pip setuptools wheel pip install -r requirements.txt pip install databases pip install aiosqliteexport HOST0.0.0.0 export PORT8080 export WORKERS32 export MAX_MEM50000000 cd ScaleBox make run-online deploy_${HOST}:${PORT}.log 21 验证服务是否成功部署curl http://localhost:8080/run_code \ -H Content-Type: application/json \ --data-raw {code: print(\Hello, world!\), language: python}预期返回{status:Success,message:,compile_result:null,run_result:{status:Finished,execution_time:0.02984905242919922,return_code:0,stdout:Hello, world!\n,stderr:}}数据集准备直接沿用基础样例——如第一部分所述运行python build_dataset.py。模型准备下载目标模型与 EAGLE3 草稿模型权重python download_eagle.py强化学习训练运行前请在对应脚本顶部设置以下路径。no_spec_rl_run.sh与suffix_rl_run.sh所需路径变量说明MODEL_PATHQwen3-1.7B 目标模型权重路径DATA_PATHRL 训练数据集路径通过build_dataset.py生成ASCEND_HOME_TOOLKITCANN 工具包安装路径如/path/to/CANN_8.5.0/eagle3_rl_run.sh所需路径变量说明MODEL_PATHQwen3-1.7B 目标模型权重路径DRAFT_MODEL_PATHEAGLE3 草稿模型权重路径通过download_eagle.py下载DATA_PATHRL 训练数据集路径通过build_dataset.py生成ASCEND_HOME_TOOLKITCANN 工具包安装路径如/path/to/CANN_8.5.0/运行不含推测解码的基线 RL 训练bash no_spec_rl_run.sh运行含 EAGLE3 推测解码的 RL 训练bash eagle3_rl_run.sh运行含 Suffix 推测解码的 RL 训练bash suffix_rl_run.sh训练日志处理训练完成后将实验相关的所有日志收集至同一文件夹然后执行python process_all_the_logs_sprl.py path/to/logs/ -o path/to/output/combined_metrics.csv对含推测解码与不含推测解码的两次训练分别执行上述命令以生成用于对比分析的 CSV 文件。训练结果与基线相比Suffix 与 EAGLE3 推测解码端到端吞吐量最高提升38%训练步骤时间缩短25%且精度无损失。由于 EAGLE3 草稿模型在 RL 训练期间保持冻结随着 Actor 策略逐渐偏离草稿模型的训练分布草稿接受率呈缓慢下降趋势推测解码未来工作Ngram推测解码修复修复了Ngram推测解码中的一个错误。块验证在推测解码的拒绝采样模块中启用块验证。在线草稿模型训练探索在 RL 训练过程中对 EAGLE3 草稿模型进行联合训练以缓解因策略漂移导致的接受率逐步下降问题。弹性推测解码探索在 RL 训练过程中自适应调整推测解码参数如推测 Token 数量。推测解码独立目录随着块验证、在线草稿模型训练、弹性推测解码、在线 MTP 等 SD 专属特性的逐步成熟我们将重新评估是否有必要为推测解码样例建立独立目录。【免费下载链接】cann-recipes-train本项目针对LLM与多模态模型训练业务中的典型模型、加速算法提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-train创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598300.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!