十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Megatron-LM Span Groups 完全指南:用 OpenTelemetry 按需控制 Trace 粒度

Megatron-LM Span Groups 完全指南:用 OpenTelemetry 按需控制 Trace 粒度 Megatron-LM Span Groups 完全指南用 OpenTelemetry 按需控制 Trace 粒度【免费下载链接】Megatron-LMOngoing research training transformer models at scale项目地址: https://gitcode.com/GitHub_Trending/me/Megatron-LMMegatron-LM 通过nemo-lens接入 OpenTelemetry在训练循环、检查点、评估、流水线并行通信等框架边界发出 trace。Span Groups跨度分组是控制 trace 粒度的核心机制你只需设置一个环境变量或 CLI 参数就能在生产环境低开销的粗粒度追踪与开发调试用的逐层细粒度剖析之间自由切换。读完本文你将掌握 Megatron 的全部 span 分组预设、完整 span 层级树、关键 span 属性以及如何结合 rank 策略与采样器在真实训练任务中落地这套可观测性方案。Span Groups 机制概述在 Megatron-LM 中每个 span 都被打上一个分组标签span group运行时根据当前启用的分组集合决定是否真正创建并发出该 span。分组粒度由MEGATRON_OTEL_SPAN_GROUPS环境变量或--otel-span-groupsCLI 标志控制取值可以是预设关键词、单独的分组名、或二者的混合。该机制本身由nemo-lens库提供通用能力Megatron 在此之上定义了MegatronSpanGroup位于 megatron/core/telemetry/span_groups.py扩展出 Megatron 专属的分组并维护了完整的 span 层级。Megatron 侧只需要启用遥测总开关MEGATRON_OTEL_ENABLED1默认关闭通过MEGATRON_OTEL_SPAN_GROUPS指定粒度规格默认default。典型的最小可用配置如下详见 Observability 快速开始export MEGATRON_OTEL_ENABLED1 export OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:4317 export MEGATRON_OTEL_SPAN_GROUPSdefault # 粗粒度生产安全 torchrun --nproc_per_node8 pretrain_gpt.py ...预设关键词Preset KeywordsMEGATRON_OTEL_SPAN_GROUPS接受三类取值预设关键词、单个分组名、或混合逗号分隔。三个预设关键词覆盖了从生产到调试的全部粒度需求预设包含的分组相对开销defaultjob、checkpoint、evaluate、inference最低 —— 生产环境安全per_stepdefaultmodel_init、load_checkpoint、step、forward_backward、optimizer、communication、data_loading中等 —— 建议配合采样使用all全部包括microbatch、layer、activation_offload最高 —— 仅供开发/调试从源码看MegatronSpanGroup._PRESETS中per_step预设还额外包含first_iteration分组用于捕获恢复后首个迭代的一次性预热开销并定义了profiling作为all的别名两者都等于ALL_GROUPS。default预设实际由{job, checkpoint, evaluate, first_iteration, inference}组成见 span_groups.py。MegatronSpanGroupMegatron 专属分组MegatronSpanGroup定义于 megatron/core/telemetry/span_groups.py继承自 lens 的基类SpanGroup在通用分组之上增加了 Megatron 特有的细粒度分组分组发出的 span典型频率jobmegatron.pretrain、megatron.train每个任务一次checkpointmegatron.save_checkpoint、megatron.save_checkpoint.state_dict、megatron.save_checkpoint.io_write每次保存检查点evaluatemegatron.evaluate、megatron.evaluate.step每个评估间隔model_initmegatron.model_init启动时一次load_checkpointmegatron.load_checkpoint、megatron.load_checkpoint.io_read启动时一次stepmegatron.train_step每次迭代forward_backwardmegatron.forward_backward每次迭代optimizermegatron.optimizer_step每次迭代microbatchmegatron.microbatch.forward、megatron.microbatch.backward每个 micro-batchlayermegatron.layer.forward、megatron.layer.self_attention、megatron.layer.mlp每个 micro-batch 的每一层communicationmegatron.p2p.{recv,send}_{forward,backward}、megatron.grad_sync.{start,finish}、megatron.pp.recv_forward.linked每次迭代activation_offloadmegatron.activation.offload、megatron.activation.reload每个 micro-batchdata_loading保留给未来使用每次迭代inference保留给推理服务器每个推理请求源码中还定义了文档表格之外的两个分组均只应显式选择而非纳入常用预设first_iteration进程内实际执行的首个训练迭代注意不一定是第 1 次迭代例如恢复检查点或跳过迭代之后用于捕获稳态迭代中不存在的单次预热开销编译、CUDA graph 捕获、预取trace_region为megatron.core.perfetto_trace中约 85 个原生trace_region(...)标记自动生成对应的 lens span覆盖检查点/数据集/加载等子阶段。它刻意不在per_step预设中只属于all需要时显式启用例如--otel-span-groups per_step,trace_region。依赖缺失时的降级span_groups.py采用可选导入策略当nemo-lens未安装时模块内提供一个最小的SpanGroup桩类保证MegatronSpanGroup常量始终可用但此时SpanGroup.resolve()会抛出RuntimeError提示需pip install nemo-lens才能解析 span-group 规格。同样地fallbacks.py 在 lens 缺失时提供trace_fn、managed_span、is_span_group_enabled等无操作替身——这意味着所有调用点可以无条件 import 该模块遥测天然是可选的。如何配置 Span Groups环境变量与 CLI 标志两个入口完全等价CLI 标志优先级更高# 环境变量方式 export MEGATRON_OTEL_SPAN_GROUPSper_step # CLI 标志方式覆盖同名环境变量 python pretrain_gpt.py --otel-span-groups per_step ...在 megatron/training/global_vars.py 的_set_telemetry()中配置通过NemoLensConfig.from_env(prefixMEGATRON_OTEL, fallback_prefixNEMO_LENS, span_group_clsMegatronSpanGroup)从环境变量构建随后用三个 CLI 参数覆盖对应字段--otel-enabled覆盖MEGATRON_OTEL_ENABLED置位后config.enabled True--otel-service-name NAME覆盖OTEL_SERVICE_NAME未显式设置时默认megatron-lm--otel-span-groups SPEC覆盖MEGATRON_OTEL_SPAN_GROUPS写入config.span_groups。注意MEGATRON_OTEL_*变量都是NemoLensConfig字段的别名以NEMO_LENS_*作为回退前缀并非独立配置项——设置MEGATRON_OTEL_ENABLED1等价于NEMO_LENS_ENABLED1详见 Observability 配置文档。常用配置组合示例# 仅粗粒度 span —— 默认 MEGATRON_OTEL_SPAN_GROUPSdefault # 包含逐 step span MEGATRON_OTEL_SPAN_GROUPSper_step # default 仅 microbatch跳过 step/optimizer 分组 MEGATRON_OTEL_SPAN_GROUPSdefault,microbatch # 全部 span MEGATRON_OTEL_SPAN_GROUPSall生产环境典型组合配合 10% trace 采样export MEGATRON_OTEL_ENABLED1 export MEGATRON_OTEL_SPAN_GROUPSper_step export OTEL_TRACES_SAMPLERparentbased_traceidratio export OTEL_TRACES_SAMPLER_ARG0.1 # 保留 10% 的 trace完整 Span 层级树以下是 Megatron 可能发出的全部 span 树每个 span 右侧标注了控制它的分组。理解这棵树是定位性能问题的基础例如发现某个megatron.layer.mlp耗时异常你至少需要启用microbatch与layer分组才能看到它。megatron.pretrain # job ├── megatron.model_init # model_init ├── megatron.load_checkpoint # load_checkpoint │ └── megatron.load_checkpoint.io_read # load_checkpoint └── megatron.train # job ├── megatron.train_step # step │ ├── megatron.forward_backward # forward_backward │ │ ├── megatron.microbatch.forward # microbatch (×N) │ │ │ └── megatron.layer.forward # layer (×L per microbatch) │ │ │ ├── megatron.layer.self_attention │ │ │ └── megatron.layer.mlp │ │ ├── megatron.microbatch.backward # microbatch (×N) │ │ ├── megatron.pp.recv_forward.linked # communication — link to senders context (PP 1) │ │ ├── megatron.p2p.recv_forward # communication │ │ ├── megatron.p2p.send_forward # communication │ │ ├── megatron.p2p.recv_backward # communication │ │ ├── megatron.p2p.send_backward # communication │ │ ├── megatron.activation.offload # activation_offload │ │ └── megatron.activation.reload # activation_offload │ ├── megatron.grad_sync.start # communication │ ├── megatron.grad_sync.finish # communication │ └── megatron.optimizer_step # optimizer ├── megatron.save_checkpoint # checkpoint │ ├── megatron.save_checkpoint.state_dict # checkpoint │ └── megatron.save_checkpoint.io_write # checkpoint └── megatron.evaluate # evaluate └── megatron.evaluate.step # evaluate (×N)从调用点看这棵树在源码中确实逐层落地训练循环中的megatron.pretrain、megatron.train、megatron.train_step、megatron.forward_backward、megatron.optimizer_step、megatron.model_init、megatron.evaluate等 span 位于 megatron/training/training.pymegatron.microbatch.forward/backward与megatron.pp.recv_forward.linked位于 megatron/core/pipeline_parallel/schedules.pyP2P 四件套位于 megatron/core/pipeline_parallel/p2p_communication.py梯度同步 span 位于 megatron/core/distributed/distributed_data_parallel.py检查点 span 位于 megatron/training/checkpointing.py。需要说明的是仓库实现中实际发出的 span 名在个别位置与上树存在简写差异例如训练循环内部实际使用megatron.startup.model_init、megatron.checkpoint.save、megatron.train.iteration等更细的名称并带有is_goodput_spanTrue标记上表是文档给出的规范层级骨架排查具体 trace 时以实际导出的 span 名为准。Span 属性Span Attributes除了分层级Megatron 还会在关键 span 上附加语义属性供查询与告警使用。Megatron 专属的 span 属性如下属性类型设置在哪个 span 上megatron.model_typestrmegatron.pretrainmegatron.train_itersintmegatron.pretrain、megatron.trainmegatron.global_batch_sizeintmegatron.pretrainmegatron.iterationintmegatron.train_step、megatron.save_checkpointmegatron.lossfloatmegatron.train_stepmegatron.grad_normfloatmegatron.train_step、megatron.optimizer_stepmegatron.num_microbatchesintmegatron.forward_backwardmegatron.microbatch_idintmegatron.microbatch.forwardmegatron.eval_itersintmegatron.evaluatemegatron.update_successfulboolmegatron.optimizer_stepdl.pipeline_parallel.rankintmegatron.pp.recv_forward.linkeddl.microbatch_idintmegatron.pp.recv_forward.linked仅 warmup 阶段此外_set_telemetry()还会把训练配置写入 OTelResource属性在 Jaeger 中显示为整个运行每个 span 共有的 Process 标签包括dl.tensor_parallel.size、dl.pipeline_parallel.size、dl.data_parallel.size、megatron.num_layers、megatron.hidden_size、megatron.precision等并叠加 lens 自动探测的 hostname、PID、GPU 数量、SLURM/Kubernetes 元数据详见 configuration.md。span 属性用于刻画某次前向/某次保存的个体特征resource 属性用于给整个运行打上配置标签两者互补。粒度指南与开销分析不同粒度组合的开销差异显著选择建议如下Span 分组相对开销建议禁用MEGATRON_OTEL_ENABLED0无冒烟测试默认default最低所有生产运行均安全per_step中等配合OTEL_TRACES_SAMPLER使用all含 microbatch、layer最高仅开发/性能剖析一个值得强调的实现细节是禁用路径零分配非导出 rank 的 span 分组是frozenset()is_span_group_enabled()在所有分组上都返回False因此根本不会创建 span 对象。禁用路径只是一次 frozenset 查找然后立即返回而不是一个仍会分配内存的空操作 spanfallback 实现在 fallbacks.py 中同样以无操作替身保证该路径的零成本。默认情况下整个分布式任务只由一个 rank最后一个 rank导出遥测需要多 rank 数据时可通过MEGATRON_OTEL_RANK_STRATEGY切换为all_ranks、sampled或first_rank_per_node。进阶理解调用链与扩展新 Span如果你要在 Megatron 中新增一个 span遵循的模式是在 span_groups.py 中声明分组常量并加入ALL_GROUPS然后在目标调用点使用_otel_managed_span(group, name, ...)上下文管理器对应 lens 的managed_span或_otel_trace_fn(group, name)装饰器包裹例如 training.py 中megatron.evaluate的装饰器用法。由于is_span_group_enabled()的提前返回语义关闭的分组在热路径上只有一次 frozenset 查找的开销——这正是per_step、all等细粒度分组可以安全地内嵌在每次迭代/每个 micro-batch 循环中的原因。若需在分布式特别是流水线并行场景下关联各 rank 的 tracemegatron.pp.recv_forward.linked以及 pipeline-parallel.md 中介绍的 trace 关联机制是首选入口训练指标loss、吞吐、梯度范数的导出细节见 metrics.md。【免费下载链接】Megatron-LMOngoing research training transformer models at scale项目地址: https://gitcode.com/GitHub_Trending/me/Megatron-LM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表