Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

RecursionError when initializing KumoTabular with pretrained=True after #1153

Abierto Apto para principiantes
#1,156 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
74/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python, pytorch

Línea de trabajo

Empieza en sdm/models/kumo/tabular/model.py, en el constructor de KumoTabular alrededor de la línea 139, donde la rama pretrained asigna self.models[task] a partir de _load_from_pretrained(), y lee ese método para confirmar que devuelve self y que carga los pesos en su lugar. Elimina la asignación para que la llamada solo cargue los pesos, y luego construye el modelo con pretrained=True para confirmar que self.eval() se completa. Está terminado cuando esa construcción se realiza sin un RecursionError; también deberían pasar los tests existentes del modelo tabular.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Description

Initializing KumoTabular with pretrained=True raises a
RecursionError during the constructor's self.eval() call.

This appears to be a regression introduced by #1153.

Reproduction

model = sdm.models.KumoTabular(
    task="classification",
    size="large",
    pretrained=True,
    device=device,
)

Actual behavior

Initialization fails with:

File sdm/models/kumo/tabular/model.py:139, in KumoTabular.__init__
    self.eval()

File torch/nn/modules/module.py, in Module.eval
    return self.train(False)

RecursionError: maximum recursion depth exceeded

Expected behavior

The pretrained model should initialize successfully in evaluation mode.

Suspected cause

#1153 changed _load_from_pretrained() to return self rather than
an individual task model, but the constructor still assigns its return
value to a child module:

self.models[task] = self._load_from_pretrained(size, device=device)

This effectively executes self.models[task] = self, creating a circular
module reference:

KumoTabular -> models -> KumoTabular

The subsequent self.eval() recursively traverses this cycle.

Suggested fix

Remove the assignment in the constructor:

 if pretrained:
-    self.models[task] = self._load_from_pretrained(size, device=device)
+    self._load_from_pretrained(size, device=device)

The loader already loads the weights into each task model in place via
model.load_state_dict(ckpt, assign=True).

Environment

  • Python: 3.12
  • Installation: local source checkout
  • Related PR: #1153
Lenguaje dominante
Python
Estrellas
358
Forks
33
Merge medio
1 d 7 h
PR fusionados (30 d)
182

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de NVIDIA/structured-data-models

Todos los issues de NVIDIA/structured-data-models

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.