Nemo Skills实战案例:复现Nemotron-Math-v2训练流程
Nemo Skills实战案例:复现Nemotron-Math-v2训练流程
【免费下载链接】SkillsA project to improve skills of large language models项目地址: https://gitcode.com/gh_mirrors/ne/Skills
Nemo Skills是一个功能强大的开源框架,专门用于提升大语言模型(LLM)的各项技能。本文将详细介绍如何使用Nemo Skills完整复现Nemotron-Math-v2数学模型的训练流程,从数据集构建到模型训练的全过程。无论你是AI研究人员还是开发者,通过这篇终极指南都能快速掌握大规模数学模型训练的核心技术。
项目概述:Nemo Skills框架介绍 🚀
Nemo Skills是NVIDIA开发的一个综合性LLM开发框架,支持从数据生成、模型训练到评估的全流程开发。该项目旨在帮助开发者快速构建和优化大语言模型的各项技能,特别是在数学推理、代码生成和科学知识等领域。
核心功能亮点:
- 🔧灵活的LLM推理:支持API提供商、本地服务器和大规模Slurm集群的无缝切换
- 📊全面的模型评估:覆盖数学推理、代码生成、科学知识等多个领域的基准测试
- 🎯高效的模型训练:支持NeMo-RL和verl等先进训练框架
- 📈可扩展的数据生成:支持从单GPU到数万GPU的大规模并行处理
Nemotron-Math-v2数据集构建流程 📚
Nemotron-Math-v2数据集包含35万个独特的数学问题,来源于AoPS论坛、Math Stack Exchange和MathOverflow。数据集构建过程分为以下几个关键步骤:
数据收集与预处理
首先从数学论坛收集原始数据,然后使用Qwen2.5-32B-Instruct模型进行问题提取,从论坛讨论中分离出明确的数学问题陈述。每个提取的问题都会经过一系列LLM分类器筛选,移除证明式问题、选择题和无效问题。
解决方案生成
使用gpt-oss-120b模型生成三种难度级别(高、中、低)的解决方案,每种级别都包含使用Python工具集成推理(TIR)和不使用Python TIR的版本。
使用Python TIR生成数据:
from nemo_skills.pipeline.cli import generate, wrap_arguments cluster = "slurm" generate( ctx=wrap_arguments( "++inference.tokens_to_generate=120000 " "++inference.temperature=1.0 " "++inference.top_p=1.0 " "++prompt_config=gpt-oss/math " "++inference.endpoint_type=text " "++code_tags=gpt-oss " "++code_execution=true " "++skip_filled=true " "++server.code_execution.max_code_executions=100 " "++chat_template_kwargs.reasoning_effort=high " "++chat_template_kwargs.builtin_tools=[python] " ), cluster=cluster, expname="gpt-oss-generation-with-python", model="openai/gpt-oss-120b", server_type='vllm', server_gpus=8, num_random_seeds=8, input_file="/workspace/aops_problems.jsonl", output_dir="/workspace/with-python", with_sandbox=True, )答案验证与筛选
通过多轮答案判断和多数投票机制,确保最终答案的准确性:
- 聚合所有候选解决方案
- 初始化期望答案(优先使用论坛提取的答案)
- 进行答案级别的判断
- 执行多数投票和答案修复
- 重新判断以筛选SFT数据
Nemotron-Math-v2模型训练指南 🏋️
准备基础模型
首先下载基础模型,支持Qwen3-30B-A3B和Qwen3-8B两种模型:
pip install -U "huggingface_hub[cli]" hf download Qwen/Qwen3-30B-A3B --local-dir Qwen3-30B-A3B训练配置详解
训练配置根据模型和上下文长度进行调整:
| 模型 | 上下文长度 | TP | CP | PP | ETP | EMP |
|---|---|---|---|---|---|---|
| Qwen3-30B-A3B | 16k | 4 | 2 | 1 | 1 | 4 |
| Qwen3-30B-A3B | 32k | 4 | 4 | 1 | 1 | 8 |
| Qwen3-30B-A3B | 64k | 4 | 8 | 1 | 1 | 8 |
| Qwen3-30B-A3B | 128k | 4 | 8 | 1 | 1 | 8 |
| Qwen3-8B | 16k | 2 | 2 | 1 | - | - |
| Qwen3-8B | 32k | 2 | 4 | 1 | - | - |
| Qwen3-8B | 64k | 4 | 4 | 1 | - | - |
| Qwen3-8B | 128k | 8 | 8 | 1 | - | - |
完整训练脚本示例
以下是Qwen3-30B-A3B模型的完整训练脚本:
from nemo_skills.pipeline.cli import sft_nemo_rl, wrap_arguments cluster = 'slurm' tp = 8 cp = 8 pp = 1 etp = 1 emp = 8 save_period = 600 max_steps = 7200 batch_size = 2048 num_training_jobs = 10 warmup = 0 partition = 'interactive' backend = 'megatron' lr = 2e-4 min_lr = 2e-4 sft_nemo_rl( ctx=wrap_arguments( '++sft.max_num_epochs=2000 ' f'++sft.max_num_steps={max_steps} ' '++sft.val_period=0 ' '++sft.val_at_start=false ' '++sft.val_batches=1 ' '++policy.tokenizer.chat_template=null ' '++policy.sequence_packing.enabled=True ' '++policy.sequence_packing.sequence_length_round=64 ' '++policy.make_sequence_length_divisible_by=128 ' '++data.num_workers=10 ' '++data.add_bos=false ' '++data.add_eos=false ' '++data.add_generation_prompt=false ' f'++policy.megatron_cfg.tensor_model_parallel_size={tp} ' f'++policy.megatron_cfg.context_parallel_size={cp} ' f'++policy.megatron_cfg.expert_model_parallel_size={emp} ' f'++policy.megatron_cfg.expert_tensor_parallel_size={etp} ' f'++policy.megatron_cfg.pipeline_model_parallel_size={pp} ' f'++policy.megatron_cfg.sequence_parallel=True ' f'++policy.megatron_cfg.bias_activation_fusion=True ' f'++policy.megatron_cfg.apply_rope_fusion=True ' '++policy.megatron_cfg.layernorm_epsilon=1e-6 ' '++policy.megatron_cfg.moe_permute_fusion=false ' f'++checkpointing.save_period={save_period} ' '++checkpointing.keep_top_k=50 ' f'++policy.train_global_batch_size={batch_size} ' f'++policy.max_total_sequence_length=131072 ' '++policy.max_grad_norm=0.0 ' f'++policy.megatron_cfg.optimizer.lr={lr} ' '++policy.megatron_cfg.optimizer.bf16=True ' f'++policy.megatron_cfg.optimizer.min_lr={min_lr} ' '++policy.megatron_cfg.optimizer.weight_decay=0.01 ' '++policy.megatron_cfg.optimizer.adam_eps=1e-8 ' f'++policy.megatron_cfg.scheduler.lr_warmup_iters={warmup} ' f'++policy.megatron_cfg.scheduler.lr_decay_iters={max_steps} ' '++policy.megatron_cfg.scheduler.lr_warmup_init=1e-7 ' '++policy.megatron_cfg.scheduler.lr_decay_style=cosine ' '++logger.swanlab_enabled=false ' '++checkpointing.checkpoint_must_save_by=00:03:35:00 ' ), cluster=cluster, wandb_project='sft-Qwen3-30B-A3B', expname='nemo-rl-sft-Qwen3-30B-A3B', backend='megatron', output_dir='/workspace/final_sft_model', hf_model='/workspace/Qwen3-30B-A3B', training_data='/workspace/sft.jsonl', num_gpus=8, num_nodes=32, dependent_jobs=num_training_jobs, )实战操作指南:从零开始复现 🛠️
环境准备与安装
首先克隆项目并设置环境:
git clone https://gitcode.com/gh_mirrors/ne/Skills cd Skills pip install -e .配置集群设置
根据你的计算资源配置集群配置文件。Nemo Skills支持从本地工作站到大规模Slurm集群的无缝迁移:
# cluster_configs/example-slurm.yaml slurm: partition: your_partition account: your_account time: "24:00:00" qos: normal constraint: "gpu&a100" cpus_per_task: 8 mem: "64G"数据准备步骤
- 下载原始数据:从AoPS论坛和Math Stack Exchange收集数学问题
- 问题提取:使用Qwen2.5-32B-Instruct模型提取数学问题
- 解决方案生成:使用gpt-oss-120b生成三种难度级别的解决方案
- 答案验证:通过多数投票机制确定最终答案
- SFT数据准备:准备6种不同类型的数据用于监督微调
训练执行流程
- 基础模型准备:下载并转换基础模型格式
- 训练配置:根据硬件资源调整并行策略
- 训练启动:使用Slurm集群提交训练任务
- 监控与调优:使用WandB等工具监控训练过程
- 模型评估:在多个数学基准测试上评估模型性能
关键技巧与最佳实践 💡
1. 数据质量优化
- 使用多轮答案验证确保数据准确性
- 结合Python TIR和非TIR解决方案提供多样性
- 实施严格的去污染策略避免数据泄露
2. 训练效率提升
- 合理配置TP/CP/PP并行策略
- 使用序列打包技术提高GPU利用率
- 根据硬件资源调整批处理大小
3. 模型评估策略
- 在多个数学基准测试上进行全面评估
- 使用GenSelect方法选择最佳解决方案
- 对比不同难度级别的性能表现
4. 资源管理
- 使用Slurm集群管理大规模训练任务
- 配置检查点策略防止训练中断
- 监控GPU内存使用情况避免溢出
常见问题与解决方案 ❓
Q1: 训练过程中出现内存不足怎么办?
解决方案:调整并行策略,减少批处理大小,或使用梯度累积技术。
Q2: 如何加速数据生成过程?
解决方案:增加服务器GPU数量,使用异步调度,并行处理多个问题。
Q3: 模型性能不理想如何调优?
解决方案:调整学习率策略,增加训练步数,或使用更高质量的训练数据。
Q4: 如何在小规模硬件上运行?
解决方案:使用Qwen3-8B基础模型,减少并行度,使用更小的上下文长度。
总结与展望 🌟
通过本文的详细指南,你已经掌握了使用Nemo Skills复现Nemotron-Math-v2训练流程的完整方法。从数据收集、解决方案生成到模型训练的每个步骤都经过了实践验证。Nemo Skills框架的强大之处在于其灵活性和可扩展性,无论是小规模实验还是大规模生产部署,都能提供完整的解决方案。
未来发展方向:
- 🔬 扩展到更多数学领域和难度级别
- 🚀 优化训练效率,减少计算成本
- 🌍 支持多语言数学问题处理
- 🤝 社区驱动的数据集扩展和模型优化
现在你已经具备了复现Nemotron-Math-v2训练流程的所有知识和工具,立即开始你的数学大模型训练之旅吧!🎯
【免费下载链接】SkillsA project to improve skills of large language models项目地址: https://gitcode.com/gh_mirrors/ne/Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
