Usa el algoritmo XGBoost con Amazon SageMaker - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Usa el algoritmo XGBoost con Amazon SageMaker

XGBoost (potenciación del gradiente eXtreme) es una implementación de código abierto popular y eficiente del algoritmo de árboles aumentados de gradientes. El aumento del gradiente es un algoritmo de aprendizaje supervisado que intenta predecir con precisión una variable objetivo mediante la combinación de múltiples estimaciones de un conjunto de modelos más simples. El algoritmo XGBoost funciona bien en las competiciones de aprendizaje automático por las siguientes razones:

  • Su manejo robusto de una variedad de tipos de datos, relaciones y distribuciones.

  • La variedad de hiperparámetros que se pueden 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 SageMaker integrado en Amazon.

  • Un marco para ejecutar guiones de entrenamiento en sus entornos locales.

Esta implementación ocupa menos memoria, mejora el registro, mejora la validación de hiperparámetros y tiene un conjunto de métricas más amplio que las versiones originales. Proporciona un XGBoost estimator que ejecuta un script de entrenamiento en un entorno XGBoost gestionado. La versión actual de SageMaker XGBoost se basa en las versiones 1.0, 1.2, 1.3, 1.5 y 1.7 originales de XGBoost.

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 fines de entrenamiento o inferencia.

importante

Cuando recuperes el URI de la imagen de SageMaker XGBoost, no utilices :latest ni para la etiqueta URI de la imagen. :1 Debe especificar uno de ellos Versiones compatibles para elegir el contenedor XGBoost SageMaker gestionado con la versión nativa del paquete XGBoost que desee utilizar. Para encontrar la versión del paquete migrada a los contenedores de SageMaker XGBoost, consulte las rutas de registro y el código de ejemplo de Docker. Luego Región de AWS, elige el tuyo y navega hasta 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. Le recomendamos encarecidamente que actualice la versión XGBoost a una de las versiones más recientes.

nota

La versión 1.1 de XGBoost no es compatible con. SageMaker El XGBoost 1.1 tiene una capacidad insuficiente para ejecutar predicciones cuando la entrada de prueba tiene menos funciones que los datos de entrenamiento de las entradas LIBSVM. Esta capacidad se ha restablecido en la versión 1.2 de XGBoost. Considera usar SageMaker XGBoost 1.2-2 o una versión posterior.

¿Cómo usar XGBoost SageMaker

Con SageMaker, puede usar XGBoost como un algoritmo o marco integrado. Con XGBoost como marco, tienes más flexibilidad y acceso a escenarios más avanzados, ya que puedes personalizar tus propios guiones de entrenamiento. En las siguientes secciones se describe cómo usar XGBoost con el SDK de SageMaker Python. Para obtener información sobre cómo usar XGBoost desde la interfaz de usuario de Amazon SageMaker Studio Classic, 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, el SDK de SageMaker Python proporciona la API XGBoost como marco. Esto funciona de manera similar a como SageMaker proporciona otras API de marco TensorFlow, como 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 ver un end-to-end ejemplo del uso de SageMaker XGBoost como marco, consulte Regresión con Amazon XGBoost 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 de XGBoost mediante la API. SageMaker image_uris.retrieve Si utilizas Amazon SageMaker Python SDK versión 1, usa la get_image_uri API. Para asegurarse de que la image_uris.retrieve API encuentra el URI correcto, consulte Parámetros comunes para los algoritmos integrados. A continuación, consulte xgboost la lista completa de URIs de imágenes de algoritmos integrados y regiones disponibles.

    Tras especificar el URI de la imagen de XGBoost, utilice el contenedor XGBoost para crear un estimador mediante la API Estimator e inicie un trabajo de formación SageMaker . 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 la imagen de SageMaker XGBoost, no utilice ni para la etiqueta URI de la imagen. :latest :1 Debe especificar uno de ellos Versiones compatibles para elegir el contenedor XGBoost SageMaker gestionado con la versión nativa del paquete XGBoost que desee utilizar. Para encontrar la versión del paquete migrada a los contenedores de SageMaker XGBoost, consulte las rutas de registro y el código de ejemplo de Docker. Luego Región de AWS, elige el tuyo y navega hasta 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 SageMaker implementación de XGBoost 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 aumentar el rendimiento, recomendamos utilizar XGBoost con el modo de archivo, en el que los datos de Amazon S3 se almacenan en los volúmenes de las instancias de entrenamiento.

  • 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 instancia EC2 para el algoritmo XGBoost.

Para el modo de entrada de entrenamiento CSV, la memoria total disponible para el algoritmo debe poder almacenar el conjunto de datos de entrenamiento. La memoria total disponible se calcula comoInstance Count * the memory available in the InstanceType. Para el modo de entrada de capacitación de libsvm, no es necesario, pero recomendable.

Para la versión 1.3-1 y versiones 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 cuando utilice un modelo XGBoost en XGBoost de código abierto SageMaker . 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 v1.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 anteriores de XGBoost en XGBoost de código abierto SageMaker
  • 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 un valor de peso a cada instancia. 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 instancia EC2 para el algoritmo XGBoost

SageMaker XGBoost admite el entrenamiento y la inferencia de la CPU y la 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:

Formación

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

Entrenamiento con CPU

SageMaker El XGBoost 1.0-1 o versiones anteriores solo se entrena 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. Admite el uso del espacio en disco para gestionar datos que no caben en la memoria principal. Esto se debe a la out-of-core función disponible con el modo de entrada libsvm. Aun así, escribir los archivos de caché en el disco reduce el tiempo de procesamiento del algoritmo.

Entrenamiento con GPU

SageMaker La versión 1.2-2 o posterior de XGBoost admite el entrenamiento con la 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.

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

SageMaker La versión 1.7-1 o posterior de 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 aprovechar la formación en GPU, sigue estos pasos:

  • Especifique el tipo de instancia como una de las instancias de la GPU (por ejemplo, P3)

  • Defina el tree_method hiperparámetro gpu_hist en su script XGBoost existente

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 la suya TrainingInput, defina el parámetro de distribución en. ShardedByS3Key De este modo, cada instancia obtiene aproximadamente 1/n del número de archivos de S3 si hay n instancias especificadas en el trabajo de formación.

Entrenamiento distribuido con GPU

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

Entrenamiento distribuido con instancias de una sola GPU

SageMaker Las versiones 1.2-2 a 1.3-1 de 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.

Debe dividir los datos de entrada entre el número total de instancias si:

  • Utiliza las versiones 1.2-2 a 1.3-1 de XGBoost.

  • No es necesario utilizar instancias con varias GPU.

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, incluso si elige una instancia con varias GPU.

Entrenamiento distribuido con instancias de varias GPU

A partir de la versión 1.5-1, XGBoost ofrece entrenamiento de GPU distribuido con Dask SageMaker . 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. Omite el distribution parámetro en tu ordenador o configúralo en. TrainingInputFullyReplicated

  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 algunas consideraciones a 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 Dask Worker para cada GPU. Como resultado, 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 instancias de CPU y GPU para realizar inferencias. Para obtener información sobre los tipos de instancias para la inferencia, consulte Tipos de instancias de Amazon SageMaker ML.

Cuadernos de muestra de XGBoost

En la siguiente tabla se describen varios ejemplos de cuadernos que abordan distintos casos de uso del algoritmo Amazon SageMaker XGBoost.

Título del cuaderno Descripción

How to Create a Custom XGBoost container?

En este cuaderno se 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.

Introducción a la infraestructura Amazon SageMaker Managed Spot para XGBoost Training

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

¿Cómo usar Amazon SageMaker Debugger para depurar trabajos de formación de XGBoost?

En este cuaderno se muestra cómo utilizar Amazon SageMaker Debugger para supervisar los trabajos de formación y detectar incoherencias mediante reglas de depuración integradas.

Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas en las que puede ejecutar el ejemplo, consulte. SageMaker Instancias de Amazon SageMaker Notebook Una vez que haya creado una instancia de bloc de notas y la haya abierto, seleccione la pestaña SageMakerEjemplos para ver una lista de todos los ejemplos. 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 Usar y elija Crear copia.

Para obtener más información sobre el algoritmo Amazon SageMaker XGBoost, consulta las siguientes entradas del blog: