microsoft/qlib · error · NotImplementedError

optimizer {} is not supported!

Error message

optimizer {} is not supported!

What it means

KRNNModel accepts only 'adam' (optim.Adam) and 'gd' (optim.SGD), case-insensitive. Any other optimizer string raises NotImplementedError at the end of __init__, so construction fails immediately.

Source

Thrown at qlib/contrib/model/pytorch_krnn.py:340

            np.random.seed(self.seed)
            torch.manual_seed(self.seed)

        self.krnn_model = KRNNModel(
            fea_dim=self.fea_dim,
            cnn_dim=self.cnn_dim,
            cnn_kernel_size=self.cnn_kernel_size,
            rnn_dim=self.rnn_dim,
            rnn_dups=self.rnn_dups,
            rnn_layers=self.rnn_layers,
            dropout=self.dropout,
            device=self.device,
        )
        if optimizer.lower() == "adam":
            self.train_optimizer = optim.Adam(self.krnn_model.parameters(), lr=self.lr)
        elif optimizer.lower() == "gd":
            self.train_optimizer = optim.SGD(self.krnn_model.parameters(), lr=self.lr)
        else:
            raise NotImplementedError("optimizer {} is not supported!".format(optimizer))

        self.fitted = False
        self.krnn_model.to(self.device)

    @property
    def use_gpu(self):
        return self.device != torch.device("cpu")

    def mse(self, pred, label):
        loss = (pred - label) ** 2
        return torch.mean(loss)

    def loss_fn(self, pred, label):
        mask = ~torch.isnan(label)

        if self.loss == "mse":
            return self.mse(pred[mask], label[mask])

View on GitHub (pinned to 79633dd950)

Solutions

  1. Use optimizer='adam' or optimizer='gd'
  2. For other optimizers, subclass KRNNModel and add a branch

Example fix

# before
KRNNModel(optimizer="sgd")  # raises

# after
KRNNModel(optimizer="gd")  # maps to optim.SGD
Defensive patterns

Strategy: validation

Validate before calling

assert optimizer.lower() in ("adam", "gd"), f"KRNN supports adam/gd only, got {optimizer!r}"

Type guard

def is_supported_optimizer(name: str) -> bool:
    return name.lower() in ("adam", "gd")

Prevention

When it happens

Trigger: KRNNModel(optimizer='adamw'|'rmsprop'|'sgd'|typo) — note 'sgd' is NOT accepted, the literal string is 'gd'.

Common situations: Assuming 'sgd' is the spelling for stochastic gradient descent (this file wants 'gd'); hyperparameter grids written for other frameworks.

Related errors


AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15). Data as JSON: /api/errors/8cde5c7e4c4fce3f. Report an issue: GitHub.