Entrena un modelo con AutoML de extremo a extremo

En esta página, se muestra cómo entrenar un modelo de clasificación o regresión a partir de un conjunto de datos tabular con flujo de trabajo tabular para AutoML de extremo a extremo.

Antes de comenzar

Antes de entrenar un modelo, debes completar lo siguiente:

Si recibes un error relacionado con las cuotas mientras ejecutas el flujo de trabajo tabular para AutoML de extremo a extremo, es posible que debas solicitar una cuota más alta. Para obtener más información, consulta Administra cuotas para Workflows tabulares.

Obtén el URI del resultado de ajuste de hiperparámetros anterior

Si completaste una ejecución de flujo de trabajo de AutoML de extremo a extremo, puedes usar el resultado del ajuste de hiperparámetros de una ejecución anterior para ahorrar tiempo y recursos de entrenamiento. Puedes encontrar el resultado del ajuste de hiperparámetros anterior con la consola de Google Cloud o cargarlo de manera programática mediante la API.

Consola de Google Cloud

Para encontrar el URI de resultado de ajuste de hiperparámetros mediante la consola de Google Cloud, sigue estos pasos:

  1. En la sección Vertex AI de la consola de Google Cloud, ve a la página Canalizaciones.

    Ir a la página Canalizaciones

  2. Selecciona la pestaña Ejecuciones.

  3. Selecciona la ejecución de la canalización que deseas usar.

  4. Selecciona Expandir artefactos.

  5. Haz clic en el componente exit-handler-1.

  6. Haz clic en el componente stage_1_tuning_result_artifact_uri_empty.

  7. Busca el componente automl-tabular-cv-trainer-2.

  8. Haz clic en el artefacto asociado tuning_result_output.

  9. Selecciona la pestaña Información del nodo.

  10. Copia el URI para usarlo en el paso Entrena un modelo.

resultado de la búsqueda de arquitectura

API: Python

En el código de muestra siguiente, se demuestra cómo puedes cargar el resultado del ajuste de hiperparámetros mediante la API. La variable job hace referencia a la ejecución de la canalización de entrenamiento del modelo anterior.


def get_task_detail(
  task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
  for task_detail in task_details:
      if task_detail.task_name == task_name:
          return task_detail

pipeline_task_details = job.gca_resource.job_detail.task_details

stage_1_tuner_task = get_task_detail(
    pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
    stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)

Entrenar un modelo

Consola de Google Cloud

Para entrenar un modelo con la consola de Google Cloud, sigue estos pasos:

  1. En la sección Vertex AI de la consola de Google Cloud, ve a la página Canalizaciones.

    Ir a la página Canalizaciones

  2. Selecciona la pestaña Galería de plantillas.

  3. En la tarjeta AutoML para regresión/clasificación tabular, haz clic en Crear ejecución.

  4. En la página Detalles del modelo, configura lo siguiente:

    1. Ingresa un nombre de ejecución de la canalización.
    2. Opcional: Si deseas establecer la cuenta de servicio de Vertex AI Pipelines o la Cuenta de servicio de trabajador de Dataflow, abre las Opciones avanzadas. Más información sobre las cuentas de servicio.
    3. Haz clic en Continuar.

  5. En la página Configuración del entorno de ejecución, configura lo siguiente:

    1. Ingresa un bucket de Cloud Storage o una carpeta dentro del bucket para usar como directorio de salida raíz. Este directorio se usará para guardar archivos intermedios, como el conjunto de datos materializado y el modelo. Recuerda limpiar el directorio después de que se complete el entrenamiento y el modelo y otros artefactos importantes se copien en otro bucket de Cloud Storage. De manera alternativa, configura un tiempo de actividad (TTL) para el bucket de Cloud Storage.

      Los buckets del proyecto se enumeran en la sección Cloud Storage de la consola de Google Cloud.

      Ir a la página Buckets

    2. Haz clic en Continuar.

  6. En la página Método de entrenamiento, configura lo siguiente:

    1. Selecciona el nombre del conjunto de datos que deseas usar para entrenar tu modelo.
    2. Selecciona la columna objetivo. La columna objetivo es el valor que el modelo predecirá. Obtén más información sobre los requisitos de las columnas de destino.
    3. Ingresa el nombre visible de tu modelo nuevo.
    4. Opcional: Para elegir cómo dividir los datos entre conjuntos de entrenamiento, prueba y validación, abre las Opciones avanzadas. Puedes elegir entre las siguientes opciones de división de datos:
      • Aleatoria (predeterminada): Vertex AI selecciona de forma aleatoria las filas asociadas con cada conjunto de datos. De forma predeterminada, Vertex AI selecciona de forma aleatoria el 80% de tus filas de datos para el conjunto de entrenamiento, el 10% para el conjunto de validación y el 10% para el conjunto de prueba. Establece el porcentaje de filas de datos que deseas asociar con cada uno de los conjuntos de datos.
      • Manual: Vertex AI selecciona filas de datos para cada uno de los conjuntos de datos según los valores de una columna de división de datos. Proporciona el nombre de la columna de división de datos.
      • Cronológico: Vertex AI divide los datos en función de la marca de tiempo en una columna de tiempo. Proporciona el nombre de la columna de tiempo. También puedes configurar el porcentaje de filas de datos que deseas asociar con el conjunto de entrenamiento, el conjunto de validación y el conjunto de prueba.
      • Estratificado: Vertex AI selecciona de forma aleatoria las filas asociadas con cada conjunto de datos, pero conserva la distribución de los valores de las columnas de destino. Proporciona el nombre de la columna de destino. También puedes configurar el porcentaje de filas de datos que deseas asociar con el conjunto de entrenamiento, el conjunto de validación y el conjunto de prueba.
      Obtén más información sobre las divisiones de datos.
    5. Opcional: Puedes ejecutar la canalización sin la búsqueda de arquitectura. Si eliges Omitir búsqueda de arquitectura, se te solicitará que proporciones un conjunto de hiperparámetros de una ejecución de canalización anterior en la página Opciones de entrenamiento.
    6. Haz clic en Continuar.

  7. En la página Opciones de entrenamiento, configura lo siguiente:

    1. Opcional: Haz clic en Generar estadísticas. La generación de estadísticas propaga los menús desplegables de Transformación.
    2. Revisa la lista de columnas y excluye las columnas del entrenamiento que no se deberían usar para entrenar el modelo.
    3. Revisa las transformaciones seleccionadas para los atributos incluidos, junto con la posibilidad de permitir datos no válidos y realiza las actualizaciones necesarias. Obtén más información sobre las transformaciones y los datos no válidos.
    4. Si eliges omitir la búsqueda de arquitectura en la página Método de entrenamiento, proporciona la ruta al resultado del ajuste de hiperparámetros de una ejecución de canalización anterior.
    5. Opcional: Si deseas especificar la columna de ponderación, abre las Opciones avanzadas y realiza tu selección. Obtén más información sobre las columnas de ponderación.
    6. Opcional: Si deseas cambiar tu objetivo de optimización de la configuración predeterminada, abre las Opciones avanzadas y realiza tu selección. Obtén más información sobre los objetivos de optimización.
    7. Opcional: Si eliges realizar la búsqueda de arquitectura en la página Método de entrenamiento, puedes especificar la cantidad de pruebas paralelas. Abre las Opciones avanzadas y, luego, ingresa tu valor.
    8. Opcional: Puedes proporcionar valores fijos para un subconjunto de hiperparámetros. Vertex AI busca los valores óptimos de los hiperparámetros restantes no fijos. Esta es una buena opción si tienes preferencia por el tipo de modelo. Puedes elegir entre redes neuronales y árboles con boosting para el tipo de modelo. Abre las Opciones avanzadas y proporciona una anulación de las especificaciones del estudio en formato JSON.

      Por ejemplo, si deseas establecer el tipo de modelo como redes neuronales (NN), ingresa lo siguiente:

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. Haz clic en Continuar.

  8. En la página Procesamiento y precios, realiza la configuración de la siguiente manera:

    1. Ingresa el número máximo de horas para las que deseas que se entrene el modelo. Más información sobre los precios.
    2. Opcional: En la sección Configuración de procesamiento, puedes configurar los tipos de máquinas y la cantidad de máquinas para cada etapa del flujo de trabajo. Esta es una buena opción si tienes un conjunto de datos grande y deseas optimizar el hardware de la máquina según corresponda.

  9. Haz clic en Enviar.

API: Python

En el siguiente código de muestra, se ilustra cómo puedes ejecutar una canalización de entrenamiento de modelos:

job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

El parámetro service_account opcional en job.run() te permite configurar la cuenta de servicio de Vertex AI Pipelines en una cuenta que elijas.

La canalización y los valores de los parámetros se definen mediante la siguiente función. Los datos de entrenamiento pueden ser un archivo CSV en Cloud Storage o una tabla en BigQuery.

template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)

El siguiente es un subconjunto de parámetros get_automl_tabular_pipeline_and_parameters:

Nombre del parámetro Tipo Definición
data_source_csv_filenames String Un URI para un archivo CSV almacenado en Cloud Storage.
data_source_bigquery_table_path String Un URI para una tabla de BigQuery.
dataflow_service_account String Cuenta de servicio personalizada para ejecutar trabajos de Dataflow (opcional). El trabajo de Dataflow se puede configurar para usar IP privadas y una subred de VPC específica. Este parámetro actúa como una anulación para la cuenta de servicio predeterminada del trabajador de Dataflow.
prediction_type String Elige classification para entrenar un modelo de clasificación o regression para entrenar un modelo de regresión.
optimization_objective String Si entrenas un modelo de clasificación binaria, el objetivo predeterminado es el AUC de ROC. Si estás entrenando un modelo de regresión, el objetivo predeterminado es RMSE. Si deseas un objetivo de optimización diferente para tu modelo, elige una de las opciones en Objetivos de optimización para los modelos de regresión o clasificación.
enable_probabilistic_inference Booleano Si entrenas un modelo de regresión y estableces este valor en true, Vertex AI modela la distribución de probabilidad de la predicción. La inferencia probabilística puede mejorar la calidad del modelo; para ello, se manejan los datos contaminados y la cuantificación de la incertidumbre. Si se especifican quantiles, Vertex AI también muestra los cuantiles de la distribución.
quantiles List[float] Cuantiles que se usarán para la inferencia probabilística. Un cuantil indica la probabilidad de que un objetivo sea inferior a un valor determinado. Proporciona una lista de hasta cinco números únicos entre 0 y 1, excluyentes.

Opciones de personalización del flujo de trabajo

Puedes personalizar el flujo de trabajo de AutoML de extremo a extremo si defines valores de argumento que se pasan durante la definición de la canalización. Puedes personalizar tu flujo de trabajo de las siguientes maneras:

  • Anula el espacio de la búsqueda
  • Configura hardware
  • Sintetiza el modelo
  • Omitir la búsqueda de arquitectura

Anula el espacio de la búsqueda

El siguiente parámetro get_automl_tabular_pipeline_and_parameters te permite proporcionar valores fijos para un subconjunto de hiperparámetros. Vertex AI busca los valores óptimos de los hiperparámetros restantes no fijos. Usa este parámetro si deseas elegir entre redes neuronales y árboles mejorados para tu tipo de modelo.

Nombre del parámetro Tipo Definición
study_spec_parameters_override List[Dict[String, Any]] Subconjunto de hiperparámetros personalizado (opcional). Este parámetro configura el componente automl-tabular-stage-1-tuner de la canalización.

En el siguiente código, se muestra cómo establecer el tipo de modelo como Redes neuronales (NN):

study_spec_parameters_override = [
  {
    "parameter_id": "model_type",
    "categorical_value_spec": {
      "values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
    }
  }
]

Configura hardware

Los siguientes parámetros de get_automl_tabular_pipeline_and_parameters te permiten configurar los tipos de máquinas y la cantidad de máquinas para entrenamiento. Esta es una buena opción si tienes un conjunto de datos grande y deseas optimizar el hardware de la máquina según corresponda.

Nombre del parámetro Tipo Definición
stage_1_tuner_worker_pool_specs_override Dict[String, Any] La configuración personalizada de los tipos de máquinas y la cantidad de máquinas para entrenamiento (opcional). Este parámetro configura el componente automl-tabular-stage-1-tuner de la canalización.
cv_trainer_worker_pool_specs_override Dict[String, Any] La configuración personalizada de los tipos de máquinas y la cantidad de máquinas para entrenamiento (opcional). Este parámetro configura el componente automl-tabular-stage-1-tuner de la canalización.

En el siguiente código, se muestra cómo configurar el tipo de máquina n1-standard-8 para el nodo principal de TensorFlow y el tipo de máquina n1-standard-4 para el nodo evaluador de TensorFlow:

worker_pool_specs_override = [
  {"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
  {},  # override for TF worker node, since it's not used, leave it empty
  {},  # override for TF ps node, since it's not used, leave it empty
  {
    "machine_spec": {
        "machine_type": "n1-standard-4" # override for TF evaluator node
    }
  }
]

Sintetiza el modelo

El siguiente parámetro get_automl_tabular_pipeline_and_parameters te permite crear una versión más pequeña del modelo de ensamble. Un modelo más pequeño reduce la latencia y el costo de la predicción.

Nombre del parámetro Tipo Definición
run_distillation Booleano Si es TRUE, crea una versión más pequeña del modelo de ensamble.

Omitir la búsqueda de arquitectura

En el siguiente parámetro de get_automl_tabular_pipeline_and_parameters, puedes ejecutar la canalización sin la búsqueda de arquitectura y proporcionar un conjunto de hiperparámetros de una ejecución de canalización anterior.

Nombre del parámetro Tipo Definición
stage_1_tuning_result_artifact_uri String El URI del resultado del ajuste de hiperparámetros de una ejecución de canalización anterior (opcional).

Objetivos de optimización para los modelos de regresión o clasificación

Cuando entrenas un modelo, Vertex AI selecciona un objetivo de optimización predeterminado según el tipo de modelo y el tipo de datos que se usa para la columna objetivo.

Los modelos de clasificación son mejores para los siguientes casos:
Objetivo de optimización Valor de la API Usa este objetivo si quieres…
AUC ROC maximize-au-roc Maximizar área bajo la curva de característica operativa del receptor (ROC). Distingue las clases. Valor predeterminado para la clasificación binaria.
Pérdida logística minimize-log-loss Mantener las probabilidades de predicción lo más precisas posible. Solo es compatible con la clasificación de clases múltiples.
AUC PR maximize-au-prc Maximizar área debajo de la curva de precisión-recuperación. Optimiza los resultados para las predicciones de la clase menos común.
Precisión en recuperación maximize-precision-at-recall Optimizar la precisión en un valor de recuperación específico.
Recuperación en precisión maximize-recall-at-precision Optimizar la recuperación con un valor de precisión específico.
Los modelos de regresión son mejores para los siguientes casos:
Objetivo de optimización Valor de la API Usa este objetivo si quieres…
RMSE minimize-rmse Minimiza raíz cuadrada del error cuadrático medio (RMSE). Captura valores más extremos con exactitud. Valor predeterminado
MAE minimize-mae Minimizar el error absoluto promedio (MAE) Observa los valores extremos como valores atípicos con un impacto menor en el modelo.
RMSLE minimize-rmsle Minimizar el error de registro de la raíz cuadrada de la media (RMSLE) Penaliza errores de tamaño relativo en lugar de valor absoluto. Es útil cuando los valores previstos y reales pueden ser bastante grandes.

¿Qué sigue?