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.
Algoritmo XGBoost
XGBoost
Puede utilizar la nueva versión del algoritmo XGBoost como algoritmo SageMaker integrado en Amazon o como 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 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 fines de entrenamiento o inferencia.
importante
Cuando recupere el URI de la imagen de SageMaker XGBoost, no utilice:latest
o:1
para la etiqueta URI de la imagen. Debe especificar uno de losVersiones compatibles para elegir el contenedor XGBoost SageMaker administrado con la versión nativa del paquete XGBoost que desea utilizar. Para encontrar la versión del paquete migrada a los contenedores de SageMaker XGBoost, consulte las rutas del registro de Docker y el código de ejemploRegión de AWS, elija su versión y vaya a la sección XGBoost (algoritmo).
aviso
Las versiones 0.90 de XGBoost están en desuso. Se ha interrumpido el soporte para actualizaciones de seguridad o correcciones de errores para XGBoost 0.90. Se recomienda encarecidamente actualizar la versión de XGBoost a una de las versiones más recientes.
nota
No se admite XGBoost v1.1 SageMaker porque XGBoost 1.1 no puede ejecutar predicciones cuando la entrada de prueba tiene menos funciones que los datos de entrenamiento de las entradas de LIBSVM. Esta capacidad se ha restaurado en XGBoost v1.2. Considere usar SageMaker XGBoost 1.2-2 o una versión posterior.
Cómo usar 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 secciones siguientes, 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, consulteSageMaker 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 ver cómo el SDK de SageMaker Python proporciona la API XGBoost como marco de la misma manera que 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 SageMaker XGBoost
-
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 SageMaker
image_uris.retrieve
API (o laget_image_uri
API si utiliza la versión 1 del SDK de Amazon SageMaker Python). Si desea asegurarse de que la API image_uris.retrieve
encuentre el URI correcto, consulte Parámetros comunes para algoritmos integrados y busquexgboost
en la lista completa de URI de imagen de algoritmo incorporado y las regiones disponibles.Tras especificar el URI de la imagen de XGBoost, puede utilizar el contenedor XGBoost para crear un estimador mediante la API SageMaker Estimator e iniciar un trabajo de formación. 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
:latest
o:1
para la etiqueta URI de la imagen. Debe especificar uno de losVersiones compatibles para elegir el contenedor XGBoost SageMaker administrado con la versión nativa del paquete XGBoost que desea utilizar. Para encontrar la versión del paquete migrada a los contenedores de SageMaker XGBoost, consulte las rutas del registro de Docker y el código de ejemploRegión de AWS, elija su versión 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 SageMaker implementación de XGBoost admite los siguientes formatos de datos para el entrenamiento y la inferencia:
-
text/libsvm (predeterminado)
-
texto/csv
-
aplicación/x-parquet
-
aplicación/x-recordio-protobuf
nota
Hay algunas consideraciones a tener en cuenta con respecto a la entrada de entrenamiento e inferencia:
-
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 tiene una columna de etiquetas.
Para 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 etiquetas contienen los pares de valores de índice basados en cero para las entidades. Así que cada fila tiene el formato:: <label><index0>: <value0><index1>:<value1>.
-
Para obtener información sobre los tipos de instancias y la capacitación distribuida, consulteRecomendació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 versiones posteriores, SageMaker XGBoost guarda el modelo en el formato binario interno de XGBoost, utilizandoBooster.save_model
. Las versiones anteriores utilizan el módulo pickle de Python para serializar/deserializar el modelo.
nota
Tenga en cuenta las versiones cuando utilice un modelo SageMaker XGBoost en XGBoost de código abierto. Las versiones 1.3-1 y posteriores usan el formato binario interno XGBoost, mientras que las versiones anteriores usan el módulo pickle de Python.
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 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 peso. 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 marcacsv_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 de CPU y GPU. Las recomendaciones de instancias dependen de las necesidades de entrenamiento e inferencia, así como de la versión del algoritmo XGBoost. Elija una de las siguientes opciones para obtener más información:
Entrenamiento
El algoritmo SageMaker XGBoost admite el entrenamiento de CPU y GPU.
Formación en CPU
SageMaker 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. Si bien admite el uso del espacio en disco para gestionar datos que no caben en la memoria principal (la out-of-core función disponible en el modo de entrada libsvm), escribir archivos de caché en el disco ralentiza el tiempo de procesamiento del algoritmo.
Formación en GPU
SageMaker La versión 1.2-2 o posterior de XGBoost admite 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.
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 de procesamiento, la versión 1.7-1 o posterior no admite la familia de instancias P2.
Para aprovechar el entrenamiento en GPU, especifique el tipo de instancia como una de las instancias de GPU (por ejemplo, P3) y configure eltree_method
hiperparámetrogpu_hist
en su script XGBoost existente.
Formación distribuida
SageMaker XGBoost admite instancias de CPU y GPU para el entrenamiento distribuido.
Formación en CPU distribuida
Para ejecutar el entrenamiento de la CPU en varias instancias, defina elinstance_count
parámetro del estimador en un valor superior a uno. Los datos de entrada se deben dividir entre el número total de instancias.
Divida los datos de entrada entre instancias
Divida los datos de entrada siguiendo los siguientes pasos:
-
Divida 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 la capacitación distribuida. El uso de varios archivos pequeños en lugar de un archivo grande también reduce el tiempo de descarga de datos para el trabajo de formación.
-
Al crear su TrainingInput
, defina el parámetro de distribución en ShardedByS3Key
. Este parámetro garantiza que cada instancia obtenga aproximadamente 1/n del número de archivos de S3 si hay n instancias especificadas en el trabajo de capacitación.
Formación en GPU distribuida
Puedes usar el entrenamiento distribuido con instancias de una sola GPU o de varias GPU.
Capacitación distribuida con instancias de una sola GPU
SageMaker Las versiones 1.2-2 a 1.3-1 de XGBoost solo admiten el entrenamiento con una sola instancia de GPU. Esto significa que, incluso si seleccionas una instancia con varias GPU, solo se utilizará una GPU por instancia.
Si usas las versiones 1.2-2 a 1.3-1 de XGBoost, o si no necesitas usar instancias con varias GPU, debes dividir los datos de entrada entre el número total de instancias. Para obtener más información, consulte Divida los datos de entrada entre instancias.
nota
Las versiones 1.2-2 a 1.3-1 de SageMaker XGBoost solo usan una GPU por instancia, incluso si eliges una instancia con varias GPU.
Entrenamiento distribuido con instancias de múltiples GPU
A partir de la versión 1.5-1, SageMaker XGBoost ofrece entrenamiento distribuido sobre GPU con Dask
Utilice los siguientes pasos:
Omita el
distribution
parámetro en su archivo TrainingInputo configúrelo en FullyReplicated
.Al definir los hiperparámetros,
use_dask_gpu_training
configúrelo en"true"
.
importante
La capacitación distribuida con Dask solo admite los formatos de entrada CSV y Parquet. Si utiliza otros formatos de datos, como LIBSVM o PROTOBUF, se produce un error en el trabajo de formación.
Para los datos de Parquet, asegúrese de guardar los nombres de las columnas como cadenas. Las columnas que tengan nombres de otros tipos de datos no se cargarán.
importante
El entrenamiento distribuido con Dask no admite el modo de canalización. Si se especifica el modo de canalización, se produce un error en la tarea de entrenamiento.
Hay algunas consideraciones a tener en cuenta al entrenar SageMaker XGBoost con Dask. Asegúrese de dividir 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, por lo que la cantidad de archivos debe ser mayor que la cantidad total de GPU (recuento de instancias* número de GPU por instancia). Tener una cantidad muy grande de archivos también puede reducir el rendimiento. Para obtener más información, consulte Prácticas recomendadas de Dask
Variaciones en la producción
Eltree_method
hiperparámetro especificado determina el algoritmo que se utiliza para el entrenamiento de XGBoost. Los métodos de árbolapprox
,hist
ygpu_hist
son todos métodos aproximados y utilizan bocetos para el cálculo de los cuantiles. Para obtener más información, consulte Métodos de árbol
Inferencia
SageMaker XGBoost admite instancias de CPU y GPU para la inferencia. Para obtener información sobre los tipos de instancias para la inferencia, consulte Tipos de instancias de Amazon SageMaker ML
Blocs de notas de muestra de XGBoost
La siguiente tabla describe una variedad de cuadernos de ejemplo que abordan diferentes casos de uso del algoritmo Amazon SageMaker XGBoost.
Título del cuaderno | Descripción |
---|---|
Este cuaderno le muestra cómo crear un contenedor XGBoost personalizado con Amazon SageMaker Batch Transform. |
|
Este cuaderno muestra cómo usar el conjunto de datos Abalone en Parquet para entrenar un modelo XGBoost. |
|
¿Cómo entrenar y alojar un modelo de clasificación multiclase? |
Este cuaderno muestra cómo utilizar el conjunto de datos MNIST para entrenar y alojar un modelo de clasificación multiclase. |
¿Cómo entrenar un modelo para la predicción de la pérdida de clientes? |
Este cuaderno muestra cómo entrenar un modelo para predecir la salida de los clientes móviles con el fin de identificar a los clientes insatisfechos. |
Introducción a la infraestructura de Amazon SageMaker Managed Spot para XGBoost Training |
En este cuaderno se muestra cómo utilizar las instancias puntuales para entrenar con un contenedor XGBoost. |
¿Cómo utilizar Amazon SageMaker Debugger para depurar los 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 las reglas de depuración integradas. |
Este cuaderno muestra cómo utilizar el conjunto de datos MNIST y Amazon SageMaker Debugger para realizar un análisis en tiempo real de los trabajos de entrenamiento de XGBoost mientras se están ejecutando los trabajos de capacitación. |
Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar el ejemplo SageMaker, consulteInstancias de Amazon SageMaker Notebook. Tras crear una instancia de bloc de notas y abrirla, seleccione la pestaña SageMakerEjemplos para ver una lista de todos los SageMaker ejemplos. 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).