Nemo Skills实战案例:复现Nemotron-Math-v2训练流程

📅 2026/7/19 16:32:17 👁️ 阅读次数 📝 编程学习
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, )

答案验证与筛选

通过多轮答案判断和多数投票机制,确保最终答案的准确性:

  1. 聚合所有候选解决方案
  2. 初始化期望答案(优先使用论坛提取的答案)
  3. 进行答案级别的判断
  4. 执行多数投票和答案修复
  5. 重新判断以筛选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

训练配置详解

训练配置根据模型和上下文长度进行调整:

模型上下文长度TPCPPPETPEMP
Qwen3-30B-A3B16k42114
Qwen3-30B-A3B32k44118
Qwen3-30B-A3B64k48118
Qwen3-30B-A3B128k48118
Qwen3-8B16k221--
Qwen3-8B32k241--
Qwen3-8B64k441--
Qwen3-8B128k881--

完整训练脚本示例

以下是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"

数据准备步骤

  1. 下载原始数据:从AoPS论坛和Math Stack Exchange收集数学问题
  2. 问题提取:使用Qwen2.5-32B-Instruct模型提取数学问题
  3. 解决方案生成:使用gpt-oss-120b生成三种难度级别的解决方案
  4. 答案验证:通过多数投票机制确定最终答案
  5. SFT数据准备:准备6种不同类型的数据用于监督微调

训练执行流程

  1. 基础模型准备:下载并转换基础模型格式
  2. 训练配置:根据硬件资源调整并行策略
  3. 训练启动:使用Slurm集群提交训练任务
  4. 监控与调优:使用WandB等工具监控训练过程
  5. 模型评估:在多个数学基准测试上评估模型性能

关键技巧与最佳实践 💡

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),仅供参考