Files
modelscope--ms-swift/swift/ray/megatron/checkpoint_engine/mixin.py
T
wehub-resource-sync a203934033
Lint test / lint (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:34:58 +08:00

58 lines
2.1 KiB
Python

# Copyright (c) ModelScope Contributors. All rights reserved.
from __future__ import annotations
from typing import Optional
from .base import CheckpointEngine, MasterMetadata
class CheckpointEngineMixin:
"""Mixin providing checkpoint engine lifecycle methods for Ray actors.
Add this to Ray actors (MegatronWorker, VllmServer) to give them
checkpoint engine capabilities. The Manager calls these methods
via ``ray.remote()`` to coordinate NCCL weight sync.
Applied to ``MegatronWorker`` (send side) and ``VllmServer``
(receive side).
"""
_checkpoint_engine: Optional[CheckpointEngine] = None
_bucket_size: int = 3072 << 20
def _get_or_create_checkpoint_engine(self) -> CheckpointEngine:
"""Get or create the checkpoint engine instance (lazy singleton)."""
if self._checkpoint_engine is None:
from transformers.utils import is_torch_npu_available
if is_torch_npu_available():
from .hccl import HCCLCheckpointEngine
self._checkpoint_engine = HCCLCheckpointEngine(self._bucket_size, rebuild_group=False)
else:
from .nccl import NCCLCheckpointEngine
self._checkpoint_engine = NCCLCheckpointEngine(self._bucket_size)
return self._checkpoint_engine
def prepare_checkpoint_engine(self, is_master: bool) -> Optional[MasterMetadata]:
"""Prepare checkpoint engine for weight sync."""
engine = self._get_or_create_checkpoint_engine()
engine.is_master = is_master
return engine.prepare()
def init_checkpoint_process_group(
self,
rank: int,
world_size: int,
master_metadata: MasterMetadata,
) -> None:
engine = self._get_or_create_checkpoint_engine()
engine.init_process_group(
rank=rank,
world_size=world_size,
master_metadata=master_metadata,
)
def finalize_checkpoint_engine(self) -> None:
"""Finalize checkpoint engine: release buffers, optionally destroy group."""
if self._checkpoint_engine is not None:
self._checkpoint_engine.finalize()