Saltar al contenido principal

Ejemplos de Flujo de Trabajo

Entrenar un Modelo​

Este ejemplo recorre el proceso completo de entrenamiento de un modelo de clasificación de texto, desde la interacción del usuario hasta los resultados finales.

Paso 1: Crear una Sesión de Modelo​

El usuario selecciona un dataset, una tarea, columnas de entrada/salida, métricas y divisiones de datos en el frontend. El frontend envía:

POST /api/v1/model-session/
{
"dataset_id": 1,
"task_name": "TextClassification",
"input_columns": ["text"],
"output_columns": ["label"],
"train_metrics": ["Accuracy", "F1"],
"validation_metrics": ["Accuracy"],
"test_metrics": ["Accuracy"],
"splits": { "train": 0.7, "validation": 0.15, "test": 0.15 }
}

La API crea un registro ModelSession en la base de datos y devuelve su ID.

Paso 2: Crear una Ejecución​

El usuario selecciona un modelo, configura sus parámetros y opcionalmente selecciona un optimizador de hiperparámetros. El frontend envía:

POST /api/v1/run/
{
"model_session_id": 1,
"model_name": "DistilBertTransformer",
"parameters": { "learning_rate": 1e-5, "num_epochs": 3 },
"optimizer_name": null,
"optimizer_parameters": {},
"goal_metric": "F1",
"name": "DistilBERT run"
}

La API crea un registro Run con estado NOT_STARTED.

Paso 3: Encolar el Trabajo de Entrenamiento​

El frontend solicita la ejecución del trabajo:

POST /api/v1/job/
{
"job_type": "ModelJob",
"kwargs": { "run_id": 1 }
}

La API instancia un ModelJob con el run_id dado, llama a job_queue.put(job) y devuelve el ID del trabajo Huey al frontend de inmediato.

Paso 4: Ejecución en Segundo Plano​

El consumidor Huey recoge el ModelJob y llama a job.run(). Dentro de run():

  1. Cargar los registros Run, ModelSession y Dataset desde la base de datos.
  2. Cargar el dataset desde su archivo Arrow.
  3. Instanciar la clase Task (p. ej., TextClassification) y llamar a prepare_for_task() para validar y formatear los datos.
  4. Dividir los datos en subconjuntos de entrenamiento/validación/test según las proporciones de división de la sesión.
  5. Instanciar la clase Model (p. ej., DistilBertTransformer) con los parámetros del usuario mediante validate_and_transform().
  6. Llamar a model.train(x_train, y_train, x_val, y_val).
  7. Para cada división (entrenamiento, validación, test), llamar a model.calculate_metrics(), que calcula todas las métricas seleccionadas y las almacena en la tabla Metric.
  8. Guardar el modelo entrenado en disco en ~/.DashAI/runs/{run_id}/.
  9. Actualizar el estado de Run de STARTED a FINISHED.

Si se ha configurado un optimizador de hiperparámetros, el paso 6 se reemplaza por optimizer.optimize(), que ejecuta múltiples pruebas, registra métricas por prueba (LevelEnum.TRIAL) y genera gráficos de visualización Plotly (historial, slice, contorno, importancia) guardados junto a la ejecución.

Paso 5: Recuperar Resultados​

El frontend consulta el estado hasta la finalización y recupera los resultados:

GET /api/v1/job/status/{job_id}         # Consultar hasta finalizar
GET /api/v1/run/{run_id} # Obtener detalles de la ejecución con métricas
GET /api/v1/run/plot/{run_id}/history # Obtener gráficos de optimización (si aplica)

El frontend muestra las métricas y cualquier visualización de optimización al usuario.


Crear un Gráfico para un Dataset​

Este ejemplo muestra cómo un usuario crea una exploración de gráfico de dispersión para un dataset.

Paso 1: Seleccionar un Explorador​

El frontend obtiene los exploradores disponibles del registro:

GET /api/v1/component/?select_types=["Explorer"]

La respuesta incluye los esquemas de los componentes, por lo que el frontend puede renderizar formularios de configuración dinámicamente. El usuario selecciona ScatterPlotExplorer.

Paso 2: Configurar y Lanzar la Exploración​

El usuario selecciona columnas y establece parámetros (p. ej., mapeo de color). El frontend valida los parámetros del explorador:

POST /api/v1/explorer/validate
{
"exploration_type": "ScatterPlotExplorer",
"columns": ["sepal_length", "sepal_width"],
"parameters": { "color": "species" }
}

Tras la validación, el frontend crea el explorador y encola el trabajo:

POST /api/v1/explorer/
{
"notebook_id": 1,
"exploration_type": "ScatterPlotExplorer",
"columns": ["sepal_length", "sepal_width"],
"parameters": { "color": "species" }
}

Esto crea un registro Explorer en la base de datos y encola un ExplorerJob.

Paso 3: Ejecución en Segundo Plano​

El consumidor Huey recoge el ExplorerJob y llama a job.run():

  1. Cargar el registro Explorer y el dataset asociado.
  2. Instanciar el componente ScatterPlotExplorer.
  3. Llamar a explorer.launch_exploration(dataset, explorer_info), que genera la visualización.
  4. Llamar a explorer.save_notebook() para persistir la exploración como un notebook.
  5. Llamar a explorer.get_results() para extraer la salida renderizable.
  6. Guardar los resultados en disco y actualizar el estado del Explorer a FINISHED.

Paso 4: Mostrar Resultados​

El frontend recupera los resultados de la exploración:

GET /api/v1/explorer/{explorer_id}/results

La respuesta contiene los datos del gráfico (típicamente una especificación JSON de Plotly), que el frontend renderiza como una visualización interactiva.