refactor: inline parallel utils into executor module

- Move create_ref_model from astrai/parallel/utils.py into executor.py
- Remove unused ColumnParallelLinear/RowParallelLinear (module.py)
- Update imports in strategy.py and train_context.py
- Drop unused astrai.parallel.utils and astrai.parallel.module
This commit is contained in:
2026-07-30 07:54:54 +08:00
parent c8b1e40f71
commit 6a97524db4
6 changed files with 28 additions and 157 deletions
+26 -1
View File
@@ -4,7 +4,7 @@ import contextlib
import logging
import os
from contextlib import contextmanager
from typing import Any, Callable, Optional, Tuple
from typing import Any, Callable, Dict, Optional, Tuple
import torch
import torch.distributed as dist
@@ -24,6 +24,31 @@ from astrai.parallel.setup import get_rank, get_world_size
logger = logging.getLogger(__name__)
def create_ref_model(
model_fn: Callable[[], nn.Module],
executor: Optional["BaseExecutor"] = None,
model: Optional[nn.Module] = None,
state_dict: Optional[Dict[str, torch.Tensor]] = None,
device: Optional[str] = None,
) -> Optional[nn.Module]:
"""Create a frozen reference model from executor or state dict.
On non-rank-0, returns None (executor.unwrap_model returns None).
"""
if state_dict is None and executor is not None and model is not None:
state_dict = executor.unwrap_model(model)
if state_dict is None:
return None
ref_model = model_fn()
ref_model.load_state_dict(state_dict)
ref_model.requires_grad_(False)
ref_model.eval()
if device is not None:
ref_model = ref_model.to(device=device)
return ref_model
class GradientState:
def __init__(self, grad_accum_steps: int = 1):
self.num_steps = max(grad_accum_steps, 1)