Verwenden Sie den XGBoost-Algorithmus mit Amazon SageMaker - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie den XGBoost-Algorithmus mit Amazon SageMaker

XGBoost (eXtreme Gradient Boosting) ist eine beliebte und effiziente Open-Source-Implementierung eines Baumalgorithmus mit Gradient Boosting. Gradient Boosting ist ein Algorithmus für überwachtes Lernen, der versucht, eine Zielvariable genau vorherzusagen, indem er mehrere Schätzungen aus einer Reihe einfacherer Modelle kombiniert. Der XGBoost-Algorithmus schneidet bei Wettbewerben im Bereich maschinelles Lernen aus den folgenden Gründen gut ab:

  • Sein robuster Umgang mit einer Vielzahl von Datentypen, Beziehungen und Verteilungen.

  • Die Vielzahl von Hyperparametern, die Sie fein abstimmen können.

Sie können XGBoost für Regressions-, Binär- und Multiclass-Klassifizierungs- und Ranglistenprobleme verwenden.

Sie können die neue Version des XGBoost-Algorithmus wie folgt verwenden:

  • Ein von Amazon SageMaker integrierter Algorithmus.

  • Ein Framework zum Ausführen von Trainingsskripten in Ihren lokalen Umgebungen.

Diese Implementierung hat einen geringeren Speicherbedarf, eine bessere Protokollierung, eine verbesserte Hyperparametervalidierung und einen größeren Satz von Metriken als die Originalversionen. Es bietet einen XGBoostestimator, der ein Trainingsskript in einer verwalteten XGBoost-Umgebung ausführt. Die aktuelle Version von SageMaker XGBoost basiert auf den ursprünglichen XGBoost-Versionen 1.0, 1.2, 1.3, 1.5 und 1.7.

Unterstützte Versionen

  • Framework-Modus (Open Source): 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1

  • Algorithmusmodus: 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1

Warnung

Aufgrund der erforderlichen Rechenkapazität ist Version 1.7-1 von SageMaker XGBoost zu Trainings- oder Inferenzzwecken nicht mit GPU-Instances aus der P2-Instanzfamilie kompatibel.

Wichtig

Wenn Sie den SageMaker XGBoost-Image-URI abrufen, verwenden :latest Sie nicht oder für das Image-URI-Tag. :1 Sie müssen einen von den angeben, Unterstützte Versionen um den SageMaker -verwalteten XGBoost-Container mit der nativen XGBoost-Paketversion auszuwählen, die Sie verwenden möchten. Informationen zur Paketversion, die in die SageMaker XGBoost-Container migriert wurde, finden Sie unter Docker-Registrierungspfade und Beispielcode. Wählen Sie dann Ihre AWS-Region aus und navigieren Sie zum Abschnitt XGBoost (Algorithmus).

Warnung

Die XGBoost-Versionen 0.90 sind veraltet. Der Support für Sicherheitsupdates oder Bugfixes für XGBoost 0.90 wird eingestellt. Wir empfehlen dringend, dass Sie die XGBoost-Version auf eine der neueren Versionen aktualisieren.

Anmerkung

XGBoost v1.1 wird auf nicht unterstützt. SageMaker XGBoost 1.1 hat eine defekte Fähigkeit, Vorhersagen auszuführen, wenn die Testeingabe weniger Funktionen hat als die Trainingsdaten in den LIBSVM-Eingaben. Diese Funktion wurde in XGBoost v1.2 wiederhergestellt. Erwägen Sie die Verwendung von SageMaker XGBoost 1.2-2 oder höher.

Wie benutzt man XGBoost SageMaker

Mit SageMaker können Sie XGBoost als integrierten Algorithmus oder Framework verwenden. Wenn Sie XGBoost als Framework verwenden, haben Sie mehr Flexibilität und Zugriff auf komplexere Szenarien, da Sie Ihre eigenen Trainingsskripte anpassen können. In den folgenden Abschnitten wird beschrieben, wie XGBoost mit dem SageMaker Python-SDK verwendet wird. Informationen zur Verwendung von XGBoost über die Amazon SageMaker Studio Classic-Benutzeroberfläche finden Sie unter. Trainieren, implementieren und evaluieren Sie vortrainierte Modelle mit SageMaker JumpStart

  • Verwenden von XGBoost als Framework

    Sie können XGBoost als Framework zum Ausführen angepasster Trainingsskripts verwenden, die eine zusätzliche Datenverarbeitung in Ihre Trainingsaufgaben integrieren können. Im folgenden Codebeispiel stellt das SageMaker Python-SDK die XGBoost-API als Framework bereit. Dies funktioniert ähnlich wie die SageMaker Bereitstellung anderer Framework-APIs wie TensorFlow MXNet und 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})

    Ein end-to-end Beispiel für die Verwendung von SageMaker XGBoost als Framework finden Sie unter Regression with Amazon XGBoost SageMaker

  • Verwenden von XGBoost als integrierten Algorithmus

    Sie können den integrierten XGBoost-Algorithmus zur Erstellung eines XGBoost-Trainingscontainers verwenden wie im folgenden Codebeispiel gezeigt. Mithilfe der API können Sie den Bild-URI des integrierten XGBoost-Algorithmus automatisch erkennen. SageMaker image_uris.retrieve Wenn Sie Amazon SageMaker Python SDK Version 1 verwenden, verwenden Sie die get_image_uri API. Um sicherzustellen, dass die image_uris.retrieve API den richtigen URI findet, finden Sie unter Allgemeine Parameter für integrierte Algorithmen. Suchen Sie dann in xgboost der vollständigen Liste der integrierten Algorithmus-Image-URIs und der verfügbaren Regionen nach.

    Nachdem Sie den XGBoost-Image-URI angegeben haben, verwenden Sie den XGBoost-Container, um mithilfe der Estimator-API einen Schätzer zu erstellen und einen Trainingsjob zu SageMaker starten. Dieser integrierte XGBoost-Algorithmusmodus integriert nicht Ihr XGBoost-Trainingsskript und wird direkt auf den Eingabedatensätzen ausgeführt.

    Wichtig

    Wenn Sie den SageMaker XGBoost-Image-URI abrufen, verwenden Sie nicht or für das Image-URI-Tag. :latest :1 Sie müssen einen von den angeben, Unterstützte Versionen um den SageMaker -verwalteten XGBoost-Container mit der nativen XGBoost-Paketversion auszuwählen, die Sie verwenden möchten. Informationen zur Paketversion, die in die SageMaker XGBoost-Container migriert wurde, finden Sie unter Docker-Registrierungspfade und Beispielcode. Wählen Sie dann Ihre AWS-Region aus und navigieren Sie zum Abschnitt XGBoost (Algorithmus).

    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})

    Weitere Informationen zum Einrichten von XGBoost als integriertem Algorithmus finden Sie in den folgenden Notebook-Beispielen.

Eingabe-/Ausgabeschnittstelle für den XGBoost-Algorithmus

Gradient Boosting arbeitet mit tabellarischen Daten, wobei die Zeilen die Beobachtungen repräsentieren, eine Spalte die Zielvariable oder die Kennzeichnung darstellt und die verbleibenden Spalten die Funktionen.

Die SageMaker Implementierung von XGBoost unterstützt die folgenden Datenformate für Training und Inferenz:

  • text/libsvm (Standard)

  • text/csv

  • application/x-parquet

  • Anwendung/ x-recordio-protobuf

Anmerkung

In Bezug auf Training und Inferenz sind einige Überlegungen zu beachten:

  • Für eine höhere Leistung empfehlen wir die Verwendung von XGBoost mit dem Dateimodus, in dem Ihre Daten von Amazon S3 auf den Volumes der Trainingsinstanz gespeichert werden.

  • Für Trainings mit spaltenförmiger Eingabe geht der Algorithmus davon aus, dass es sich bei der Zielvariablen (Label) um die erste Spalte handelt. Bei der Inferenz geht der Algorithmus davon aus, dass die Eingabe keine Kennzeichnungsspalte hat.

  • Bei CSV-Daten sollte die Eingabe keinen Header-Datensatz enthalten.

  • Für das LIBSVM-Training geht der Algorithmus davon aus, dass die nachfolgenden Spalten nach der Labelspalte die auf Null basierenden Indexwertpaare für Features enthalten. Folglich hat jede Zeile das Format: : <label> <index0>:<value0> <index1>:<value1>.

  • Informationen zu Instance-Typen und verteiltem Training finden Sie unter Empfehlung für eine EC2-Instanz für den XGBoost-Algorithmus.

Für den CSV-Trainingseingabemodus muss der Gesamtspeicher, der dem Algorithmus zur Verfügung steht, in der Lage sein, den Trainingsdatensatz aufzunehmen. Der insgesamt verfügbare Speicher wird wie folgt berechnetInstance Count * the memory available in the InstanceType. Für den libsvm-Trainingseingabemodus ist dies nicht erforderlich, aber empfehlenswert.

Für v1.3-1 und höher speichert SageMaker XGBoost das Modell im internen XGBoost-Binärformat unter Verwendung von. Booster.save_model Frühere Versionen verwenden das Python-Pickle-Modul, um das Modell zu serialisieren/deserialisieren.

Anmerkung

Achten Sie bei der Verwendung eines XGBoost-Modells in SageMaker Open-Source-XGBoost auf Versionen. Versionen 1.3-1 und höher verwenden das interne XGBoost-Binärformat, während frühere Versionen das Python-Pickle-Modul verwenden.

Um ein Modell zu verwenden, das mit SageMaker XGBoost v1.3-1 oder höher in Open-Source-XGBoost trainiert wurde
  • Verwenden Sie den folgenden Python-Code:

    import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(model_file_path) xgb_model.predict(dtest)
Um ein Modell zu verwenden, das mit früheren Versionen von SageMaker XGBoost trainiert wurde, in Open-Source-XGBoost
  • Verwenden Sie den folgenden Python-Code:

    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)
Zur Differenzierung der Bedeutung von markierten Datenpunkten verwenden Sie die Instance-Gewichtungsunterstützung.
  • SageMaker XGBoost ermöglicht es Kunden, die Bedeutung von markierten Datenpunkten zu unterscheiden, indem sie jeder Instanz einen Gewichtungswert zuweisen. Für text/libsvm-Eingaben können Kunden Daten-Instances Gewichtungswerte zuweisen, indem Sie sie nach den Bezeichnungen anfügen. z. B. label:weight idx_0:val_0 idx_1:val_1.... Für text/csv-Eingaben müssen Kunden das csv_weights-Flag in den Parametern aktivieren und Gewichtungswerte in der Spalte nach den Bezeichnungen anfügen. Beispiel: label,weight,val_0,val_1,...).

Empfehlung für eine EC2-Instanz für den XGBoost-Algorithmus

SageMaker XGBoost unterstützt CPU- und GPU-Training und -Inferenz. Die Instance-Empfehlungen hängen von den Trainings- und Inferenzanforderungen sowie von der Version des XGBoost-Algorithmus ab. Wählen Sie eine der folgenden Optionen aus, um mehr Informationen zu erhalten:

Training

Der SageMaker XGBoost-Algorithmus unterstützt CPU- und GPU-Training.

CPU-Training

SageMaker XGBoost 1.0-1 oder früher trainiert nur mit CPUs. Es handelt sich um einen speichergebundenen Algorithmus (im Gegensatz zu einem rechnergebundenen). Daher ist eine Allzweck-Datenverarbeitungs-Instance (z. B. M5) die bessere Wahl gegenüber einer rechneroptimierten Instance (z. B. C4). Des Weiteren empfehlen wir, dass Sie in ausgewählten Instances genügend Gesamtspeicher zur Verfügung haben, um das Trainingsdaten aufzunehmen. Es unterstützt die Verwendung von Festplattenspeicher zur Verarbeitung von Daten, die nicht in den Hauptspeicher passen. Dies ist ein Ergebnis der out-of-core Funktion, die im libsvm-Eingabemodus verfügbar ist. Trotzdem verlangsamt das Schreiben von Cache-Dateien auf die Festplatte die Verarbeitungszeit des Algorithmus.

GPU-Training

SageMaker XGBoost Version 1.2-2 oder höher unterstützt GPU-Training. Trotz höherer Kosten pro Instance trainieren GPUs schneller und sind damit kostengünstiger.

SageMaker XGBoost Version 1.2-2 oder höher unterstützt die GPU-Instanzfamilien P2, P3, G4dn und G5.

SageMaker XGBoost Version 1.7-1 oder höher unterstützt die GPU-Instanzfamilien P3, G4dn und G5. Beachten Sie, dass Version 1.7-1 oder höher aufgrund von Rechenkapazitätsanforderungen die P2-Instance-Familie nicht unterstützt.

Um die Vorteile des GPU-Trainings zu nutzen:

  • Geben Sie den Instanztyp als eine der GPU-Instanzen an (z. B. P3)

  • Stellen Sie den tree_method Hyperparameter gpu_hist in Ihrem vorhandenen XGBoost-Skript auf ein

Verteilte Trainings

SageMaker XGBoost unterstützt CPU- und GPU-Instanzen für verteiltes Training.

Verteilte GPU-Training

Um das CPU-Training auf mehreren Instances auszuführen, setzen Sie den instance_count Parameter für die Schätzfunktion auf einen Wert größer als eins. Die Eingabedaten müssen auf die Gesamtzahl der Instances aufgeteilt werden.

Teilen Sie die Eingabedaten auf mehrere Instances auf

Teilen Sie die Eingabedaten mithilfe der folgenden Schritte auf:

  1. Teilen Sie die Eingabedaten in kleinere Dateien auf. Die Anzahl der Dateien sollte mindestens der Anzahl der Instances entsprechen, die für verteilte Trainings verwendet werden. Durch die Verwendung mehrerer kleinerer Dateien im Gegensatz zu einer großen Datei wird auch die Zeit für das Herunterladen von Daten für den Trainingsauftrag verringert.

  2. Stellen Sie bei der Erstellung Ihres TrainingInputden Verteilungsparameter auf ein. ShardedByS3Key Damit erhält jede Instanz ungefähr 1/n der Anzahl der Dateien in S3, wenn im Trainingsjob n Instanzen angegeben sind.

Verteiltes GPU-Training

Sie können verteilte Trainings entweder mit einer oder mehreren GPU-Instances verwenden.

Verteiltes Training mit Einzel-GPU-Instances

SageMaker Die XGBoost-Versionen 1.2-2 bis 1.3-1 unterstützen nur das Training mit einer GPU-Instanz. Das bedeutet, dass selbst wenn Sie eine Multi-GPU-Instance auswählen, nur eine GPU pro Instance verwendet wird.

Sie müssen Ihre Eingabedaten auf die Gesamtzahl der Instanzen aufteilen, wenn:

  • Sie verwenden die XGBoost-Versionen 1.2-2 bis 1.3-1.

  • Sie müssen keine Multi-GPU-Instanzen verwenden.

Weitere Informationen finden Sie unter Teilen Sie die Eingabedaten auf mehrere Instances auf.

Anmerkung

Die Versionen 1.2-2 bis 1.3-1 von SageMaker XGBoost verwenden nur eine GPU pro Instanz, selbst wenn Sie eine Multi-GPU-Instanz wählen.

Verteilte Trainings mit Einzel-GPU-Instances

Ab Version 1.5-1 bietet XGBoost verteiltes GPU-Training mit Dask an. SageMaker Mit Dask können Sie alle GPUs nutzen, wenn Sie eine oder mehrere Multi-GPU-Instances verwenden. Dask funktioniert auch bei der Verwendung von Single-GPU-Instances.

Trainieren Sie mit Dask und gehen Sie dazu wie folgt vor:

  1. Lassen Sie den distribution Parameter entweder in Ihrem weg oder setzen Sie ihn auf. TrainingInputFullyReplicated

  2. Stellen Sie bei der Definition Ihrer Hyperparameter use_dask_gpu_training bis "true" ein.

Wichtig

Das verteilte Training mit Dask unterstützt nur die Eingabeformate CSV und Parquet. Wenn Sie andere Datenformate wie LIBSVM oder PROTOBUF verwenden, schlägt der Trainingsauftrag fehl.

Stellen Sie bei Parquet-Daten sicher, dass die Spaltennamen als Zeichenfolgen gespeichert werden. Spalten, die Namen anderer Datentypen haben, können nicht geladen werden.

Wichtig

Das verteilte Training mit Dask unterstützt den Pipe-Modus nicht. Wenn der Pipe-Modus angegeben ist, schlägt der Trainingsauftrag fehl.

Beim Training von SageMaker XGBoost mit Dask sind einige Überlegungen zu beachten. Achten Sie darauf, Ihre Daten in kleinere Dateien aufzuteilen. Dask liest jede Parquet-Datei als Partition. Für jede GPU gibt es einen Dask-Worker. Daher sollte die Anzahl der Dateien größer sein als die Gesamtzahl der GPUs (Anzahl der Instanzen x Anzahl der GPUs pro Instanz). Eine sehr große Anzahl von Dateien kann auch die Leistung beeinträchtigen. Weitere Informationen finden Sie unter Bewährte Methoden für Dask.

Variationen in der Ausgabe

Der angegebene tree_method Hyperparameter bestimmt den Algorithmus, der für die XGBoost-Training verwendet wird. Bei den Baummethoden approx, hist und gpu_hist handelt es sich allesamt um Näherungsmethoden, bei denen das Skizzieren zur Quantilberechnung verwendet wird. Weitere Informationen finden Sie unter Baummethoden in der MySQL-Dokumentation. Beim Skizzieren handelt es sich um einen Näherungsalgorithmus. Daher ist mit Abweichungen im Modell zu rechnen, die von Faktoren wie der Anzahl der Mitarbeiter abhängen, die für verteilte Trainings ausgewählt wurden. Die Signifikanz der Variation ist datenabhängig.

Inferenz

SageMaker XGBoost unterstützt CPU- und GPU-Instanzen für Inferenz. Informationen zu den Instance-Typen, für die Inferenz verwendet werden kann, finden Sie unter Amazon SageMaker ML-Instance-Typen.

XGBoost-Beispiel-Notebooks

In der folgenden Tabelle sind verschiedene Beispielnotizbücher aufgeführt, die sich mit verschiedenen Anwendungsfällen des Amazon SageMaker XGBoost-Algorithmus befassen.

Titel des Notebooks Beschreibung

Wie erstelle ich einen benutzerdefinierten XGBoost-Container?

Dieses Notizbuch zeigt Ihnen, wie Sie mit Amazon SageMaker Batch Transform einen benutzerdefinierten XGBoost-Container erstellen.

Regression mit XGBoost unter Verwendung von Parquet

Dieses Notebook zeigt Ihnen, wie Sie den Abalone-Datensatz in Parquet verwenden, um ein XGBoost-Modell zu trainieren.

Wie trainiert und hostet man ein Mehrklassen-Klassifizierungsmodell?

In diesem Notebook wird gezeigt, wie der MNIST-Datensatz verwendet wird, um ein Mehrklassen-Klassifizierungsmodell zu trainieren und zu hosten.

Wie trainiert man ein Modell für die Vorhersage der Kundenabwanderung?

In diesem Notebook erfahren Sie, wie Sie ein Modell so trainieren, dass es die Abwanderung mobiler Kunden vorhersagt, um unzufriedene Kunden zu identifizieren.

Eine Einführung in die Amazon SageMaker Managed Spot-Infrastruktur für XGBoost Training

Dieses Notebook zeigt Ihnen, wie Sie Spot-Instances für Trainings mit einem XGBoost-Container verwenden.

Wie verwende ich Amazon SageMaker Debugger zum Debuggen von XGBoost Training Jobs?

Dieses Notizbuch zeigt Ihnen, wie Sie Amazon SageMaker Debugger verwenden, um Trainingsjobs zu überwachen und Inkonsistenzen mithilfe integrierter Debugging-Regeln zu erkennen.

Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instances, in denen Sie das Beispiel ausführen können, finden Sie unter. SageMaker Amazon SageMaker Notebook-Instances Nachdem Sie eine Notebook-Instanz erstellt und geöffnet haben, wählen Sie die Registerkarte SageMakerBeispiele, um eine Liste aller Beispiele anzuzeigen. SageMaker Die Beispiel-Notebooks zur Themenmodellierung unter Verwendung des Algorithmus für lineares Lernen finden Sie im Abschnitt Einführung in die Amazon-Algorithmen. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Verwenden und dann Kopie erstellen aus.

Weitere Informationen zum Amazon SageMaker XGBoost-Algorithmus finden Sie in den folgenden Blogbeiträgen: