Quintus / src /optim.py
iamrahulreddy's picture
release: publish Quintus project files
4fc1bb9 verified
Raw
History Blame Contribute Delete
1.79 kB
from __future__ import annotations
import torch
from configs import cfg
def fused_adamw_preflight(logger) -> bool:
if not torch.cuda.is_available():
logger.info(" Optimizer: fused AdamW requested but CUDA is unavailable; using standard AdamW")
return False
try:
probe = torch.nn.Parameter(torch.ones(8, device="cuda", dtype=torch.bfloat16))
probe_optim = torch.optim.AdamW([probe], lr=1.0e-4, fused=True)
loss = probe.float().square().sum()
loss.backward()
probe_optim.step()
probe_optim.zero_grad(set_to_none=True)
del loss, probe_optim, probe
return True
except Exception as exc:
logger.warning(f" Optimizer: fused AdamW preflight failed ({exc}); using standard AdamW")
return False
def build_adamw_optimizer(params: list[torch.nn.Parameter], logger, allow_fused: bool) -> torch.optim.Optimizer:
kwargs = {
"lr": cfg.training.learning_rate,
"weight_decay": cfg.training.weight_decay,
"betas": (0.9, 0.999),
}
fused_requested = bool(getattr(cfg.training, "fused_adamw", False)) and allow_fused
if fused_requested and fused_adamw_preflight(logger):
try:
optimizer = torch.optim.AdamW(params, **kwargs, fused=True)
logger.info(" Optimizer: AdamW fused=True")
return optimizer
except Exception as exc:
logger.warning(f" Optimizer: fused AdamW construction failed ({exc}); using standard AdamW")
elif bool(getattr(cfg.training, "fused_adamw", False)) and not allow_fused:
logger.info(" Optimizer: fused AdamW disabled for DeepSpeed")
optimizer = torch.optim.AdamW(params, **kwargs)
logger.info(" Optimizer: AdamW standard")
return optimizer