Entrena mediante el algoritmo integrado y distribuido XGBoost

El entrenamiento mediante algoritmos integrados en AI Platform Training te permite enviar el conjunto de datos y entrenar un modelo sin escribir ningún código de entrenamiento. En esta página, se explica cómo funciona el algoritmo integrado y distribuido XGBoost y cómo usarlo.

Descripción general

El algoritmo integrado y distribuido XGBoost es un wrapper destinado al algoritmo XGBoost que se puede ejecutar en AI Platform Training.

A diferencia del algoritmo integrado XGBoost de réplica única, este algoritmo te permite usar varias máquinas virtuales en paralelo para realizar entrenamientos en conjuntos de datos grandes. Este algoritmo también te permite usar GPU para el entrenamiento, lo que puede acelerar dicho proceso.

AI Platform Training ejecuta el entrenamiento mediante el algoritmo distribuido XGBoost en función de tu conjunto de datos y los parámetros del modelo que proporcionaste. La implementación actual se basa en la versión 0.81 de XGBoost.

Limitaciones

Las siguientes características no son compatibles para el entrenamiento con el algoritmo integrado y distribuido XGBoost:

Tipos de máquina admitidos

Con este algoritmo, puedes usar cualquier combinación válida de tipos de máquinas o nivel de escala de AI Platform Training, siempre y cuando la configuración cumpla con los siguientes requisitos:

  • Especifica un trabajador principal y, al menos, un trabajador.
  • Si deseas obtener el mejor rendimiento, especifica el mismo tipo de máquina para el trabajador principal y los trabajadores.
  • No especifiques ningún servidor de parámetros.
  • Asegúrate de que la memoria total de las máquinas virtuales que especificas sea, por lo menos, un 20% mayor que el tamaño total del archivo de los datos de entrenamiento. Esto permite que las máquinas virtuales carguen todos los datos de entrenamiento en la memoria y, además, que usen una memoria adicional para el entrenamiento.
  • Si usas GPU, asegúrate de que cada máquina virtual use solo una GPU y de usar el mismo tipo de GPU para el trabajador principal y los trabajadores. Asegúrate de que el tipo de máquina que especificaste sea compatible con la configuración de la GPU.
  • No uses ninguna TPU.

Establece el formato de los datos de entrada

El algoritmo integrado y distribuido XGBoost funciona con datos tabulares numéricos. Cada fila de un conjunto de datos representa una instancia, y cada columna de un conjunto de datos representa un valor de atributo. La columna de destino representa el valor que deseas predecir.

Prepara archivos CSV

Los datos de entrada deben ser uno o más archivos CSV con codificación UTF-8. Cada archivo debe cumplir con los siguientes requisitos:

  • Los archivos CSV no deben tener ninguna fila de encabezado. Si los archivos CSV tienen filas de encabezado que etiquetan cada columna, quita esta primera fila de cada archivo.
  • La columna de destino debe ser la primera columna.
  • En los trabajos de entrenamiento de clasificación, la columna de destino puede contener valores no numéricos. Todas las demás columnas deben contener solo datos numéricos.
  • En los trabajos de entrenamiento de regresión, normaliza tus valores objetivo, de manera que cada valor esté entre 0 y 1. Todas las demás columnas deben contener solo datos numéricos.

Divide los datos para el entrenamiento distribuido

Si quieres proporcionar datos de varios archivos CSV cuando envías un trabajo de entrenamiento, usa comodines en las rutas de acceso de Cloud Storage que especificas para los argumentos training_data_path y validation_data_path. Todos los archivos CSV deben usar el mismo esquema de columnas y deben cumplir con los requisitos descritos en la sección anterior.

El algoritmo integrado y distribuido XGBoost distribuye los datos de entrenamiento en las máquinas virtuales mediante uno de los siguientes métodos:

  • Si la cantidad de archivos CSV es mayor o igual que la cantidad de máquinas virtuales, el algoritmo distribuye los datos por archivo en orden rotativo. En otras palabras, el trabajador principal carga el primer archivo CSV, el primer trabajador carga el segundo archivo CSV y, así, de forma sucesiva. Este método de asignación de archivos se repite de manera indefinida a fin de que cada máquina virtual cargue más o menos la misma cantidad de archivos.

  • Si la cantidad de archivos CSV es inferior a la cantidad de máquinas virtuales, el algoritmo distribuye los datos por instancia en orden rotativo. En otras palabras, el trabajador principal carga la primera fila de cada archivo CSV, el primer trabajador carga la segunda fila de cada archivo CSV y, así, de forma sucesiva. Este método de asignación de instancias se repite de manera indefinida a fin de que cada máquina virtual cargue más o menos la misma cantidad de instancias.

Si especificas el argumento validation_data_path, el algoritmo también cargará los datos de validación mediante uno de estos métodos. Sin embargo, ten en cuenta que el algoritmo carga los datos de entrenamiento y los de validación por separado. Por ejemplo, si proporcionas muchos archivos de datos de entrenamiento, pero solo un archivo de datos de validación, puede que el algoritmo cargue los datos de entrenamiento por archivo y los de validación por instancia.

Para obtener el mejor rendimiento, divide los datos de entrenamiento en varios archivos CSV que cumplan con los siguientes lineamientos:

  • Cada archivo debe tener menos de 1 GB de tamaño.
  • Cada archivo debe contener más o menos la misma cantidad de instancias.
  • La cantidad de archivos debe ser divisible por la cantidad total de máquinas virtuales. Por ejemplo, si entrenas con un trabajador principal y dos trabajadores, la cantidad de archivos debe ser un múltiplo de 3.

Verifica los permisos del bucket de Cloud Storage

A fin de almacenar tus datos, usa un bucket de Cloud Storage en el mismo proyecto de Google Cloud que usas para ejecutar trabajos de AI Platform Training. De lo contrario, otorga acceso a AI Platform Training al depósito de Cloud Storage en el que se almacenan tus datos.

Uso de GPU

Como se describe en la sección anterior sobre los tipos de máquinas, el algoritmo integrado y distribuido XGBoost admite el uso de una sola GPU por máquina virtual para el entrenamiento.

Para aprovechar las GPU, establece el hiperparámetro tree_method en gpu_exact o gpu_hist cuando envíes el trabajo de entrenamiento.

Obtén más información sobre la asistencia de XGBoost para las GPU.

Envía un trabajo de entrenamiento distribuido de XGBoost

En esta sección, se explica cómo enviar un trabajo de entrenamiento integrado y distribuido de XGBoost. Usa la consola de Google Cloud o Google Cloud CLI para enviar tu trabajo.

En la referencia del algoritmo integrado y distribuido XGBoost, puedes encontrar descripciones completas de los hiperparámetros y de otros argumentos que se pueden ajustar a este algoritmo.

En el siguiente ejemplo, se da por sentado que entrenas un clasificador en los datos del censo que dividiste en tres archivos de datos de entrenamiento y tres archivos de datos de validación:

  • train-0.csv
  • train-1.csv
  • train-2.csv
  • eval-0.csv
  • eval-1.csv
  • eval-2.csv

Supongamos que ninguno de estos archivos tiene filas de encabezado y que los subiste a Cloud Storage. En el ejemplo, se crea un trabajo de entrenamiento que usa tres máquinas virtuales, de las cuales cada una usa una GPU NVIDIA Tesla P100. El trabajo se ejecuta en la región us-central1.

Consola de Google Cloud

  1. Ve a la página Trabajos de AI Platform Training en la consola de Google Cloud:

    Página Trabajos de AI Platform Training

  2. Haz clic en el botón Trabajo de entrenamiento nuevo. En las opciones que se muestran a continuación, haz clic en Entrenamiento de algoritmos integrados.

  3. En la página Crea un trabajo de entrenamiento nuevo, abre la lista desplegable Selecciona un algoritmo y selecciona XGBoost distribuido. Haz clic en Siguiente.

  4. En la sección Datos de entrenamiento, selecciona Usar varios archivos almacenados en un directorio de Cloud Storage en la lista desplegable. Usa el campo Ruta de acceso al directorio para seleccionar el directorio de Cloud Storage que contiene tus archivos de entrenamiento. En el campo Nombre del comodín, ingresa train-*.csv.

  5. En la sección Datos de validación (opcional), selecciona Usar varios archivos almacenados en un directorio de Cloud Storage en la lista desplegable. Usa el campo Ruta de acceso al directorio para seleccionar el directorio de Cloud Storage que contiene tus archivos de validación. En el campo Nombre del comodín, ingresa eval-*.csv.

  6. En la sección Resultado del entrenamiento, usa el campo Directorio de resultados a fin de seleccionar otro directorio en tu depósito de Cloud Storage para almacenar el resultado del entrenamiento. Haz clic en Siguiente.

  7. Personaliza los Argumentos del algoritmo del trabajo de entrenamiento o mantén los valores predeterminados. Para obtener más información sobre los argumentos, sigue los vínculos de la consola de Google Cloud y consulta la referencia de XGBoost integrado distribuido. Haga clic en Next.

  8. Ingresa el nombre de tu selección en el campo ID del trabajo. En la lista desplegable Región, selecciona us-central1.

    En la lista desplegable Nivel de escala, selecciona CUSTOM. En la sección Configuración personalizada del clúster, selecciona standard_p100 en las listas desplegables Tipo principal y Tipo de trabajador. En el campo Recuento de trabajadores, ingresa 2. Haz clic en Listo.

  9. En la página Trabajos, haz clic en el ID del trabajo nuevo para ver la página Detalles del trabajo. Luego, haz clic en Ver registros para ver los registros de entrenamiento.

Herramienta de gcloud

  1. Configura las variables de entorno de tu trabajo y reemplaza BUCKET por el nombre del bucket de Cloud Storage y DATA_DIRECTORY por la ruta de acceso al directorio en tu bucket que contiene los datos:

    # Specify the Docker container for your built-in algorithm selection.
    IMAGE_URI='gcr.io/cloud-ml-algos/xgboost_dist:latest'
    
    # Specify the Cloud Storage wildcard paths to your training and validation data.
    TRAINING_DATA='gs://BUCKET/DATA_DIRECTORY/train-*.csv'
    VALIDATION_DATA='gs://BUCKET/DATA_DIRECTORY/eval-*.csv'
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME='census'
    ALGORITHM='xgboost_dist'
    MODEL_TYPE='classification'
    DATE='date '+%Y%m%d_%H%M%S''
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://BUCKET/algorithm_training/${MODEL_NAME}/${DATE}"
    
  2. Envía el trabajo de entrenamiento mediante el comando gcloud ai-platform jobs training submit:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=us-central1 \
      --master-image-uri=$IMAGE_URI \
      --job-dir=$JOB_DIR \
      --scale-tier=CUSTOM \
      --master-machine-type=n1-standard-4 \
      --master-accelerator count=1,type=nvidia-tesla-p100 \
      --worker-machine-type=n1-standard-4 \
      --worker-count=2 \
      --worker-accelerator count=1,type=nvidia-tesla-p100 \
      -- \
      --training_data_path=$TRAINING_DATA \
      --validation_data_path=$VALIDATION_DATA \
      --objective=binary:logistic \
      --tree_method=gpu_hist
    
  3. Supervisa el estado del trabajo de entrenamiento mediante la vista de los registros con gcloud. Consulta gcloud ai-platform jobs describe y gcloud ai-platform jobs stream-logs.

    gcloud ai-platform jobs describe ${JOB_ID}
    gcloud ai-platform jobs stream-logs ${JOB_ID}
    

¿Qué sigue?