feat: add Mano manifold optimizer (mano_adamw)

- implement Mano (v2) with axis-rotating tangent projection and manifold normalization, replacing Newton-Schulz iteration
- composite ManoAdamW reuses partition_optimizer_parameters and composite helpers
- register mano_adamw in OptimizerFactory, export Mano and ManoAdamW
- add --mano_momentum and --mano_nesterov CLI options in Optimizer group
- add mano_adamw hyperparameters branch in train.py
- document mano_adamw in params.md
- add tests for single-step projection, axis alternation, factory registration, closure, and resume
This commit is contained in:
2026-08-01 08:51:08 +08:00
parent 6c76c16480
commit 6db276f37a
6 changed files with 367 additions and 2 deletions
+5 -1
View File
@@ -148,7 +148,11 @@ def test_parameter_partition_covers_all_model_structures(model_overrides):
def test_factory_registers_nora_default_and_legacy_muon():
assert OptimizerFactory.list_registered() == ["muon_adamw", "nora_nadamw"]
assert OptimizerFactory.list_registered() == [
"mano_adamw",
"muon_adamw",
"nora_nadamw",
]
model = AutoRegressiveLM(make_tiny_config())
optimizer = OptimizerFactory.create("nora_nadamw", model, lr=3e-4)
assert isinstance(optimizer, NoraNAdamW)