import torch
from megatron.core.dist_checkpointing.strategies.filesystem_async import FileSystemWriterAsync
class ROCmFileSystemWriterAsync(FileSystemWriterAsync):
"""
FileSystemWriterAsync wrapper for ROCm compatibility.
On ROCm/HIP, using non_blocking=True causes tensors to be stored in pinned memory,
which triggers segmentation faults when forking subprocesses afterward.
"""
@staticmethod
def preload_tensors(*args, **kwargs):
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):
args = args[:-1] + (False,)
return FileSystemWriterAsync.preload_tensors(*args, **kwargs)