当前位置: 首页 > news >正文

CANN/cann-recipes-train:基于verl框架和代码沙盒环境的代码强化学习实践

基于verl框架和代码沙盒环境的代码强化学习实践

【免费下载链接】cann-recipes-train本项目针对LLM与多模态模型训练业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-train

概述

本项目基于 1.5B 深思考模型,采用 verl,实现了高效且稳定的长上下文 Code RL训练。我们的贡献主要有:

  1. 开发了一个可扩展的分布式代码执行沙盒 ScaleBox,支持大规模多机部署、主流 RL 框架兼容训练及多种模型与基准的高效统一评估;
  2. 提供了融合 verl 与 ScaleBox 的统一部署镜像,支持在单一节点中同时运行 ScaleBox 服务与 verl 训练任务,同时支持零成本迁移至华为云平台 ModelArts;
  3. 在昇腾环境中验证了基于 verl 框架与 ScaleBox 沙盒的 Code RL 训练效果。

ScaleBox 是一个可扩展的分布式代码执行沙盒,其核心特性包括:

  1. 可扩展的分布式代码沙盒体系

    • 支持多机分布式沙盒部署与请求负载均衡
    • 支持单元测试并行与实例级并行
  2. 面向 Code RL 的统一训练接口和评估套件

    • 提供高效的批量评估接口common_evaluate_batch,相较于run_code,通过单次请求处理多个测试用例,显著提升训练效率
    • 内置对 LiveCodeBench、HumanEval、MBPP 等主流代码评测基准的支持,实现一键式快速评估
  3. 灵活的 Special Judge 判题机制

    • 支持自定义判题逻辑,能够灵活适应具有多种正确答案的复杂编程题目

下面提供了相关模型的训练参数和性能测试结果(详细的评测细节见 模型评测 章节):

| Model | Machine | GBS | n_samples | training_step | max_prompt_length | max_response_length | LiveCodeBench (pass@1) | |-|-|-|-|-|-|-|-| | DeepSeek-R1-Distill-Qwen-1.5B | Atlas A2 8卡 | 128 | 8 | 500 | 2048 | 8192 | 19.80 | | Qwen3-4B-Instruct-2507 | Atlas A3 16卡 | 128 | 8 | 450 | 2048 | 8192 | 44.18 | | Qwen3-30B-A3B-Instruct-2507 | Atlas A3 32卡 | 128 | 8 | 450 | 2048 | 8192 | 56.27 |

硬件要求

Atlas A2/A3 系列产品,单机八卡

软件要求

  • verl: commit c651b7b4207e408875f132c4226969ef3495d408 (based on v0.7.0.dev)
  • vllm==0.11.0
  • vllm_ascend==v0.11.0rc1

文件说明

├── patches │ └── verl # 修改补丁总目录 │ └── 0001-verl-feature-improve_rl_usability.patch # verl支持Code RL的补充性修改 ├── figures # 图表目录 │ ├── reward.png # 训练奖励值折线图 │ └── training_progress.png # 训练进度折线图 ├── verl.Dockerfile # 环境部署文件 ├── verl_sandbox.Dockerfile # 环境部署文件 ├── build_dataset.py # 示例训练数据集构建脚本 ├── scalebox.py # verl适配ScaleBox的自定义奖励函数文件 ├── run_code_rl_qwen2_5_1_5b.sh # Qwen2.5示例训练脚本 ├── run_code_rl_qwen3_4b.sh # Qwen3示例训练脚本 ├── run_code_rl_qwen3_30b.sh # Qwen3示例训练脚本 └── README.md # 说明文档

环境准备

构建 Docker 镜像

  1. 构建支持 Code RL 的 verl 镜像
docker build --network=host -f verl.Dockerfile -t verl:main-c651b7b-py311-cann8.3.RC1 .
  1. 在 verl 镜像基础上,构建支持 ScaleBox 的镜像,实现 ScaleBox 和 verl 的融合部署

首先拉取 ScaleBox 代码,以获得配置环境需要的脚本和数据:

git clone https://link.gitcode.com/i/956cbc85858f3e30456ef77668a56f0c

然后在 ScaleBox 项目下,执行:

docker build --network=host -f verl_sandbox.Dockerfile -t verl_sandbox:main-c651b7b-py311-cann8.3.RC1 .

构建适配 ScaleBox 的 verl 框架

  1. 拉取 verl 代码并切换到指定版本
git clone https://github.com/volcengine/verl cd verl git checkout c651b7b4207e408875f132c4226969ef3495d408 cd ..
  1. 应用指定 patch

为了更好地执行 Code RL 训练任务,verl 框架需应用以下 patch。该 patch 主要包含以下修改:

  • prime reward manager中,增加对code_contests数据源的支持;
  • 调整prime reward manager的并发进程数,从 64 降至 32,以避免沙盒资源竞争;
  • 延长prime reward manager的任务超时时间,从 300s 延长至 3000s,以支持更大批量数据下的代码执行;
  • 增强训练过程中的日志打印,便于调试。

遵循下面的指令应用对应 patch:

git apply patches/verl/0001-verl-feature-improve_rl_usability.patch

部署 ScaleBox 服务

  1. 启动 verl_sandbox 融合镜像
docker run -it --privileged --name=start_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
  1. 激活 ScaleBox 服务必备环境
source /home/ma-user/miniconda3/bin/activate sandbox-base
  1. 部署 ScaleBox 服务

以下提供针对 Code RL 单节点训练的部署命令,更多分布式部署功能见 ScaleBox 仓库

export HOST=0.0.0.0 # 服务器主机地址 export PORT=8080 # 服务端口 export WORKERS=32 # Uvicorn 服务并行 Worker 数量 export MAX_MEM=unlimited # 单进程最大内存占用 cd ScaleBox make run-online > deploy_${HOST}:${PORT}.log 2>&1 &

执行上述命令后,服务成功部署至http://0.0.0.0:8080。基于下面的命令可验证服务是否部署成功:

curl 'http://0.0.0.0: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":""}

数据集准备

基于 PrimeIntellect/verifiable-coding-problems 数据,过滤其中较高质量的 Python 代码数据部分,作为训练数据(verifiable-coding-problems-python-only)。具体数据处理脚本为:

python build_dataset.py

强化学习训练

示例脚本run_code_rl_qwen2_5_1_5b.sh中涉及:

  • 模型:DeepSeek-R1-Distill-Qwen-1.5B
  • 数据:verifiable-coding-problems-python-only
  • 最大输出长度:8k

根据需求配置脚本对应参数,运行下述指令即可启动训练:

source /home/ma-user/miniconda3/bin/activate base # 激活训练环境 bash run_code_rl_qwen2_5_1_5b.sh

模型评测

本实验基于 LiveCodeBench 数据集评测模型的代码生成能力,推理参数遵循 DeepSeek-R1 相关实验设置。

实验设置

LiveCodeBench 评测数据相关参数:

  • release_version: v5
  • start_date: 2024-08-01
  • code_execution: ScaleBox

推理相关参数:

  • n: 4
  • temperature: 0.6
  • top_p: 0.95
  • max_tokens: 32768

实验结果

以下是本项目的实验结果,包括训练过程中的奖励变化和在 LiveCodeBench 评测集上的性能提升情况。

DeepSeek-R1-Distill-Qwen-1.5B

具体性能结果:

StepsLiveCodeBench (Pass@1)
015.41
5015.77
10015.95
15016.67
20016.31
25016.49
30017.83
35018.91
40018.37
45018.46
50019.80
Qwen3-4B-Instruct-2507

具体性能结果:

StepsLiveCodeBench (Pass@1)
033.60
5034.86
10037.63
15038.26
20038.71
25039.96
30040.23
35041.67
40040.50
45044.18
Qwen3-30B-A3B-Instruct-2507

具体性能结果:

StepsLiveCodeBench (Pass@1)
046.59
5047.85
10050.45
15051.34
20051.88
25051.52
30054.12
35053.94
40054.21
45056.27

【免费下载链接】cann-recipes-train本项目针对LLM与多模态模型训练业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-train

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/788398/

相关文章:

  • 声明式CLI交互工具cli-jaw:构建优雅命令行界面的新范式
  • 【毕业设计项目】大数据文献综述管理系统:Hadoop/Spark 选题库、参考文献、LaTeX 提交与评分统计
  • 3个实战场景:用Windows Cleaner专业解决Windows系统空间管理难题
  • LlamaPen:基于Web的Ollama图形化界面,实现本地大模型高效交互
  • Parsec VDD虚拟显示器深度解析:从架构设计到性能调优的完整指南
  • QMCDecode:3步解锁QQ音乐加密格式,让音乐文件重获自由
  • 为OpenClaw AI工作流注入安全审计能力:trust-openclaw实战指南
  • 基于FPGA硬件加速的ANN体温检测系统:从算法到芯片的完整实现
  • 3步解锁Zotero插件市场:一站式插件管理终极指南
  • OBS多路推流插件:一键同步多平台直播的专业解决方案
  • 3步解决百度网盘限速难题:baidu-wangpan-parse工具实战指南
  • Dell G15终极散热控制指南:3分钟掌握开源神器TCC完整教程
  • GTA5线上小助手:完全免费的洛圣都游戏体验增强工具完整指南
  • 开源技能网关Skills Gateway:微服务架构下的团队技能管理与评估平台实践
  • Webpack插件实现浏览器日志实时转发至终端,提升前端调试效率
  • 查看用量分析报告优化个人开发者的月度大模型预算
  • 微信网页版无法访问?开源插件wechat-need-web帮你轻松解决
  • 像素-空间精准映射,重构真孪生底层架构——全栈自研技术赋能,打造实景孪生标杆方案
  • 如何通过GTA5OnlineTools提升GTA5线上模式开发效率与游戏体验
  • 终极指南:如何绕过百度网盘限速,实现2MB/s高速下载 [特殊字符]
  • 告别插件管理烦恼:Zotero插件市场让你的学术研究效率提升300%
  • 如何告别黄牛票:大麦网Python自动化抢票脚本完整指南
  • Cursor AI 编辑器规则集实战:提升代码规范与团队协作效率
  • 状态图与状态转换图
  • ARM汇编重定位与栈对齐机制详解
  • ARM架构GCSPR_EL2寄存器与栈保护机制解析
  • 2026年螺蛳粉加盟店费用分析,哪家性价比高? - mypinpai
  • Tower Island:macOS动态岛式AI编程助手统一控制中心
  • 3步安装Page Assist:让你在浏览器中随时与本地AI对话
  • Spring AI Agent Client:将AI自治智能体集成到Spring Boot应用