{"record":{"id":"8989bf1e24a187fd","repo":"hpcaitech/Open-Sora","slug":"unknown-optimizer-optimizer-name","errorCode":null,"errorMessage":"Unknown optimizer: {optimizer_name}","messagePattern":"Unknown optimizer: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"opensora/utils/optimizer.py","lineNumber":25,"sourceCode":"def create_optimizer(\n    model: torch.nn.Module,\n    optimizer_config: dict,\n) -> torch.optim.Optimizer:\n    \"\"\"\n    Create an optimizer.\n\n    Args:\n        model (torch.nn.Module): The model to be optimized.\n        optimizer_config (dict): The configuration of the optimizer.\n\n    Returns:\n        torch.optim.Optimizer: The optimizer.\n    \"\"\"\n    optimizer_name = optimizer_config.pop(\"cls\", \"HybridAdam\")\n    if optimizer_name == \"HybridAdam\":\n        optimizer_cls = HybridAdam\n    else:\n        raise ValueError(f\"Unknown optimizer: {optimizer_name}\")\n    optimizer = optimizer_cls(\n        filter(lambda p: p.requires_grad, model.parameters()),\n        **optimizer_config,\n    )\n    return optimizer\n\n\ndef create_lr_scheduler(\n    optimizer: torch.optim.Optimizer,\n    num_steps_per_epoch: int,\n    epochs: int = 1000,\n    warmup_steps: int | None = None,\n    use_cosine_scheduler: bool = False,\n    initial_lr: float = 1e-6,\n) -> _LRScheduler | None:\n    \"\"\"\n    Create a learning rate scheduler.\n","sourceCodeStart":7,"sourceCodeEnd":43,"githubUrl":"https://github.com/hpcaitech/Open-Sora/blob/7ad6a96a135feb81f755c84fb391818718f6beb2/opensora/utils/optimizer.py#L7-L43","documentation":"This ValueError is raised by create_optimizer in opensora/utils/optimizer.py when the optimizer config's \"cls\" field (default \"HybridAdam\") is not exactly \"HybridAdam\". The factory currently supports only HybridAdam (from colossalai), so any other optimizer name is rejected. It exists to fail fast on unknown optimizer class names in training configs.","triggerScenarios":"Setting optimizer: {cls: \"AdamW\"} or {cls: \"adam\"} or any name other than \"HybridAdam\" (exact, case-sensitive) in the training config passed to create_optimizer. Omitting cls entirely is fine and defaults to HybridAdam.","commonSituations":"Porting a training script from another repo that used AdamW/Adam/SGD and copying the optimizer block into OpenSora's config; case mismatches like \"hybridadam\"; expecting the factory to support all torch.optim optimizers.","solutions":["Set cls: \"HybridAdam\" (or omit cls to use the default)","If you need another optimizer, either construct torch.optim.AdamW(model.parameters(), **kwargs) directly instead of create_optimizer, or extend create_optimizer with a mapping like {\"AdamW\": torch.optim.AdamW, \"HybridAdam\": HybridAdam}","Check exact case and whitespace in the config string"],"exampleFix":"# before\noptimizer = create_optimizer(model, {\"cls\": \"AdamW\", \"lr\": 1e-4})\n\n# after\noptimizer = torch.optim.AdamW(\n    filter(lambda p: p.requires_grad, model.parameters()), lr=1e-4\n)","handlingStrategy":"validation","validationCode":"name = optimizer_cfg.get(\"cls\", \"HybridAdam\")\nassert name == \"HybridAdam\", f\"create_optimizer only supports HybridAdam, got {name!r}; build torch.optim directly otherwise\"","typeGuard":"def is_supported_optimizer(name: str) -> bool:\n    return name == \"HybridAdam\"","tryCatchPattern":"try:\n    opt = create_optimizer(model, cfg.copy())\nexcept ValueError:\n    opt = torch.optim.AdamW(filter(lambda p: p.requires_grad, model.parameters()), **cfg)","preventionTips":["Remember create_optimizer only builds HybridAdam; bypass it for torch optimizers","Omit 'cls' rather than setting a torch optimizer name in OpenSora configs"],"tags":["optimizer","config","valueerror","training","opensora"],"backgroundTag":"unknown-optimizer-name","analyzedSha":"7ad6a96a135feb81f755c84fb391818718f6beb2","analyzedAt":"2026-08-28T16:58:37.171Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}