"""Pretrain Qwen3-30B-A3B on a single 8-GPU H200/B200 node with 8-way expert parallelism.""" from functools import partial from pathlib import Path from pithtrain.modules.training import make_muon_optimizer, make_wsd_scheduler from pithtrain.tasks.pretrain_lm import PretrainLMCfg, launch cfg = PretrainLMCfg() distributed = cfg.distributed distributed.context_parallel_size = 1 distributed.pipeline_parallel_size = 1 distributed.expert_parallel_size = 8 training = cfg.training training.model = Path("examples/pretrain_lm/qwen3-30b-a3b/config.json") training.optimizer = make_muon_optimizer kwargs = dict(start_lr=1.0e-5, warmup_ratio=0.03, final_lr=1.0e-5) training.scheduler = partial(make_wsd_scheduler, **kwargs) training.lr = 3.0e-4 training.max_steps = 4096 training.micro_batch_size = 1 training.global_batch_size = 1024 training.sequence_length = 2048 training.dataset = Path("workspace/datasets/dclm-baseline/toktxt/qwen3") training.moe_load_balance_type = "global-batch" training.moe_load_balance_coef = 1e-3 training.fp8 = False training.save_interval = 256 training.save_location = Path("workspace/checkpoints/qwen3-30b-a3b") if __name__ == "__main__": launch(cfg)