fairseq 中的 Megatron-11b:基于 Megatron-LM 的 110 亿参数语言模型并行训练与 Wikitext-103 评估实战
fairseq 中的 Megatron-11b基于 Megatron-LM 的 110 亿参数语言模型并行训练与 Wikitext-103 评估实战【免费下载链接】fairseqFacebook AI Research Sequence-to-Sequence Toolkit written in Python.项目地址: https://gitcode.com/gh_mirrors/fa/fairseq导读本文围绕 fairseq 仓库中 examples/megatron_11b/README.md 展开系统讲解 Megatron-11b——一个基于 Megatron-LM 论文方案、参数量达 110 亿的单向unidirectional语言模型从架构参数、训练超参到 8 卡模型并行训练命令再到 Wikitext-103 上完整的下载 → 反 token 化 → BPE 编码 → binarize → 评估与重归一化全流程。读完本文你将掌握如何在 fairseq 中复现 Megatron-11b 的模型并行训练并理解为何评估时需要做困惑度perplexity重归一化。一、Megatron-11b 概览Megatron-11b 是 fairseq 仓库中一个具有11B110 亿参数的单向语言模型其设计思路直接源自 Megatron-LM 论文Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism。与普通 Transformer 语言模型的关键区别在于它采用层内模型并行intra-layer model parallelism将每一层的参数拆分到 8 张 GPU 上前向/反向传播过程中通信激活值与梯度从而让单卡无法容纳的超大模型得以训练与推理。在数据与词表层面Megatron-11b 使用与 RoBERTa 相同的数据和相同的字节级 BPEbyte-pair encoding分词方案。因此后续评估流程中会复用 RoBERTa 的 GPT-2 BPE 编码脚本examples/roberta/multiprocessing_bpe_encoder.py并且模型自带与 RoBERTa 风格一致的dict.txt词表。前置提醒模型并行实现依赖 fairseq 的 megatron 子模块。从 fairseq/model_parallel/models/transformer_lm.py 的源码可以看到构建模型与vocab_parallel_cross_entropy损失都会在子模块缺失时抛出提示需要先执行git submodule update --init fairseq/model_parallel/megatron安装该子模块。二、模型架构与训练配置2.1 架构参数参数取值embed_dimdecoder_embed_dim3072ffn_dimdecoder_ffn_embed_dim3072 × 6 18432layersdecoder_layers72attention headsdecoder_attention_heads32以上数值可在源码注册的架构函数中直接找到对应关系。fairseq/model_parallel/models/transformer_lm.py 中注册了transformer_lm_megatron_11b架构register_model_architecture( model_parallel_transformer_lm, transformer_lm_megatron_11b ) def transformer_lm_megatron_11b(args): args.decoder_embed_dim getattr(args, decoder_embed_dim, 3072) args.decoder_ffn_embed_dim getattr(args, decoder_ffn_embed_dim, 3072 * 6) args.decoder_layers getattr(args, decoder_layers, 72) args.decoder_attention_heads getattr(args, decoder_attention_heads, 32) args.dropout getattr(args, dropout, 0.1) args.attention_dropout getattr(args, attention_dropout, 0.1) args.activation_fn getattr(args, activation_fn, gelu) base_lm_architecture(args)值得注意的细节同文件还注册了不带_11b后缀的transformer_lm_megatron架构L146-L155两者唯一区别是 FFN 维度transformer_lm_megatron为3072 * 4而transformer_lm_megatron_11b为3072 * 6。base_lm_architecture中强制设置args.decoder_normalize_before True注释明确说明没有此项训练不稳定Model training is not stable without this。模型并行实现不支持character embeddings 与 adaptive inputbuild_model中直接raise NotImplementedError。2.2 训练超参参数取值batch sizebsz512num_updates300,000peak_lr1.5e-04lr schedulerinverse_sqrtclip norm0.0三、预训练模型下载官方提供预训练权重megatron_11b11B 参数、压缩包约 19GB模型描述参数量文件大小下载megatron_11bmegatron_11b 单向语言模型11B19GBmegatron_11b.tar.gz下载后解压即得到megatron_11b/目录内含model.pt与dict.txt具体命令见下文评估流程第一步。四、模型并行训练命令单节点 8 卡Megatron-11b 参数量过大无法在单卡上训练。按照原版 Megatron 的做法fairseq 采用层内模型并行每层参数拆分到多张 GPU前向/反向过程中分别通信激活值与梯度同时使用vocab_parallel_cross_entropy损失函数把词表维度的 logits 也按模型并行切分避免输出层在单卡上重建整个词表分布。以下命令演示在单节点8 张 GPU上训练 Megatron-11b。若有多节点可以通过增大--distributed-world-size将其与数据并行data parallel结合使用fairseq-train DATA_PATH \ --distributed-world-size 8 \ --memory-efficient-fp16 \ --num-workers 2 \ --model-parallel-size 8 \ --criterion vocab_parallel_cross_entropy \ --task language_modeling \ --sample-break-mode none \ --tokens-per-sample 1024 \ --arch transformer_lm_megatron_11b \ --share-decoder-input-output-embed \ --optimizer adam --adam-betas (0.9, 0.98) --adam-eps 1e-08 --clip-norm 0.0 \ --lr-scheduler inverse_sqrt --lr 0.00015 \ --warmup-updates 3000 --weight-decay 0.01 \ --dropout 0.1 --attention-dropout 0.1 \ --batch-size 2 \ --max-update 300000注以上命令在DGX-18×V100-32GB上验证通过。4.1 关键参数逐项解读参数作用与说明--model-parallel-size 8模型并行度本场景把每层参数拆分到 8 张 GPU--distributed-world-size 8全局分布式规模。单节点 8 卡时与模型并行度一致多节点时可继续增大以叠加数据并行--criterion vocab_parallel_cross_entropy词表并行交叉熵损失配合输出层切分使用详见下文--arch transformer_lm_megatron_11b选择已注册的模型并行语言模型架构--share-decoder-input-output-embed共享输入/输出词嵌入。模型并行下必须开启否则会报错--memory-efficient-fp16显存高效 FP16 训练缓解 11B 参数带来的显存压力--task language_modeling/--sample-break-mode none/--tokens-per-sample 1024语言建模任务配置样本不按句子边界截断每样本最长 1024 token--batch-size 2每张 GPU 上的 batch size配合 8 卡与梯度累积等效实现整体 bsz 5124.2 底层实现为什么需要这些参数从 fairseq/model_parallel/models/transformer_lm.py 源码可以看出模型并行语言模型的核心机制词表对齐build_model中执行task.source_dictionary.pad_to_multiple_(args.model_parallel_size * 8)与task.target_dictionary.pad_to_multiple_(...)把词表补齐到8 * 模型并行度的整数倍便于在 GPU 间均匀切分词表。并行词嵌入build_embedding使用VocabParallelEmbedding构建词嵌入L74-L83并按embed_dim ** -0.5初始化、将 padding 行置零。输出层切分在 fairseq/model_parallel/models/transformer.py#L107-L121 的output_layer中特征先经copy_to_model_parallel_region复制到模型并行区域再做投影只有当 criterion 是vocab_parallel_cross_entropy时才不需要 gather 回完整词表——否则仍需gather_from_model_parallel_region这正是命令中必须配套使用该损失函数的原因。同时该实现要求共享输入输出嵌入否则直接raise NotImplementedError。并行层结构fairseq/model_parallel/modules/transformer_layer.py 中FFN 的两个线性层分别使用ColumnParallelLineargather_outputFalse与RowParallelLinearinput_is_parallelTrue注意力使用ModelParallelMultiheadAttention从而把注意力头与 FFN 参数都拆分到多卡。损失计算fairseq/model_parallel/criterions/vocab_parallel_cross_entropy.py 注册了vocab_parallel_cross_entropy损失调用 megatron 子模块中的vocab_parallel_cross_entropy在切分的词表分片上并行计算交叉熵随后按非 padding token 求和并支持reduce_metrics汇总输出 nll_loss 与 ppl。五、评估结果模型在Wikitext-103语言建模基准上的结果模型Valid perplexityTest perplexitymegatron_11b10.6410.54六、在 Wikitext-103 上评估megatron_11b完整实操评估链路的核心难点在于Megatron-11b 使用字节级 BPE要求输入为原始未 token 化文本而 Wikitext-103 自带的是已 token 化的数据。因此需要先反 token 化再做 BPE 编码最后 binarize 并评估。整个流程共 6 步。第 1 步下载 Megatron-11b# 警告该文件有 19GB wget https://dl.fbaipublicfiles.com/fairseq/models/model_parallel/megatron_11b.tar.gz tar -xzvf megatron_11b.tar.gz解压后得到megatron_11b/目录内含评估所需的model.pt权重与dict.txt词表。第 2 步下载 Wikitext-103wget https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-103-raw-v1.zip unzip wikitext-103-raw-v1.zip第 3 步反 token 化测试集python -m examples.megatron_11b.detok wikitext-103-raw/wiki.test.raw wikitext-103-raw/wiki.test.detok该脚本实现在 examples/megatron_11b/detok.py 中它用sacremoses.MosesDetokenizer对按空格切分的 token 做 Moses 反 token 化并额外清理 BPE 风格标记与空格移除/将/还原为将–还原为–。这一步把 Wikitext-103 已 token 化的测试集恢复成接近原始文本的形式供字节级 BPE 使用。第 4 步BPE 编码wget -N https://dl.fbaipublicfiles.com/fairseq/gpt2_bpe/encoder.json wget -N https://dl.fbaipublicfiles.com/fairseq/gpt2_bpe/vocab.bpe python -m examples.roberta.multiprocessing_bpe_encoder \ --encoder-json encoder.json \ --vocab-bpe vocab.bpe \ --inputs wikitext-103-raw/wiki.test.detok \ --outputs wikitext-103-raw/wiki.test.bpe \ --workers 60这一步复用 RoBERTa 的多进程 BPE 编码器 examples/roberta/multiprocessing_bpe_encoder.py脚本基于fairseq.data.encoders.gpt2_bpe.get_encoder加载 GPT-2 BPE 的encoder.json与vocab.bpe用multiprocessing.Pool并行编码--workers指定进程数默认 20示例中调高到 60 以加速并支持--keep-empty保留空行。第 5 步fairseq binarizefairseq-preprocess \ --only-source \ --testpref wikitext-103-raw/wiki.test.bpe \ --srcdict megatron_11b/dict.txt \ --destdir wikitext103-bin使用模型自带的dict.txt作为源词表仅处理测试集--only-source输出到wikitext103-bin/。注意因为 Megatron-11b 需要模型并行词表按 8 卡切分词表应能被模型并行度对齐使用模型自带词表即可保证一致。第 6 步评估困惑度由于我们对测试集做了反 token 化与 BPE 处理fairseq-eval-lm报出的困惑度是未归一化的需要按 token 数比例重归一化详见下一节。DATA_PATHwikitext103-bin/ fairseq-eval-lm \ $DATA_PATH \ --path megatron_11b/model.pt \ --task language_modeling \ --gen-subset test \ --batch-size 8 \ --criterion cross_entropy \ --context-window 992 \ --distributed-world-size 8 \ --model-parallel-size 8 # 期望 PPL未归一化[8.46] # 注评估命令需要在 8 张 GPU 上运行发布的模型依赖模型并行参数说明--context-window 992设置 LM 评估的上下文窗口长度。Megatron-11b 训练时tokens-per-sample为 1024评估窗口取 992 是为留出预测目标的空间默认的最大目标位置数在源码中为DEFAULT_MAX_TARGET_POSITIONS 1024见 transformer_lm.py。--distributed-world-size 8 --model-parallel-size 8必须在 8 张 GPU 上运行因为发布模型按 8 卡模型并行切分保存权重需要重新分布到各卡。--criterion cross_entropy评估阶段使用普通交叉熵配合gather_from_model_parallel_region汇总完整词表分布训练阶段才使用vocab_parallel_cross_entropy。评估入口为 fairseq_cli/eval_lm.py它加载 checkpoint 后用SequenceScorer逐批计算语言模型困惑度。七、困惑度重归一化renormalization详解评估得到的未归一化 PPL 为8.46但发布论文与 README 中报告的测试 PPL 是10.54。差距来自 token 数变化Wikitext-103 原始测试集 token 数为245566反 token 化 BPE 编码后 token 数变为270847。由于困惑度是几何平均的 token 概率2^(-avg_log2_prob)当 token 数改变时总对数概率需要按 token 比例缩放。重归一化公式为2 ^ ( log_2(unnormalized_PPL) * (new_token_cnt / orig_token_cnt) )代入数值2 ^ ( log_2(8.46) * (270847 / 245566) ) 10.54更一般地无论你准备的是哪个测试集只要记下处理前原始 token 数与处理后 BPE token 数套用上述公式即可把fairseq-eval-lm的输出对齐到原始文本口径。八、常见问题与注意事项必须先安装 megatron 子模块git submodule update --init fairseq/model_parallel/megatron否则ModelParallelTransformerLanguageModel.build_model与VocabParallelCrossEntropyCriterion都会抛出 ImportError详见 transformer_lm.py 与 vocab_parallel_cross_entropy.py。训练必须开启--share-decoder-input-output-embed模型并行的输出层实现依赖共享嵌入output_layer中直接对非共享情况抛出 NotImplementedError。模型并行实现暂不支持character embeddings、adaptive inputadaptive softmax以及 quantization noiseq_noise 0时在并行层直接抛NotImplementedError。评估与训练损失函数不同训练用vocab_parallel_cross_entropy词表分片内计算损失评估用cross_entropygather 完整词表后计算。显存与硬件前提README 中验证环境为 DGX-18×V100-32GB训练需开启--memory-efficient-fp16评估同样要求 8 卡才能加载模型。困惑度口径所有报告值valid 10.64 / test 10.54均为重归一化后的结果直接运行fairseq-eval-lm得到的是未归一化值 8.46二者不可混用。九、延伸阅读模型并行语言模型完整实现fairseq/model_parallel/models/transformer_lm.py词表并行交叉熵损失fairseq/model_parallel/criterions/vocab_parallel_cross_entropy.py模型并行 Transformer含输出层切分逻辑fairseq/model_parallel/models/transformer.py模型并行层Column/RowParallelLinear、并行注意力fairseq/model_parallel/modules/transformer_layer.py反 token 化脚本examples/megatron_11b/detok.py多进程 BPE 编码脚本examples/roberta/multiprocessing_bpe_encoder.pyLM 评估入口fairseq_cli/eval_lm.py【免费下载链接】fairseqFacebook AI Research Sequence-to-Sequence Toolkit written in Python.项目地址: https://gitcode.com/gh_mirrors/fa/fairseq创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于 gTTS 与 Pygame 的 text_to_audio 文字转语音:类封装、懒加载与内存优化实战

基于 gTTS 与 Pygame 的 text_to_audio 文字转语音:类封装、懒加载与内存优化实战

基于 gTTS 与 Pygame 的 text_to_audio 文字转语音&#xff1a;类封装、懒加载与内存优化实战 【免费下载链接】Python My Python Examples 项目地址: https://gitcode.com/gh_mirrors/py/Python <输出文章> 基于 gTTS 与 Pygame 的 text_to_audio 文字转语音&am…

2026/9/19 13:11:54 阅读更多 →
Typora Markdown编辑器下载安装与使用全指南

Typora Markdown编辑器下载安装与使用全指南

Markdown 文件这玩意儿&#xff0c;说简单也简单&#xff0c;一个纯文本文件改个后缀就能用&#xff1b;说讲究也真讲究&#xff0c;尤其是当你需要写技术文档、整理笔记、维护博客草稿的时候&#xff0c;一个趁手的编辑器能直接把效率拉高一个档次。Typora 就是在这个需求缝隙…

2026/9/19 13:10:54 阅读更多 →
DeepSeek接入Visual Studio与VS Code:从API配置到C#实操指南

DeepSeek接入Visual Studio与VS Code:从API配置到C#实操指南

最近DeepSeek是真的火&#xff0c;火到什么程度&#xff1f;连我们组里一直用Visual Studio写.NET的老哥都跑来问我&#xff1a;“听说这玩意儿能辅助写代码&#xff0c;能不能直接接到VS里用&#xff1f;”我一开始也以为只能在网页上聊天&#xff0c;后来把官方API翻了一遍才…

2026/9/19 13:10:54 阅读更多 →

最新新闻

Spring Boot CORS跨域配置与排错:前后端分离联调指南

Spring Boot CORS跨域配置与排错:前后端分离联调指南

简介&#xff1a;Spring Boot 开发者常遇到的跨域问题&#xff0c;在这份 PDF 文档中得到系统梳理&#xff0c;资源面向 Java Web 开发者和前后端分离项目维护人员&#xff0c;讲解 CORS 跨域资源共享机制及其在 Spring Boot 中的落地。文档按两条主线展开&#xff1a;一是自定…

2026/9/19 15:04:43 阅读更多 →
DataHub Pinecone 元数据采集器:向量索引、命名空间与 Schema 推断实战指南

DataHub Pinecone 元数据采集器:向量索引、命名空间与 Schema 推断实战指南

DataHub Pinecone 元数据采集器&#xff1a;向量索引、命名空间与 Schema 推断实战指南 【免费下载链接】datahub The Context Platform for your Data and AI Stack 项目地址: https://gitcode.com/GitHub_Trending/da/datahub Pinecone 是一款托管向量数据库&#xff…

2026/9/19 15:04:43 阅读更多 →
LLVM项目深度解析:从核心架构到源码构建与实战优化

LLVM项目深度解析:从核心架构到源码构建与实战优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:04:43 阅读更多 →
计算机网络能力成长地图:从物理层到应用层的实战诊断指南

计算机网络能力成长地图:从物理层到应用层的实战诊断指南

1. 这不是“背诵清单”&#xff0c;而是一张可执行的网络能力成长地图你点开这篇标题&#xff0c;大概率正面临三种典型场景&#xff1a;期末考试前72小时&#xff0c;教材翻到第3章就犯困&#xff0c;笔记里全是“三次握手”“滑动窗口”“ARP缓存”这些词&#xff0c;但它们像…

2026/9/19 15:04:43 阅读更多 →
pandoc 源码走读:HTML 标题内 `<br>` 到 CommonMark 硬换行的转换与 11341 setext 处理

pandoc 源码走读:HTML 标题内 `<br>` 到 CommonMark 硬换行的转换与 11341 setext 处理

pandoc 源码走读&#xff1a;HTML 标题内 <br> 到 CommonMark 硬换行的转换与 #11341 setext 处理 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 导读 本篇文章以 pandoc 仓库中的命令测试用例 test/…

2026/9/19 15:04:43 阅读更多 →
企业网站建设方案投标书:从零搭建高胜率技术选型与SEO布局指南

企业网站建设方案投标书:从零搭建高胜率技术选型与SEO布局指南

企业网站建设方案投标书:从零搭建高胜率技术选型与SEO布局指南 域名服务器配置一脸懵?别急,这往往是企业官网从零搭建时最让人头秃的环节。很多老板觉得只要服务器能通、域名能解析就万事大吉,结果上线三个月,百度搜不到,谷歌收录慢,投标时技术标还因为架构描述不清被扣分。…

2026/9/19 15:03:57 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介&#xff1a;面向机器学习、深度学习与数据建模学习者的一份完整研究文献&#xff0c;聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本&#xff0c;系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程&#xff0c;展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型&#xff0c;在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志&#xff0c;发现loss从凌晨两点就开始往上爬&#xff0c;一路从0.8涨到1.35&#xff0c;整整六个小时没人发现。那六个小时的训练不仅白跑&#xff0c;还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast&#xff1a;从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud &#x1f324;️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南&#xff1a;掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战&#xff1a;基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时&#xff0c;甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事&#xff0c;打开配置文件改一行不就完了&#xff1f;结果真动手才发现&#xff0c;Flutter项目里“应用名称”根本不是一处配置&#xff0c;而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →