megatron_utils.py — Megatron 模型转换工具¶
文件路径: verl/utils/megatron_utils.py
文件概述¶
这是 verl 中最大的工具文件(约 68.5KB),提供 HuggingFace 模型格式与 Megatron 模型格式之间的双向转换。Megatron 使用特定的参数命名和分片策略,与 HuggingFace 的格式不同。
背景知识¶
Megatron-LM 是 NVIDIA 的大模型训练框架,使用张量并行和流水线并行。它的模型参数命名(如 layers.0.self_attention.query_key_value.weight)与 HuggingFace 的命名(如 model.layers.0.self_attn.q_proj.weight)完全不同。
核心功能¶
1. HF → Megatron 转换¶
def hf_to_megatron(hf_state_dict, config):
"""将 HuggingFace 模型权重转为 Megatron 格式"""
# 重命名 key
# 合并 Q/K/V 为 QKV
# 按 TP 并行度分片
2. Megatron → HF 转换¶
def megatron_to_hf(megatron_state_dict, config):
"""将 Megatron 模型权重转为 HuggingFace 格式"""
# 反向重命名
# 拆分 QKV 为 Q/K/V
# 合并 TP 分片
支持的模型架构¶
- Llama / Llama2 / Llama3
- Qwen / Qwen2
- DeepSeek
- Mistral
- 以及其他 HuggingFace 标准架构
与其他模块的关系¶
- 被 Megatron worker 在模型初始化时调用
- 被 checkpoint 模块在保存/加载时使用
- 依赖
megatron/tensor_parallel.py的分片信息
小结¶
megatron_utils.py 是连接 HuggingFace 生态和 Megatron 训练框架的桥梁。它处理了复杂的参数名映射和张量分片逻辑,让用户可以用 HuggingFace 预训练权重开始 Megatron 训练。