microsoft/qlib · error · NotImplementedError
optimizer {} is not supported!
Error message
optimizer {} is not supported! What it means
Raised in GRUModelTS.__init__ (the time-series GRU variant) when `optimizer` is not "adam" or "gd". Same two-optimizer whitelist as the non-TS GRU; the check is case-insensitive and fires at model construction.
Source
Thrown at qlib/contrib/model/pytorch_gru_ts.py:132
if self.seed is not None:
np.random.seed(self.seed)
torch.manual_seed(self.seed)
self.GRU_model = GRUModel(
d_feat=self.d_feat,
hidden_size=self.hidden_size,
num_layers=self.num_layers,
dropout=self.dropout,
)
self.logger.info("model:\n{:}".format(self.GRU_model))
self.logger.info("model size: {:.4f} MB".format(count_parameters(self.GRU_model)))
if optimizer.lower() == "adam":
self.train_optimizer = optim.Adam(self.GRU_model.parameters(), lr=self.lr)
elif optimizer.lower() == "gd":
self.train_optimizer = optim.SGD(self.GRU_model.parameters(), lr=self.lr)
else:
raise NotImplementedError("optimizer {} is not supported!".format(optimizer))
self.fitted = False
self.GRU_model.to(self.device)
@property
def use_gpu(self):
return self.device != torch.device("cpu")
def mse(self, pred, label, weight):
loss = weight * (pred - label) ** 2
return torch.mean(loss)
def loss_fn(self, pred, label, weight=None):
mask = ~torch.isnan(label)
if weight is None:
weight = torch.ones_like(label)
View on GitHub (pinned to 79633dd950)
Solutions
- Use optimizer="adam" or optimizer="gd".
- Subclass GRUModelTS and assign a custom torch optimizer after super().__init__ if you need another algorithm.
Example fix
# before GRUModelTS(optimizer="adamw", lr=1e-3) # after GRUModelTS(optimizer="adam", lr=1e-3)
Defensive patterns
Strategy: validation
Validate before calling
assert params["optimizer"].lower() in {"adam", "gd"}, "GRUModelTS supports only 'adam' and 'gd'" Type guard
def is_supported_optimizer(name: str) -> bool:
return isinstance(name, str) and name.lower() in {"adam", "gd"} Try / catch
try:
model = GRUModelTS(**params)
except NotImplementedError as e:
if "optimizer" in str(e):
params["optimizer"] = "adam"
model = GRUModelTS(**params)
else:
raise Prevention
- Use 'gd' for SGD-family optimizers in qlib pytorch models.
- Validate constructor hyper-parameters before launching runs.
When it happens
Trigger: GRUModelTS(optimizer="sgd"/"adamw"/"rmsprop", ...). Constructing the model in a workflow's model init immediately raises NotImplementedError.
Common situations: Reusing a config written for LightGBM/XGBoost handlers where optimizer names differ; using "sgd" instead of qlib's "gd" alias.
Related errors
- optimizer {} is not supported!
- optimizer {} is not supported!
- optimizer {} is not supported!
- optimizer {} is not supported!
- optimizer {} is not supported!
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/3a0cbf143fcbc06d.
Report an issue: GitHub.