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
- Use optimizer='adam' or optimizer='gd'
- 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
- Note the accepted SGD spelling is 'gd', not 'sgd'
- Validate optimizer strings from search grids before model construction
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
- optimizer {} is not supported!
- unknown loss `%s`
- unknown metric `%s`
- optimizer {} is not supported!
- This type of input {rtype} is not supported
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/8cde5c7e4c4fce3f.
Report an issue: GitHub.