Como usar SageMaker XGBoost - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Como usar SageMaker XGBoost

Com SageMaker, você pode usar XGBoost como um algoritmo ou estrutura embutida. XGBoostComo estrutura, você tem mais flexibilidade e acesso a cenários mais avançados, pois pode personalizar seus próprios scripts de treinamento. As seções a seguir descrevem como usar XGBoost com o SageMaker Python e a interface SDK de entrada/saída do algoritmo. XGBoost Para obter informações sobre como usar a interface XGBoost do usuário do Amazon SageMaker Studio Classic, consulteSageMaker JumpStart modelos pré-treinados.

Use XGBoost como uma estrutura

Use XGBoost como uma estrutura para executar seus scripts de treinamento personalizados que podem incorporar processamento adicional de dados em seus trabalhos de treinamento. No exemplo de código a seguir, o SageMaker Python SDK fornece o XGBoost API como uma estrutura. Isso funciona de forma semelhante à forma como SageMaker fornece outra estrutura APIs TensorFlowMXNet, como, PyTorch e.

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 um end-to-end exemplo de uso SageMaker XGBoost como estrutura, consulte Regressão com a Amazon SageMaker XGBoost.

Use XGBoost como um algoritmo embutido

Use o algoritmo XGBoost integrado para criar um contêiner XGBoost de treinamento, conforme mostrado no exemplo de código a seguir. Você pode identificar automaticamente a imagem do algoritmo XGBoost incorporado URI usando SageMaker image_uris.retrieve API o. Se estiver usando o Amazon SageMaker Python SDK versão 1, use o. get_image_uri API Para garantir que as image_uris.retrieve API descobertas estejam corretasURI, consulte Parâmetros comuns para algoritmos integrados. Em seguida, consulte a xgboost lista completa de imagens de algoritmos integrados URIs e regiões disponíveis.

Depois de especificar a XGBoost imagemURI, use o XGBoost contêiner para construir um estimador usando o SageMaker Estimador API e iniciar um trabalho de treinamento. Esse modo de algoritmo XGBoost integrado não incorpora seu próprio script de XGBoost treinamento e é executado diretamente nos conjuntos de dados de entrada.

Importante

Ao recuperar a SageMaker XGBoost imagemURI, não use :latest ou :1 para a URI tag de imagem. Você deve especificar um dos Versões compatíveis para escolher o XGBoost contêiner SageMaker gerenciado com a versão do XGBoost pacote nativo que você deseja usar. Para encontrar a versão do pacote migrada para os SageMaker XGBoost contêineres, consulte Docker Registry Paths and Example Code. Em seguida Região da AWS, escolha seu e navegue até a seção 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 obter mais informações sobre como configurar o XGBoost como um algoritmo incorporado, consulte os exemplos de cadernos a seguir.

Interface de entrada/saída para o algoritmo XGBoost

O aumento de gradiente trabalha em dados tabulares: as linhas representam as observações, uma coluna representa a variável de destino ou rótulo, e as demais colunas representam os atributos.

A SageMaker implementação do XGBoost suporta os seguintes formatos de dados para treinamento e inferência:

  • text/libsvm (padrão)

  • text/csv

  • application/x-parquet

  • aplicação/ x-recordio-protobuf

nota

Há algumas considerações sobre as quais você deve estar ciente em relação às entradas de treinamento e inferência:

  • Para aumentar o desempenho, recomendamos usar o XGBoost modo Arquivo, no qual seus dados do Amazon S3 são armazenados nos volumes da instância de treinamento.

  • Para treinamento com entrada colunar, o algoritmo pressupõe que a variável de destino (rótulo) está na primeira coluna. Para inferência, o algoritmo pressupõe que a entrada não tem a coluna de rótulo.

  • Para CSV dados, a entrada não deve ter um registro de cabeçalho.

  • Para LIBSVM treinamento, o algoritmo pressupõe que as colunas subsequentes após a coluna do rótulo contenham os pares de valores de índice baseados em zero para os recursos. Portanto, cada linha tem o formato: : <label> <index0>:<value0> <index1>:<value1>.

  • Para obter informações sobre os tipos de instância e o treinamento distribuído, consulte EC2recomendação de instância para o XGBoost algoritmo.

Para o modo de entrada de CSV treinamento, a memória total disponível para o algoritmo deve ser capaz de armazenar o conjunto de dados de treinamento. A memória total disponível é calculada comoInstance Count * the memory available in the InstanceType. Para o modo de entrada de treinamento libsvm, não é necessário, mas recomendado.

Para v1.3-1 e posterior, SageMaker XGBoost salva o modelo no formato binário XGBoost interno, usando. Booster.save_model As versões anteriores usam o módulo pickle do Python para serializar/desserializar o modelo.

nota

Esteja atento às versões ao usar um SageMaker XGBoost modelo em código XGBoost aberto. As versões 1.3-1 e posteriores usam o formato binário XGBoost interno, enquanto as versões anteriores usam o módulo pickle do Python.

Para usar um modelo treinado com SageMaker XGBoost v1.3-1 ou posterior em código aberto XGBoost
  • Use o código do Python a seguir:

    import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(model_file_path) xgb_model.predict(dtest)
Para usar um modelo treinado com versões anteriores do SageMaker XGBoost em código aberto XGBoost
  • Use o código do Python a seguir:

    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 a importância dos pontos de dados rotulados, use Suportes de peso de instância
  • SageMaker XGBoostpermite que os clientes diferenciem a importância dos pontos de dados rotulados atribuindo a cada instância um valor de peso. Para a entrada text/libsvm, os clientes podem atribuir valores de peso a instâncias de dados, anexando-os após os rótulos. Por exemplo, label:weight idx_0:val_0 idx_1:val_1.... Para entrada text/csv, os clientes precisam ativar o sinalizador csv_weights nos parâmetros e anexar valores de peso na coluna após os rótulos. Por exemplo: label,weight,val_0,val_1,...).