Training mit dem integrierten verteilten XGBoost-Algorithmus

Wenn Sie integrierte Algorithmen für das Training in AI Platform Training verwenden, können Sie Ihr Dataset zum Trainieren eines Modells einreichen, ohne Trainingscode schreiben zu müssen. Auf dieser Seite werden die Funktionsweise und die Verwendung des integrierten verteilten XGBoost-Algorithmus erläutert.

Überblick

Der integrierte verteilte XGBoost-Algorithmus ist ein Wrapper für den Algorithmus XGBoost, der für die Ausführung in AI Platform Training geeignet ist.

Im Gegensatz zum integrierten XGBoost-Algorithmus mit einem einzigen Replikat können Sie mit diesem Algorithmus mehrere virtuelle Maschinen parallel zum Trainieren großer Datasets verwenden. Bei diesem Algorithmus können Sie auch GPUs für das Training verwenden, was den Trainingsprozess beschleunigen kann.

AI Platform Training führt das Training mit dem verteilten XGBoost-Algorithmus anhand Ihres Datasets und Ihrer Modellparameter durch. Die derzeitige Implementierung basiert auf der XGBoost-Version 0.81.

Beschränkungen

Die folgenden Features werden für das Training mit dem integrierten verteilten XGBoost-Algorithmus nicht unterstützt:

Unterstützte Maschinentypen

Sie können mit diesem Algorithmus jede beliebige AI Platform Training-Skalierungsstufe oder eine gültige Kombination von Maschinentypen verwenden, sofern Ihre Konfiguration die folgenden Anforderungen erfüllt:

  • Geben Sie einen Master-Worker und mindestens einen Worker an.
  • Die beste Leistung erzielen Sie, wenn Sie für den Master-Worker und für Worker denselben Maschinentyp angeben.
  • Geben Sie keine Parameterserver an.
  • Achten Sie darauf, dass der Gesamtarbeitsspeicher der virtuellen Maschinen, den Sie angeben, mindestens 20 % größer als die Gesamtdateigröße Ihrer Trainingsdaten ist. Dadurch können virtuelle Maschinen alle Trainingsdaten in den Arbeitsspeicher laden und zusätzlichen Arbeitsspeicher für das Training nutzen.
  • Wenn Sie GPUs verwenden, achten Sie darauf, dass jede virtuelle Maschine nur eine einzige GPU verwendet und die gleiche Art von GPU für den Master-Worker und die Worker nutzt. Achten Sie darauf, dass der Maschinentyp, den Sie angegeben haben, die GPU-Konfiguration unterstützt.
  • Verwenden Sie keine TPUs.

Eingabedaten formatieren

Der integrierte verteilte XGBoost-Algorithmus arbeitet mit numerischen Tabellendaten. Jede Zeile eines Datasets stellt eine Instanz dar und jede Spalte eines Datasets einen Featurewert. Die Zielspalte enthält den Wert, den Sie vorhersagen möchten.

CSV-Dateien vorbereiten

Ihre Eingabedaten müssen in einer oder in mehreren CSV-Dateien mit UTF-8-Codierung vorliegen. Jede Datei muss die folgenden Anforderungen erfüllen:

  • Die CSV-Dateien dürfen keine Kopfzeile enthalten. Wenn Ihre Spalten in den CSV-Dateien Kopfzeilen haben, entfernen Sie diese Zeile aus jeder Datei.
  • Die Zielspalte muss die erste Spalte sein.
  • Bei Klassifizierungs-Trainingsjobs darf die Zielspalte keine nicht numerischen Werte enthalten. Alle anderen Spalten dürfen nur numerische Daten enthalten.
  • Achten Sie bei Regressions-Trainingsjobs darauf, Ihre Zielwerte so zu normalisieren, dass jeder Wert zwischen 0 und 1 liegt. Alle anderen Spalten dürfen nur numerische Daten enthalten.

Daten für verteiltes Training aufteilen

Wenn Sie beim Senden eines Trainingsjobs Daten aus mehreren CSV-Dateien bereitstellen möchten, verwenden Sie Platzhalter in den Cloud Storage-Pfaden, die Sie für die Argumente training_data_path und validation_data_path angeben. Alle CSV-Dateien müssen das gleiche Spaltenschema verwenden und die im vorherigen Abschnitt beschriebenen Anforderungen erfüllen.

Der integrierte verteilte XGBoost-Algorithmus verteilt Ihre Trainingsdaten auf eine der folgenden Arten auf virtuelle Maschinen:

  • Wenn die Anzahl der CSV-Dateien größer oder gleich der Anzahl der virtuellen Maschinen ist, verteilt der Algorithmus die Daten nach Datei in Round-Robin-Reihenfolge. Mit anderen Worten, der Master-Worker lädt die erste CSV-Datei, der erste Worker lädt die zweite CSV-Datei und so weiter. Diese Methode zum Zuordnen von Dateien wiederholt sich, sodass jede virtuelle Maschine ungefähr die gleiche Anzahl von Dateien lädt.

  • Wenn die Anzahl der CSV-Dateien kleiner als die Anzahl der virtuellen Maschinen ist, verteilt der Algorithmus die Daten nach Instanz in Round-Robin-Reihenfolge. Mit anderen Worten, der Master-Worker lädt die erste Zeile jeder CSV-Datei, der erste Worker lädt die zweite Zeile jeder CSV-Datei und so weiter. Diese Methode zum Zuordnen von Instanzen wiederholt sich, sodass jede virtuelle Maschine ungefähr die gleiche Anzahl von Instanzen lädt.

Wenn Sie das Argument validation_data_path angeben, lädt der Algorithmus die Validierungsdaten ebenfalls auf eine dieser Arten. Beachten Sie jedoch, dass der Algorithmus Trainings- und Validierungsdaten unabhängig voneinander lädt. Wenn Sie beispielsweise viele Trainingsdatendateien, aber nur eine Validierungsdatendatei bereitstellen, lädt der Algorithmus möglicherweise die Trainingsdaten nach Datei und die Validierungsdaten nach Instanz.

Die beste Leistung erzielen Sie, wenn Sie die Trainingsdaten in mehrere CSV-Dateien aufteilen, die die folgenden Richtlinien erfüllen:

  • Jede Datei hat eine Größe von weniger als 1 GB.
  • Jede Datei enthält ungefähr die gleiche Anzahl von Instanzen.
  • Die Anzahl der Dateien kann durch die Gesamtzahl der virtuellen Maschinen geteilt werden. Wenn Sie beispielsweise mit einem Master und zwei Workers trainieren, ist die Anzahl der Dateien ein Vielfaches von 3.

Cloud Storage-Bucket-Berechtigungen prüfen

Speichern Sie Ihre Daten in einem Cloud Storage-Bucket desselben Google Cloud-Projekts, in dem Sie AI Platform Training-Jobs ausführen. Andernfalls gewähren Sie AI Platform Training Zugriff auf den Cloud Storage-Bucket, in dem Ihre Daten gespeichert sind.

GPUs verwenden

Wie im vorherigen Abschnitt zu Maschinentypen beschrieben, unterstützt der integrierte verteilte XGBoost-Algorithmus die Verwendung einer einzelnen GPU pro virtueller Maschine für das Training.

Legen Sie den Hyperparameter tree_method auf gpu_exact oder gpu_hist fest, wenn Sie Ihren Trainingsjob einreichen, um GPUs zu nutzen.

Weitere Informationen zur Unterstützung von XGBoost für GPUs

Verteilten XGBoost-Trainingsjob senden

In diesem Abschnitt wird erläutert, wie Sie einen integrierten verteilten XGBoost-Trainingsjob senden. Verwenden Sie die Google Cloud Console oder die Google Cloud CLI, um Ihren Job zu senden.

Ausführliche Beschreibungen von Hyperparametern und anderen Argumenten, die Sie für diesen Algorithmus anpassen können, finden Sie in der Referenz für den integrierten verteilten XGBoost-Algorithmus.

Im folgenden Beispiel wird davon ausgegangen, dass Sie einen Klassifikator für Zensusdaten trainieren, den Sie in drei Trainingsdatendateien und drei Validierungsdatendateien aufgeteilt haben:

  • train-0.csv
  • train-1.csv
  • train-2.csv
  • eval-0.csv
  • eval-1.csv
  • eval-2.csv

Wir nehmen an, dass keine dieser Dateien Kopfzeilen enthält und Sie sie in Cloud Storage hochgeladen haben. Im Beispiel wird ein Trainingsjob erstellt, der drei virtuelle Maschinen verwendet, von denen jede eine NVIDIA Tesla P100-GPU verwendet. Der Job wird in der Region us-central1 ausgeführt.

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die AI Platform Training-Seite Jobs auf:

    Seite "Jobs" unter "AI Platform Training"

  2. Klicken Sie auf die Schaltfläche Neuer Trainingsjob. Klicken Sie in den darunter angezeigten Optionen auf Integriertes Algorithmustraining.

  3. Öffnen Sie auf der Seite Neuen Trainingsjob erstellen die Drop-down-Liste Algorithmus auswählen und wählen Sie Verteiltes XGBoost aus. Klicken Sie auf Weiter.

  4. Wählen Sie im Bereich Trainingsdaten aus der Drop-down-Liste die Option Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden aus. Wählen Sie im Feld Verzeichnispfad das Cloud Storage-Verzeichnis aus, das Ihre Trainingsdateien enthält. Geben Sie im Feld Platzhaltername train-*.csv ein.

  5. Wählen Sie im Bereich Validierungsdaten (optional) aus der Drop-down-Liste die Option Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden aus. Verwenden Sie das Feld Verzeichnispfad, um das Cloud Storage-Verzeichnis auszuwählen, das Ihre Validierungsdateien enthält. Geben Sie im Feld Platzhaltername eval-*.csv ein.

  6. Verwenden Sie im Bereich Trainingsausgabe das Feld Ausgabeverzeichnis, um ein separates Verzeichnis in Ihrem Cloud Storage-Bucket auszuwählen, in dem die Trainingsausgabe gespeichert werden soll. Klicken Sie auf Weiter.

  7. Passen Sie die Algorithmusargumente für Ihren Trainingsjob an oder behalten Sie die Standardwerte bei. Weitere Informationen zu den Argumenten finden Sie unter den Links in der Google Cloud Console und in der Referenz zum integrierten verteilten XGBoost-Algorithmus. Klicken Sie auf Weiter.

  8. Geben Sie einen Namen Ihrer Wahl in das Feld Job-ID ein. Wählen Sie im Drop-down-Menü Region us-central1 aus.

    Wählen Sie in der Drop-down-Liste Skalierungsstufe die Option CUSTOM aus. Wählen Sie im Abschnitt Benutzerdefinierte Clusterkonfiguration in den Drop-down-Listen Master-Typ und Worker-Typ den Wert standard_p100 aus. Geben Sie im Feld Anzahl der Worker 2 ein. Klicken Sie auf Fertig.

  9. Klicken Sie auf der Seite Jobs auf die ID Ihres neuen Jobs, um die Seite Jobdetails zu sehen. Klicken Sie anschließend auf Logs ansehen, um Trainingslogs aufzurufen.

gcloud-Tool

  1. Legen Sie Umgebungsvariablen für Ihren Job fest. Ersetzen Sie dabei BUCKET durch den Namen Ihres Cloud Storage-Buckets und DATA_DIRECTORY durch den Pfad zu dem Verzeichnis in Ihrem Bucket, das Ihre Daten enthält:

    # Specify the Docker container for your built-in algorithm selection.
    IMAGE_URI='gcr.io/cloud-ml-algos/xgboost_dist:latest'
    
    # Specify the Cloud Storage wildcard paths to your training and validation data.
    TRAINING_DATA='gs://BUCKET/DATA_DIRECTORY/train-*.csv'
    VALIDATION_DATA='gs://BUCKET/DATA_DIRECTORY/eval-*.csv'
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME='census'
    ALGORITHM='xgboost_dist'
    MODEL_TYPE='classification'
    DATE='date '+%Y%m%d_%H%M%S''
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://BUCKET/algorithm_training/${MODEL_NAME}/${DATE}"
    
  2. Senden Sie den Trainingsjob mit dem Befehl gcloud ai-platform jobs training submit:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=us-central1 \
      --master-image-uri=$IMAGE_URI \
      --job-dir=$JOB_DIR \
      --scale-tier=CUSTOM \
      --master-machine-type=n1-standard-4 \
      --master-accelerator count=1,type=nvidia-tesla-p100 \
      --worker-machine-type=n1-standard-4 \
      --worker-count=2 \
      --worker-accelerator count=1,type=nvidia-tesla-p100 \
      -- \
      --training_data_path=$TRAINING_DATA \
      --validation_data_path=$VALIDATION_DATA \
      --objective=binary:logistic \
      --tree_method=gpu_hist
    
  3. Prüfen Sie den Status Ihres Trainingsjobs. Rufen Sie dazu Logs mit gcloud auf. Weitere Informationen finden Sie unter gcloud ai-platform jobs describe und gcloud ai-platform jobs stream-logs.

    gcloud ai-platform jobs describe ${JOB_ID}
    gcloud ai-platform jobs stream-logs ${JOB_ID}
    

Nächste Schritte