Prhub

#2222 [AMD] Remove PR#301 FileSystemWriterAsync swap — superseded by Megatron-LM#74

原始 PR 作者 sreerohi 合并时间 2026-08-06 14:33 文件变更 3 提交数 1 评论 1 代码增减 +0 / -45

执行摘要

移除 ROCm 检查点写入器替换,依赖上游修复

PR body 明确说明:PR#301 引入 ROCmFileSystemWriterAsync 以修复 ROCm pinned-memory segfault,通过子类化 FileSystemWriterAsync 并重写 preload_tensors;Megatron-LM#74 在同一基类上修复了该 bug,使本地子类替换不再必要。关联 Issue Megatron-LM#74 标题为 'Tiny fix fsdp distributed update weight error',属于上游修复,因此本地 workaround 应清除。

值得快速浏览,重点确认两点:一是运行集群的 Megatron-LM 版本已包含 #74 修复;二是 ROCm CI 对 checkpoint 保存路径有覆盖。设计决策上,将平台 workaround 上推至上游并在本地及时清理,是值得借鉴的做法。

讨论亮点

本 PR 无 review 评论。评审人 guapisolo 直接批准(APPROVED,body 为空);关联 Issue Megatron-LM#74 上有 XinyuJiangCMU 的 'LGTM'。整体属于低争论的清理型变更。

实现拆解

  1. 删除 miles/utils/rocm_checkpoint_writer.py:整个文件(27 行)被移除,包含 ROCmFileSystemWriterAsync 类与 preload_tensors 静态方法的实现。该实现通过将 non_blocking 强制置 False 避免 HIP 下张量进入 pinned memory 后 fork 崩溃。
  2. 在 miles/backends/megatron_utils/model.py 的 initialize_model_and_optimizer() 中删除 HIP 检测块(8 行):原先在模型初始化前替换 filesystem_async 模块的 FileSystemWriterAsync 类,现在直接使用上游基类。
  3. 在 tools/convert_hf_to_torch_dist.py 的 main() 中删除同类注入块(10 行):原先同时替换 filesystem_async 与 torch 两个策略模块的 FileSystemWriterAsync,现一并移除。
  4. 配套说明:无测试、配置或文档变更;行为正确性完全依赖 Megatron-LM 版本中是否包含 #74 修复。
文件 模块 状态 重要度
miles/utils/rocm_checkpoint_writer.py 工具层 removed 7.39
miles/backends/megatron_utils/model.py 后端 modified 5.82
tools/convert_hf_to_torch_dist.py 转换工具 modified 5.28

关键符号

ROCmFileSystemWriterAsync.preload_tensors initialize_model_and_optimizer tools.convert_hf_to_torch_dist.main

关键源码片段

miles/utils/rocm_checkpoint_writer.py deletion

PR 核心改动:整个文件被删除,定义的 ROCmFileSystemWriterAsync 及 preload_tensors 是此前 ROCm 检查点 workaround 的载体。

# 文件 miles/utils/rocm_checkpoint_writer.py (本 PR 已整体删除)
# 背景:PR#301 曾以子类化 FileSystemWriterAsync 的方式规避 ROCm/HIP 下
# pinned-memory 导致的 fork 段错误;该 workaround 已被 Megatron-LM#74 上游修复取代。import torch
from megatron.core.dist_checkpointing.strategies.filesystem_async import FileSystemWriterAsync
​
​
class ROCmFileSystemWriterAsync(FileSystemWriterAsync):
    """ROCm 兼容的 FileSystemWriterAsync 包装类,本 PR 中已删除。"""
​
    @staticmethod
    def preload_tensors(*args, **kwargs):
        # HIP 平台上将 non_blocking 强制改为 False,
        # 避免张量进入 pinned memory 后触发 fork 段错误。
        if torch.version.hip:
            print("HIP/ROCm detected: setting non_blocking=False in preload_tensors")
            if "non_blocking" in kwargs:
                kwargs["non_blocking"] = False
            elif len(args) > 1 and isinstance(args[-1], bool):
                # non_blocking 通常是最后一个位置参数
                args = args[:-1] + (False,)
        return FileSystemWriterAsync.preload_tensors(*args, **kwargs)

评论区精华

整体评审 other

PR 无 review 评论;评审人 guapisolo 直接批准(APPROVED,body 为空);关联 Issue Megatron-LM#74 上有 XinyuJiangCMU 的 LGTM。

结论:无需进一步修改,直接合并。 · 已解决

风险与影响

主要风险来自对上游修复的依赖:若运行环境中 Megatron-LM 版本未包含 #74 修复,ROCm/HIP 训练与 checkpoint 保存路径可能重新出现 pinned-memory 导致的 fork 段错误。受影响文件为 miles/backends/megatron_utils/model.py 与 tools/convert_hf_to_torch_dist.py,二者原先在 HIP 分支注入 workaround,删除后无本地兜底。此外,本 PR 未附带测试,ROCm 路径的回归只能依赖现有 ROCm CI(PR#1606 引入)覆盖。由于改动为纯删除,冲突风险较低,但需确认依赖版本。

用户影响:AMD/ROCm 用户的行为不变(上游修复后行为一致),但若上游版本未更新,可能回归段错误;系统影响:减少运行时对本地模块的 monkey-patch,简化维护;团队影响:消除了与上游并行维护的补丁代码,后续升级 Megatron-LM 时不再需要同步该 workaround。影响程度中等偏小,集中在 ROCm 训练与权重转换两条路径。

依赖上游修复版本 ROCm 路径回归风险 缺少直接测试覆盖

关联 Issue

#74 Tiny fix fsdp distributed update weight error

完整报告

参与讨论