verl-async-dapo
Verl 单异步 DAPO 训练
交互式启动流程
启动训练服务前,Agent 必须按以下顺序询问用户:
1. 容器选择
检测到以下容器:
[1] jins ( 运行中)
[2] 创建新容器
请选择容器 (1/2):
2. 代理配置(如创建新容器或网络问题)
请提供代理配置(如不需要请回复"无"):
http_proxy: ?
https_proxy: ?
3. 特性选择
是否有自定义特性需求?(回复"默认"使用默认配置)
性能特性(默认全开):
- flash_attn: Flash Attention 加速
- dynamic_batch: 动态 Batch Size
- remove_padding: Remove Padding 优化
- gradient_checkpointing: 梯度检查点
显存特性(默认关闭,OOM 时自动开启):
- offload: 参数/优化器卸载
- recompute: 重计算
可选特性:
- prefix_cache: Prefix Cache
- chunked_prefill: Chunked Prefill
4. SwanLab 配置(如未配置)
SwanLab 监控配置:
Host: ?
API Key: ?
快速开始
# 方式 1: 快速启动脚本 (推荐)
CONTAINER=jins TRAIN_STEPS=100 \
SWANLAB_HOST=http://10.143.2.129:8000 \
SWANLAB_API_KEY=your-key \
bash scripts/quick_start.sh
# 方式 2: 分步执行
# 2.1 训练前检查
bash scripts/preflight_check.sh
# 2.2 启动单异步 DAPO 训练 (使用默认特性进行训练)
export TRAIN_STEPS=4
bash scripts/run_dapo.sh
# 2.3 启动 One-Step-Off-Policy 训练
export TRAIN_STEPS=4
bash scripts/run_one_step_off_policy.sh
One-Step-Off-Policy 训练
One-Step-Off-Policy 是资源隔离的单异步训练模式,Trainer 和 Rollout 使用独立的 GPU 组。
# 基本用法
export TRAIN_STEPS=100
export TRAINER_GPUS=4
export ROLLOUT_GPUS=4
bash scripts/run_one_step_off_policy.sh
# 启用 offload 特性
export ENABLE_OFFLOAD=True
bash scripts/run_one_step_off_policy.sh
# FSDP2 框架
export FRAMEWORK=fsdp
bash scripts/run_one_step_off_policy.sh
配置参数:
| 变量 | 默认值 | 说明 |
|---|---|---|
FRAMEWORK |
megatron |
框架 (megatron/fsdp) |
TRAINER_GPUS |
4 | 训练 GPU 数 |
ROLLOUT_GPUS |
4 | Rollout GPU 数 |
MAX_RESPONSE_LENGTH |
8192 | 最大响应长度 |
ENABLE_OFFLOAD |
False | 是否启用 offload |
SwanLab 配置
SwanLab 配置由 swanlab-setup skill 提供,common.sh 启动时自动加载。详见 swanlab-setup skill 的 SKILL.md。
配置按优先级自动获取:环境变量 > 配置文件 > 交互式输入
# 环境变量(推荐)
export SWANLAB_HOST="http://your-swanlab-host:8000"
export SWANLAB_API_KEY="your-api-key"
重要:必须在 trainer.logger 参数中包含 "swanlab" 才能启用监控:
# 正确的 logger 配置(启用 SwanLab 监控)
trainer.logger='["console", "swanlab"]'
# 仅控制台输出(不启用监控)
trainer.logger='["console"]'
SwanLab 环境变量会自动被 verl tracking 模块读取:
SWANLAB_API_KEY: API 密钥SWANLAB_LOG_DIR: 日志目录 (默认: swanlog)SWANLAB_MODE: 模式 (cloud/local, 默认: cloud)
代理配置
export http_proxy="http://your-proxy:8080"
export https_proxy="http://your-proxy:8080"
训练监控策略
启动后行为:
- 输出 SwanLab 链接供用户自行查看
- 后台静默运行,不实时推送进度
- 仅在错误时通知用户(OOM、崩溃、配置错误等)
用户自行监控命令:
# 查看当前进度
docker exec {container} grep "Training Progress" /verl/train.log | tail -1
# 实时跟踪日志
docker exec {container} tail -f /verl/train.log
# 检查是否出错
docker exec {container} grep -E "Error|error|OOM|Exception" /verl/train.log | tail -10
特性管理策略
特性分类
| 类型 | 特性 | 默认状态 | 说明 |
|---|---|---|---|
| 性能特性 | flash_attn |
✅ 默认开 | Flash Attention 加速 |
| 性能特性 | dynamic_batch |
✅ 默认开 | 动态 Batch Size |
| 性能特性 | remove_padding |
✅ 默认开 | Remove Padding 优化 |
| 性能特性 | gradient_checkpointing |
✅ 默认开 | 梯度检查点 |
| 显存特性 | offload |
❌ 默认关 | 参数/优化器卸载 (OOM 时自动追加) |
| 显存特性 | recompute |
❌ 默认关 | 重计算 (OOM 时自动追加) |
| 可选特性 | prefix_cache |
❌ 默认关 | Prefix Cache |
| 可选特性 | chunked_prefill |
❌ 默认关 | Chunked Prefill |
特性优先级
用户显式指定 > 默认性能特性 > OOM 自动追加显存特性
重要:
- 用户未指定时 → 使用默认性能特性(全开)
- OOM 时 → 自动追加显存特性(即使用户指定了其他特性)
- 用户显式指定的特性永不移除,只在 OOM 时追加
OOM 自动恢复流程
启动训练 (默认性能特性)
↓
OOM 错误?
├─ 是 → 追加 offload → 重试
│ └─ 仍 OOM → 追加 recompute → 重试
│ └─ 仍 OOM → 报告失败,建议调整参数
└─ 否 → 训练成功(静默完成)
配置参数
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
FRAMEWORK |
megatron |
框架 (megatron/fsdp) |
MODEL_PATH |
Qwen3-8B | 模型路径 |
TRAIN_FILE |
dapo-math-17k.parquet | 训练数据 |
VAL_FILE |
aime-2024.parquet | 验证数据 |
TRAIN_STEPS |
100 | 训练步数 |
TRAINER_GPUS |
4 | 训练 GPU 数 |
ROLLOUT_GPUS |
4 | Rollout GPU 数 |
USER_FEATURES |
(空) | 用户显式指定特性,逗号分隔 |
MAX_OOM_RETRIES |
2 | OOM 最大重试次数 |
SWANLAB_HOST |
(从配置获取) | SwanLab 服务器地址 |
SWANLAB_API_KEY |
(从配置获取) | SwanLab API 密钥 |
详细参考
- 完整工作流程: See references/workflow.md
- 参数详解: See references/params.md
- 故障排查: See references/troubleshooting.md
More from ascend/agent-skills
ascendc-operator-dev
AscendC算子端到端开发编排器。当用户需要开发新算子、实现自定义算子、或完成从需求到测试的完整流程时使用。关键词:算子开发、operator development、端到端、完整流程、工作流编排、新建算子。
56ascendc-operator-doc-gen
为AscendC算子生成PyTorch风格的接口文档(README.md)。触发场景:编译调试通过后需要生成接口文档,或用户提到"生成算子文档"、"创建README"、"文档化算子"、"帮我写文档"(算子上下文)、"算子文档"时使用。
55ascendc-operator-design
完成AscendC算子设计 - 帮助用户完成算子的架构设计、接口定义和性能规划。当用户提到算子设计、算子开发、tiling策略、内存规划、AscendC kernel设计、两级tiling、核间切分、核内切分时,使用此skill。
55ascendc-operator-precision-eval
AscendC算子精度评估。对已编译安装的算子生成全面的精度测试用例集(≥30例),运行并生成精度验证报告。关键词:精度测试、precision evaluation、精度报告、accuracy、误差分析。执行完成后 MUST 在当前对话中展示总览、失败摘要与关键发现,不得仅附报告路径。
54ascendc-operator-testcase-gen
完成AscendC算子验证用例生成 - 帮助用户完成testcase设计。当用户提到用例设计、泛化用例生成、算子标杆、UT用例、精度用例、性能用例时,使用此skill。
54ascendc-operator-project-init
初始化 AscendC 算子工程并创建可编译的算子骨架。触发场景:(1) 用户要求创建新算子;(2) 关键词:ascendc算子、新建算子、算子目录、算子初始化;(3) 需要基于 ascend-kernel 模板快速落地。本 skill 不只建目录,还输出“可继续开发”的标准文件与检查清单。
54