Algoritmo XGBoost - Amazon SageMaker

Algoritmo XGBoost

XGBoost (potenciación del gradiente eXtreme) es una implementación de código abierto popular y eficiente del algoritmo de árboles aumentados de gradientes. La potenciación de gradientes es un algoritmo de aprendizaje supervisado que intenta predecir de forma apropiada una variable de destino mediante la combinación de un conjunto de estimaciones a partir de un conjunto de modelos más simples y más débiles. El algoritmo XGBoost funciona bien en competiciones de machine learning debido a su manejo robusto de una variedad de tipos de datos, relaciones, distribuciones y la variedad de hiperparámetros que puede ajustar. Puede usar XGBoost para problemas de regresión, de clasificación (binaria y multiclase) y de ranking.

Puede utilizar la nueva versión del algoritmo XGBoost como un algoritmo integrado en Amazon SageMaker o como un marco para ejecutar scripts de entrenamiento en sus entornos locales. Esta implementación ocupa menos espacio de memoria, tiene un mejor registro, una validación de hiperparámetros mejorada y un conjunto ampliado de métricas en comparación con la versión original. También proporciona un estimator de XGBoost que ejecuta un script de entrenamiento en un entorno de XGBoost administrado. La versión actual de SageMaker XGBoost se basa en las versiones originales de XGBoost 1.0, 1.2, 1.3, 1.5 y 1.7.

Versiones compatibles

  • Modo marco (código abierto): 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1

  • Modo de algoritmo: 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1

aviso

Debido a la capacidad de procesamiento requerida, la versión 1.7-1 de SageMaker XGBoost no es compatible con las instancias de GPU de la familia de instancias P2 para entrenamiento o inferencia.

importante

Cuando recupere el URI de imagen de SageMaker XGBoost, no utilice :latest ni :1 para la etiqueta del URI de la imagen. Debe especificar una de las Versiones compatibles para elegir el contenedor de XGBoost administrado por SageMaker con la versión nativa del paquete XGBoost que desee utilizar. Para encontrar la versión del paquete migrada a los contenedores XGBoost de SageMaker, consulte Docker Registry Paths and Example Code, escoja su Región de AWS y vaya a la sección XGBoost (algoritmo).

aviso

Las versiones XGBoost 0.90 están en desuso. Ya no hay actualizaciones de seguridad ni correcciones para XGBoost 0.90. Se recomienda encarecidamente actualizar la versión XGBoost a una de las versiones más recientes.

nota

XGBoost v1.1 no es compatible con SageMaker porque XGBoost 1.1 tiene una capacidad deficiente para ejecutar predicciones cuando la entrada de prueba tiene menos características que los datos de entrenamiento de las entradas LIBSVM. Esta capacidad se ha restablecido en la versión 1.2 de XGBoost. Valore la posibilidad de utilizar SageMaker XGBoost 1.2-2 o una versión posterior.

Cómo utilizar SageMaker XGBoost

Con SageMaker, puede usar XGBoost como algoritmo o marco integrado. Al usar XGBoost como marco, tiene más flexibilidad y acceso a escenarios más avanzados, como la validación cruzada de k iteraciones, ya que puede personalizar sus propios scripts de entrenamiento. En las siguientes secciones, se describe cómo utilizar XGBoost con el SDK de Python para SageMaker. Para obtener información sobre cómo utilizar XGBoost desde la interfaz de usuario de Amazon SageMaker Studio, consulte SageMaker JumpStart.

  • Uso de XGBoost como marco de trabajo

    Utilice XGBoost como marco para ejecutar los scripts de entrenamiento personalizados que puedan incorporar procesamiento de datos adicional en sus trabajos de entrenamiento. En el siguiente ejemplo de código, puede encontrar cómo el SDK de Phyton de SageMaker proporciona la API de XGBoost como marco de la misma manera que proporciona otras API de marco, como TensorFlow, MXNet y PyTorch.

    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.7-1', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Para obtener un ejemplo de extremo a extremo del uso de SageMaker XgBoost como marco, consulte el tema sobre regresión con XGBoost de Amazon SageMaker.

  • Utilizar XGBoost como algoritmo integrado

    Utilice el algoritmo integrado XGBoost para crear un contenedor de entrenamiento de XGBoost tal como se muestra en el ejemplo de código siguiente. Puede detectar automáticamente el URI de la imagen del algoritmo integrado XGBoost mediante la API image_uris.retrieve de SageMaker (o la API get_image_uri si utiliza la versión 1 de Amazon SageMaker Python SDK). Si desea asegurarse de que la API image_uris.retrieve encuentre el URI correcto, consulte Parámetros comunes para algoritmos integrados y busque xgboost en la lista completa de URI de imagen de algoritmo incorporado y las regiones disponibles.

    Después de especificar el URI de imagen XGBoost, puede utilizar el contenedor XGBoost para construir un estimador con la API Estimator de SageMaker e iniciar un trabajo de entrenamiento. Este modo de algoritmo integrado XGBoost no incorpora su propio script de entrenamiento XGBoost y se ejecuta directamente en los conjuntos de datos de entrada.

    importante

    Cuando recupere el URI de imagen de SageMaker XGBoost, no utilice :latest ni :1 para la etiqueta del URI de la imagen. Debe especificar una de las Versiones compatibles para elegir el contenedor de XGBoost administrado por SageMaker con la versión nativa del paquete XGBoost que desee utilizar. Para encontrar la versión del paquete migrada a los contenedores XGBoost de SageMaker, consulte Docker Registry Paths and Example Code, escoja su Región de AWS y vaya a la sección XGBoost (algoritmo).

    import sagemaker import boto3 from sagemaker import image_uris from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.7-1") # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Para obtener más información acerca de cómo configurar XGBoost como un algoritmo integrado, consulte los siguientes ejemplos de bloc de notas.

Interfaz de entrada/salida para el algoritmo XGBoost

La potenciación de gradientes funciona en los datos tabulares, con las filas que representan observaciones, una columna que representa la variable de destino o la etiqueta, y las columnas restantes que representan las características.

La implementación de XGBoost en SageMaker admite los siguientes formatos de datos para el entrenamiento y la inferencia:

  • text/libsvm (predeterminado)

  • text/csv

  • application/x-parquet

  • application/x-recordio-protobuf

nota

Hay algunos factores que debemos tener en cuenta en relación con la entrada para el entrenamiento y las inferencias:

  • Para el entrenamiento con entrada en columnas, el algoritmo asume que la variable objetivo (etiqueta) es la primera columna. Para la inferencia, el algoritmo asume que la entrada no dispone de la columna de etiqueta.

  • En el caso de los datos CSV, la entrada no debe tener un registro de encabezado.

  • Para el entrenamiento con LIBSVM, el algoritmo asume que las columnas posteriores a la columna de etiqueta contienen los pares de valores de índice basados en cero para las características. Así pues, cada fila tiene el formato : <label> <index0>:<value0> <index1>:<value1>.

  • Para obtener información sobre los tipos de instancias y el entrenamiento distribuido, consulte Recomendación de instancias EC2 para el algoritmo XGBoost.

Para el modo de entrada de capacitación de CSV, la memoria total disponible para el algoritmo (recuento de instancia * la memoria disponible en InstanceType) debe poder almacenar el conjunto de datos de capacitación. Para el modo de entrada de capacitación de libsvm, no es necesario, pero recomendable.

Para la versión 1.3-1 y posteriores, SageMaker XGBoost guarda el modelo en el formato binario interno de XGBoost utilizando Booster.save_model. Las versiones anteriores utilizan el módulo Python pickle para serializar/deserializar el modelo.

nota

Tenga en cuenta las versiones al utilizar un modelo XGBoost de SageMaker en XGBoost de código abierto. Las versiones 1.3-1 y posteriores utilizan el formato binario interno XGBoost, mientras que las versiones anteriores utilizan el módulo Python pickle.

Para usar un modelo entrenado con SageMaker XGBoost v. 1.3-1 o posterior en XGBoost de código abierto
  • Utilice el siguiente código de Python:

    import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(model_file_path) xgb_model.predict(dtest)
Para usar un modelo entrenado con versiones posteriores de SageMaker XGBoost en XGBoost de código abierto
  • Utilice el siguiente código de Python:

    import pickle as pkl import tarfile t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(model_file_path, 'rb')) # prediction with test data pred = model.predict(dtest)
Para diferenciar la importancia de los puntos de datos etiquetados utilice los soportes de ponderación de instancias
  • SageMaker XGBoost permite a los clientes diferenciar la importancia de los puntos de datos etiquetados asignando a cada instancia un valor de ponderación. Para la entrada text/libsvm, los clientes pueden asignar valores de ponderación a las instancias de datos añadiéndolos después de las etiquetas. Por ejemplo, label:weight idx_0:val_0 idx_1:val_1.... Para la entrada text/csv, los clientes deben activar la marca csv_weights en los parámetros y asociar los valores de ponderación en la columna después de las etiquetas. Por ejemplo, label,weight,val_0,val_1,....

Recomendación de instancias EC2 para el algoritmo XGBoost

SageMaker XGBoost admite el entrenamiento y la inferencia con CPU y GPU. Las recomendaciones de instancias dependen de las necesidades de entrenamiento e inferencia, así como de la versión del algoritmo XGBoost. Seleccione una de las siguientes opciones para obtener más información:

Entrenamiento

El algoritmo de SageMaker XGBoost admite el entrenamiento con CPU y GPU.

Entrenamiento con CPU

SageMaker XGBoost 1.0-1 y las versiones anteriores solo permiten el entrenamiento con CPU. Se trata de un algoritmo de vinculación de memoria (como se opone en la vinculación de computación). Por lo tanto, una instancia de computación de uso general (por ejemplo, M5) es una opción mejor que una instancia optimizada de computación (por ejemplo, C4). Además, recomendamos que disponga de suficiente memoria en total en las instancias seleccionadas para almacenar los datos de capacitación. Aunque admite el uso del espacio en disco para administrar datos que no encajan en la memoria principal (la función no principal disponible con el modo de entrada libsvm), la escritura de los archivos en la memoria caché en el disco ralentizan el tiempo de procesamiento del algoritmo.

Entrenamiento con GPU

La versión 1.2-2 o posterior de SageMaker XGBoost permite el entrenamiento con GPU. A pesar de que los costos por instancia son superiores, la capacitación de las GPU se realiza de forma más rápida, por lo que son más rentables.

La versión 1.2-2 o posterior de SageMaker XGBoost admite las familias de instancias de GPU P2, P3, G4dn y G5.

La versión 1.7-1 o posterior de SageMaker XGBoost admite las familias de instancias de GPU P3, G4dn y G5. Tenga en cuenta que, debido a los requisitos de capacidad informática, la versión 1.7-1 o posterior no es compatible con la familia de instancias P2.

Para sacarle provecho al entrenamiento con GPU, especifique el tipo de instancia como una de las instancias de la GPU (por ejemplo, P3), y configure el hiperparámetro tree_method como gpu_hist en el script existente de XGBoost.

Entrenamiento distribuido

SageMaker XGBoost admite instancias de CPU y GPU para el entrenamiento distribuido.

Entrenamiento distribuido con CPU

Para ejecutar el entrenamiento con CPU en varias instancias, defina el parámetro instance_count del estimador en un valor superior a uno. Los datos de entrada se deben dividir entre el número total de instancias.

División de datos de entrada entre las instancias

Divida los datos de entrada mediante los siguientes pasos:

  1. Separe los datos de entrada en archivos más pequeños. La cantidad de archivos debe ser, al menos, igual a la cantidad de instancias utilizadas para el entrenamiento distribuido. El uso de varios archivos más pequeños, en lugar de uno grande, también reduce el tiempo de descarga de datos para el trabajo de entrenamiento.

  2. Al crear su TrainingInput, establecerá el parámetro de distribución en ShardedByS3Key. Este parámetro garantiza que cada instancia reciba aproximadamente 1/n del número de archivos de S3 si hay n instancias especificadas en el trabajo de entrenamiento.

Entrenamiento distribuido con GPU

Puede utilizar el entrenamiento distribuido con instancias de una o varias GPU.

Entrenamiento distribuido con instancias de una sola GPU

Las versiones 1.2-2 a 1.3-1 de SageMaker XGBoost solo admiten el entrenamiento de instancias con una sola GPU. Esto significa que, aunque seleccione una instancia con varias GPU, solo se utilizará una GPU por instancia.

Si usa las versiones 1.2-2 a 1.3-1 de XGBoost, o si no necesita usar instancias con varias GPU, debe dividir los datos de entrada entre el número total de instancias. Para obtener más información, consulte División de datos de entrada entre las instancias.

nota

Las versiones 1.2-2 a 1.3-1 de SageMaker XGBoost solo utilizan una GPU por instancia, aunque elija una instancia con varias GPU.

Entrenamiento distribuido con instancias de varias GPU

A partir de la versión 1.5-1, SageMaker XGBoost ofrece el entrenamiento con GPU distribuido con Dask. Con Dask, puede utilizar todas las GPU cuando utilice una o más instancias de varias GPU. Dask también funciona cuando se utilizan instancias de una sola GPU.

Siga estos pasos para entrenar con Dask:

  1. Omita el parámetro distribution en su TrainingInput o configúrelo en FullyReplicated.

  2. Al definir los hiperparámetros, establezca use_dask_gpu_training en "true".

importante

El entrenamiento distribuido con Dask solo admite los formatos de entrada CSV y Parquet. Si utiliza otros formatos de datos, como LIBSVM o PROTOBUF, el trabajo de entrenamiento no se llevará a cabo.

Con datos Parquet, debe guardar los nombres de las columnas como cadenas. Las columnas que tienen nombres de otros tipos de datos no se cargarán.

importante

El entrenamiento distribuido con Dask no admite el modo canalización. Si se especifica el modo canalización, el trabajo de entrenamiento no se llevará a cabo.

Hay algunos factores que debemos tener en cuenta a la hora de entrenar SageMaker XGBoost con Dask. Divida los datos en archivos más pequeños. Dask lee cada archivo de Parquet como una partición. Hay un proceso de trabajo de Dask para cada GPU, por lo que el número de archivos debe ser mayor que el número total de GPU (número de instancias * número de GPU por instancia). Tener una gran cantidad de archivos también puede reducir el rendimiento. Para obtener más información, consulte Dask Best Practices.

Variaciones en la producción

El hiperparámetro tree_method especificado determina el algoritmo que se utiliza para el entrenamiento con XGBoost. Los métodos de árbol (approx, hist y gpu_hist) son todos aproximados, y utilizan bocetos para el cálculo de cuantiles. Para obtener más información, consulte Tree Methods en la documentación de XGBoost. El boceto es un algoritmo aproximado. Por lo tanto, cabe esperar variaciones en el modelo en función de factores como el número de procesos de trabajo elegidos para el entrenamiento distribuido. La importancia de la variación depende de los datos.

Inferencia

SageMaker XGBoost admite las instancias en CPU y GPU para la inferencia. Para obtener información sobre los tipos de instancias para la inferencia, consulte los tipos de instancias de ML en Amazon SageMaker.

Cuadernos de ejemplo de XGBoost

En la siguiente tabla, encontrará algunos cuadernos de muestra con distintos casos de uso del algoritmo XGBoost de Amazon SageMaker.

Título del cuaderno Descripción

How to Create a Custom XGBoost container?

Este cuaderno muestra cómo crear un contenedor XGBoost personalizado con Amazon SageMaker Batch Transform.

Regression with XGBoost using Parquet

Este cuaderno muestra cómo utilizar el conjunto de datos Abalone en Parquet para entrenar un modelo XGBoost.

How to Train and Host a Multiclass Classification Model?

Este cuaderno muestra cómo utilizar el conjunto de datos de MNIST para entrenar y alojar un modelo de clasificación multiclase.

How to train a Model for Customer Churn Prediction?

En este cuaderno, se muestra cómo entrenar un modelo para predecir la salida de clientes en un operador móvil a fin de identificar a los clientes insatisfechos.

An Introduction to Amazon SageMaker Managed Spot infrastructure for XGBoost Training

Este cuaderno muestra cómo utilizar las instancias de spot para el entrenamiento con un contenedor XGBoost.

How to use Amazon SageMaker Debugger to debug XGBoost Training Jobs?

En este cuaderno. se muestra cómo utilizar el depurador de Amazon SageMaker para supervisar los trabajos de entrenamiento y detectar faltas de uniformidad mediante reglas de depuración integradas.

How to use Amazon SageMaker Debugger to debug XGBoost Training Jobs in Real-Time?

Este cuaderno muestra cómo utilizar el conjunto de datos MNIST y el depurador de Amazon SageMaker para realizar análisis en tiempo real de los trabajos de entrenamiento de XGBoost mientras se están ejecutando esos trabajos.

Para obtener instrucciones sobre cómo crear instancias de cuadernos de Jupyter que pueda utilizar para ejecutar el ejemplo en SageMaker (y sobre cómo acceder a estas instancias), consulte Creación de una instancia de cuaderno de Amazon SageMaker. Una vez que haya creado una instancia de cuadernos y la haya abierto, seleccione la pestaña Ejemplos de SageMaker para ver una lista de todas las muestras de SageMaker. Los blocs de notas de modelado de ejemplos que utilizan los algoritmos de aprendizaje lineal se encuentran en la sección de introducción a algoritmos de Amazon. Para abrir un bloc de notas, elija su pestaña Use (Usar) y elija Create copy (Crear copia).