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
-
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 SDKversión 1, usa la get_image_uri
API. Para asegurarse de que laimage_uris.retrieve
API encuentra el URI correcto, consulte Parámetros comunes para los algoritmos integrados. A continuación, consultexgboost
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 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 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ámetrogpu_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:
-
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.
-
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 .
Siga estos pasos para entrenar con Dask:
Omite el
distribution
parámetro en tu ordenador o configúralo en. TrainingInputFullyReplicated
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
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 |
---|---|
En este cuaderno se muestra cómo crear un contenedor XGBoost personalizado con Amazon SageMaker Batch Transform. |
|
Este cuaderno muestra cómo utilizar el conjunto de datos Abalone en Parquet para entrenar un modelo XGBoost. |
|
Este cuaderno muestra cómo utilizar el conjunto de datos de MNIST para entrenar y alojar un modelo de clasificación multiclase. |
|
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: