Training mit XGBoost in AI Platform

Der Trainingsdienst von AI Platform verwaltet Rechenressourcen in der Cloud, um Ihre Modelle zu trainieren. Auf dieser Seite erfahren Sie, wie Sie ein XGBoost-Modell mit AI Platform trainieren.

In dieser Anleitung wird ein einfaches Modell zur Vorhersage des Einkommensniveaus einer Person basierend auf dem Census Income Data Set (Dataset zur Einkommenserhebung) trainiert. Sie erstellen dabei lokal eine Trainingsanwendung, laden diese in Cloud Storage hoch und senden einen Trainingsjob. Der AI Platform-Trainingsdienst schreibt dann die Ausgabe in Ihren Cloud Storage-Bucket und erstellt Logs in Logging.

Dieser Inhalt sind auch auf GitHub als Jupyter Notebook verfügbar.

Modell in AI Platform trainieren

So trainieren Sie Ihr Modell in AI Platform in drei Schritten:

  • Python-Modelldatei erstellen
    • Fügen Sie Code zum Herunterladen Ihrer Daten aus Cloud Storage hinzu, damit AI Platform sie verwenden kann
    • Fügen Sie Code hinzu, um das Modell nach Abschluss des Trainings in AI Platform zu exportieren und in Cloud Storage zu speichern
  • Trainingsanwendungspaket vorbereiten
  • Trainingsjob senden

Vorbereitung

Führen Sie folgende Schritte aus, um ein GCP-Konto einzurichten, die AI Platform API zu aktivieren und das Cloud SDK zu installieren und zu aktivieren.

GCP-Projekt einrichten

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie ein Google Cloud Platform-Projekt aus oder erstellen Sie eines.

    Zur Seite "Ressourcen verwalten"

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist.

    Informationen zum Aktivieren der Abrechnung

  4. Aktivieren Sie die AI Platform ("Cloud Machine Learning Engine") and Compute Engine erforderlichen APIs.

    Aktivieren Sie die APIs.

  5. Installieren und initialisieren Sie das Cloud SDK.

Umgebung einrichten

Wählen Sie eine der folgenden Optionen aus, um Ihre Umgebung lokal auf macOS oder in einer Remoteumgebung in Cloud Shell einzurichten.

Nutzern von macOS wird empfohlen, ihre Umgebung mit dem Tab MACOS einzurichten. Cloud Shell ist unter macOS, Linux und Windows verfügbar. Die entsprechende Anleitung finden Sie auf dem Tab CLOUD SHELL. Cloud Shell bietet eine schnelle Möglichkeit für den Test von AI Platform, eignet sich jedoch nicht für fortlaufende Entwicklungsarbeiten.

macOS

  1. Python-Installation überprüfen
    Prüfen Sie, ob Python installiert ist, und installieren Sie es gegebenenfalls.

    python -V
  2. pip-Installation überprüfen
    pip ist der Paketmanager von Python, der in aktuellen Versionen von Python enthalten ist. Mit pip --version können Sie prüfen, ob pip bereits installiert ist. Ist dies nicht der Fall, lesen Sie die Anleitung zum Installieren von pip.

    Mit dem folgenden Befehl können Sie ein Upgrade von pip ausführen:

    pip install -U pip

    Weitere Informationen finden Sie in der Dokumentation zu pip.

  3. virtualenv installieren
    virtualenv ist ein Tool, mit dem sich isolierte Python-Umgebungen erstellen lassen. Überprüfen Sie mit virtualenv --version, ob virtualenv bereits installiert ist. Ist dies nicht der Fall, installieren Sie virtualenv:

    pip install --user --upgrade virtualenv

    Zur Einrichtung einer isolierten Entwicklungsumgebung für diese Anleitung erstellen Sie in virtualenv eine neue virtuelle Umgebung. Mit dem folgenden Befehl wird beispielsweise eine Umgebung mit dem Namen cmle-env aktiviert:

    virtualenv cmle-env
    source cmle-env/bin/activate
  4. Führen Sie für diese Anleitung die übrigen Befehle in Ihrer virtuellen Umgebung aus.

    Hier finden Sie weitere Informationen zur Verwendung von virtualenv. Führen Sie zum Beenden von virtualenv deactivate aus.

Cloud Shell

  1. Öffnen Sie die Google Cloud Platform Console.

    Zur Google Cloud Platform Console

  2. Klicken Sie im oberen Fensterbereich der Console auf Cloud Shell aktivieren.

    Google Cloud Shell aktivieren

    In einem neuen Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet und darin eine Eingabeaufforderung angezeigt. Die Initialisierung der Shell-Sitzung kann einige Sekunden dauern.

    Cloud Shell-Sitzung

    Die Cloud Shell-Sitzung kann jetzt verwendet werden.

  3. Konfigurieren Sie das Befehlszeilentool gcloud für die Verwendung Ihres ausgewählten Projekts:

    gcloud config set project [selected-project-id]

    Dabei ist [selected-project-id] die Projekt-ID. Geben Sie diese ohne die Klammern ein.

Google Cloud SDK-Komponenten überprüfen

So prüfen Sie, ob die Google Cloud SDK-Komponenten installiert sind:

  1. Listen Sie Ihre Modelle auf:

    gcloud ai-platform models list
  2. Wenn Sie noch keine Modelle erstellt haben, gibt der Befehl eine leere Liste zurück:

    Listed 0 items.

    Nach dem Erstellen von Modellen können Sie diese mit diesem Befehl auflisten.

  3. Wenn Sie gcloud schon installiert haben, aktualisieren Sie gcloud:

    gcloud components update

Frameworks installieren

macOS

Führen Sie in Ihrer virtuellen Umgebung den folgenden Befehl aus, um scikit-learn, XGBoost, pandas und joblib zu installieren:

(cmle-env)$ pip install scikit-learn xgboost pandas

Weitere Informationen, Hinweise zu weiteren Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in den Installationsanleitungen für die einzelnen Frameworks:

Cloud Shell

Führen Sie den folgenden Befehl aus, um scikit-learn, XGBoost, pandas und joblib zu installieren:

pip install --user scikit-learn xgboost pandas

Weitere Informationen, Hinweise zu weiteren Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in den Installationsanleitungen für die einzelnen Frameworks:

Cloud Storage-Bucket einrichten

Sie benötigen einen Cloud Storage-Bucket, in dem Trainingscode und Abhängigkeiten gespeichert werden. Für diese Anleitung ist es am einfachsten, wenn Sie einen dedizierten Cloud Storage-Bucket in demselben Projekt wie AI Platform verwenden.

Wenn Sie einen Bucket in einem anderen Projekt nutzen, müssen Sie dafür sorgen, dass Ihr AI Platform-Dienstkonto auf den Trainingscode und die Abhängigkeiten in Cloud Storage zugreifen kann. Ohne die entsprechenden Berechtigungen wird der Trainingsjob nicht ordnungsgemäß ausgeführt. Hier erfahren Sie, wie Sie Berechtigungen für den Speicher erteilen.

Achten Sie darauf, dass Sie einen Bucket in der Region verwenden oder einrichten, in der Sie auch die Trainingsjobs ausführen. Unter Verfügbare Regionen finden Sie Informationen zu den Regionen für AI Platform-Dienste.

In diesem Abschnitt wird gezeigt, wie Sie einen neuen Bucket erstellen. Sie können auch einen vorhandenen Bucket verwenden. Wenn er jedoch nicht Teil des zum Ausführen von AI Platform verwendeten Projekts ist, müssen Sie den AI Platform-Dienstkonten explizit Zugriff darauf gewähren.

  1. Geben Sie einen Namen für den neuen Bucket an. Der Name muss sich von allen anderen Bucket-Namen in Cloud Storage unterscheiden:

    BUCKET_NAME="your_bucket_name"

    Verwenden Sie beispielsweise den Projektnamen mit angehängtem -mlengine:

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-mlengine
  2. Überprüfen Sie den erstellten Bucket-Namen:

    echo $BUCKET_NAME
  3. Wählen Sie eine Region für den Bucket aus und legen Sie eine Umgebungsvariable REGION fest.

    Beispielsweise wird mit dem folgenden Code die Umgebungsvariable REGION erstellt und dafür als Wert us-central1 festgelegt:

    REGION=us-central1
  4. Erstellen Sie den neuen Bucket:

    gsutil mb -l $REGION gs://$BUCKET_NAME

    Hinweis: Verwenden Sie dieselbe Region, in der die AI Platform-Jobs ausgeführt werden sollen. Im Beispiel ist us-central1 angegeben, da diese Region im Startleitfaden verwendet wird.

Über die Daten

Das in diesem Beispiel für das Training verwendete Census Income Data Set (Dataset zur Einkommenserhebung) wird vom UC Irvine Machine Learning Repository gehostet.

Erhebungsdaten mit freundlicher Genehmigung von: Lichman, M. (2013). UCI Machine Learning Repository http://archive.ics.uci.edu/ml. Irvine, CA: University of California, School of Information and Computer Science. Dieses Dataset ist öffentlich verfügbar und kann unter den folgenden von der Dataset-Quelle angegebenen Bedingungen verwendet werden: http://archive.ics.uci.edu/ml. Das Dataset wird im vorhandenen Zustand ohne ausdrückliche oder stillschweigende Garantie von Google bereitgestellt. Google lehnt jegliche Haftung für direkte oder indirekte Schäden ab, die aus der Verwendung des Datasets resultieren.

Wir haben die Daten der Einfachheit halber in einem öffentlichen Cloud Storage-Bucket gehostet: gs://cloud-samples-data/ml-engine/sklearn/census_data/. Sie können diesen in Ihrer Python-Trainingsdatei herunterladen.

Python-Modelldatei erstellen

Sie finden den gesamten Trainingscode für diesen Abschnitt auf GitHub: train.py.

Im Rest dieses Abschnitts wird erläutert, wozu der Trainingscode dient.

Einrichtung

Importieren Sie die folgenden Bibliotheken aus Python, Cloud SDK, XGBoost und scikit-learn. Legen Sie eine Variable für den Namen Ihres Cloud Storage-Buckets fest.

import xgboost as xgb
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import subprocess
from google.cloud import storage

# Fill in your Cloud Storage bucket name
BUCKET_ID = <YOUR_BUCKET_NAME>

Daten aus Cloud Storage herunterladen

Im Rahmen eines typischen Entwicklungsprozesses laden Sie Ihre Daten in Cloud Storage hoch, damit AI Platform darauf zugreifen kann. Die Daten für diese Anleitung werden im öffentlichen Bucket gs://cloud-samples-data/ml-engine/sklearn/census_data/ gehostet.

Mit dem nachfolgenden Code laden Sie das Trainings-Dataset adult.data herunter. Bewertungsdaten sind in adult.test verfügbar, werden aber in dieser Anleitung nicht verwendet.

census_data_filename = 'adult.data.csv'

# Public bucket holding the census data
bucket = storage.Client().bucket('cloud-samples-data')

# Path to the data inside the public bucket
data_dir = 'ml-engine/census/data/'

# Download the data
blob = bucket.blob(''.join([data_dir, census_data_filename]))
blob.download_to_filename(census_data_filename)

Modellcode hinzufügen

Der Trainingscode für das Modell dient zum Ausführen grundlegender Schritte:

  • Daten definieren und laden
  • Kategoriale Merkmale in numerische Merkmale umwandeln
  • Numerische Merkmale in einer scikit-learn-Pipeline extrahieren
  • Modell in Cloud Storage exportieren und speichern

Daten definieren und laden

# these are the column labels from the census data files
COLUMNS = (
    'age',
    'workclass',
    'fnlwgt',
    'education',
    'education-num',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'capital-gain',
    'capital-loss',
    'hours-per-week',
    'native-country',
    'income-level'
)
# categorical columns contain data that need to be turned into numerical values before being used by XGBoost
CATEGORICAL_COLUMNS = (
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country'
)

# Load the training census dataset
with open(census_data_filename, 'r') as train_data:
    raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)
# remove column we are trying to predict ('income-level') from features list
train_features = raw_training_data.drop('income-level', axis=1)
# create training labels list
train_labels = (raw_training_data['income-level'] == ' >50K')

Kategoriale Merkmale in numerische Merkmale umwandeln

# Since the census data set has categorical features, we need to convert
# them to numerical values.
# convert data in categorical columns to numerical values
encoders = {col:LabelEncoder() for col in CATEGORICAL_COLUMNS}
for col in CATEGORICAL_COLUMNS:
    train_features[col] = encoders[col].fit_transform(train_features[col])

Modell trainieren und in Cloud Storage exportieren und speichern

# load data into DMatrix object
dtrain = xgb.DMatrix(train_features, train_labels)
# train model
bst = xgb.train({}, dtrain, 20)

Wenn sich der Cloud Storage-Bucket in dem Projekt befindet, das Sie für die AI Platform verwenden, hat die AI Platform Lese- und Schreibzugriff auf den Bucket. Wenn nicht, ist es wichtig, dass das für die Ausführung von AI Platform verwendete Projekt auf den Cloud Storage-Bucket zugreifen kann. Informationen zum Erteilen von Berechtigungen für den Speicher finden Sie unter Mit Cloud Storage arbeiten.

Achten Sie darauf, Ihre Modelldatei model.pkl, model.joblib oder model.bst zu benennen, wenn Sie sie dazu verwenden möchten, Onlinevorhersagen mit der AI Platform anzufordern.

# Export the model to a file
model = 'model.bst'
bst.save_model(model)

# Upload the model to GCS
bucket = storage.Client().bucket(BUCKET_ID)
blob = bucket.blob('{}/{}'.format(
    datetime.datetime.now().strftime('census_%Y%m%d_%H%M%S'),
    model))
blob.upload_from_filename(model)

Upload der Modelldatei in Cloud Storage prüfen (optional)

Prüfen Sie in der Befehlszeile anhand des Inhalts des Zielordners für das Modell, ob die Modelldatei in Cloud Storage hochgeladen wurde. Geben Sie für den Bucket-Namen die Umgebungsvariable BUCKET_ID an, falls Sie dies nicht bereits getan haben.

gsutil ls gs://$BUCKET_ID/census_*

Die Ausgabe sollte in etwa so aussehen:

gs://[YOUR-PROJECT-ID]/census_[DATE]_[TIME]/model.bst

Trainingsanwendungspaket erstellen

Die einfachste (und empfohlene) Methode zum Erstellen eines Trainingsanwendungspakets besteht darin, die Anwendung mit gcloud zu verpacken und hochzuladen, wenn Sie den Trainingsjob senden. Bei dieser Methode erstellen Sie eine sehr einfache Dateistruktur mit zwei Dateien. Für den Zweck dieser Anleitung sollte Ihr Trainingsanwendungspaket in etwa so aussehen:

census_training/
    __init__.py
    train.py
  1. Erstellen Sie ein lokales Verzeichnis:

    mkdir census_training
    
  2. Erstellen Sie eine leere Datei mit dem Namen __init__.py:

    touch census_training/__init__.py
    
  3. Speichern Sie den Trainingscode in einer Python-Datei, die Sie wiederum im Verzeichnis census_training speichern. Rufen Sie den Beispielcode für train.py auf. Sie können die Datei mit cURL herunterladen und speichern:

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/xgboost/notebooks/census_training/train.py > census_training/train.py
    

Weitere Informationen zum Verpacken einer Trainingsanwendung

Trainingsjob senden

In diesem Abschnitt senden Sie den Trainingsjob mit gcloud ai-platform jobs submit training.

Parameter für Trainingsjob festlegen

Legen Sie für jeden Parameter in Ihrer Trainingsjobanfrage die folgenden Umgebungsvariablen fest:

  • PROJECT_ID: Die PROJECT_ID, die Ihrem Google Cloud Platform-Projekt entspricht.
  • BUCKET_ID: Der Name Ihres Cloud Storage-Buckets.
  • JOB_NAME: Der für den Job zu verwendende, mit einem Buchstaben beginnende Name, bestehend aus Groß- und Kleinbuchstaben, Ziffern und Unterstrichen. In diesem Fall: census_training_$(date +"%Y%m%d_%H%M%S").
  • JOB_DIR: Der Pfad zu einem Cloud Storage-Speicherort, der für die Ausgabedateien des Trainingsjobs verwendet werden soll. Beispiel: gs://$BUCKET_ID/xgboost_job_dir
  • TRAINING_PACKAGE_PATH: Der lokale Pfad zum Stammverzeichnis der Trainingsanwendung. In diesem Fall: ./census_training/
  • MAIN_TRAINER_MODULE: Gibt an, welche Datei der Trainingsdienst von AI Platform ausführen soll. Dafür gilt folgendes Format: [YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]. In diesem Fall: census_training.train
  • REGION: Der Name der Region, in der Sie den Trainingsjob ausführen. Verwenden Sie dafür eine der verfügbaren Regionen für den Trainingsdienst von AI Platform. Achten Sie darauf, dass sich der Cloud Storage-Bucket in derselben Region befindet. Für diese Anleitung wird us-central1 genutzt.
  • RUNTIME_VERSION: Sie müssen eine AI Platform-Laufzeitversion angeben, die scikit-learn unterstützt. in diesem Beispiel 1.13.
  • PYTHON_VERSION: Die Python-Version, die für den Job verwendet werden soll. Python 3.5 ist mit AI Platform ab Version 1.4 verfügbar. Wenn Sie keine Python-Version angeben, verwendet der Trainingsdienst Python 2.7. Geben Sie für diese Anleitung Python 3.5 an.
  • SCALE_TIER: Eine vordefinierte Clusterspezifikation für Rechner, auf denen der Trainingsjob ausgeführt werden soll. In diesem Fall BASIC. Sie können mit benutzerdefinierten Skalierungsstufen auch eine eigene Clusterkonfiguration für das Training definieren.

Die Umgebungsvariablen für diese Anleitung sind unten aufgeführt. Ersetzen Sie [VALUES-IN-BRACKETS] dabei durch die entsprechenden Werte:

PROJECT_ID=[YOUR-PROJECT-ID]
BUCKET_ID=[YOUR-BUCKET-ID]
JOB_NAME=census_training_$(date +"%Y%m%d_%H%M%S")
JOB_DIR=gs://$BUCKET_ID/xgboost_job_dir
TRAINING_PACKAGE_PATH="[YOUR-LOCAL-PATH-TO-TRAINING-PACKAGE]/census_training/"
MAIN_TRAINER_MODULE=census_training.train
REGION=us-central1
RUNTIME_VERSION=1.13
PYTHON_VERSION=3.5
SCALE_TIER=BASIC

Senden Sie die Anfrage:

gcloud ai-platform jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE \
--region $REGION \
--runtime-version=$RUNTIME_VERSION \
--python-version=$PYTHON_VERSION \
--scale-tier $SCALE_TIER

Die Ausgabe sollte in etwa so aussehen:

Job [census_training_[DATE]_[TIME]] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe census_training_20180718_160825

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs census_training_[DATE]_[TIME]
jobId: census_training_[DATE]_[TIME]
state: QUEUED

Trainingslogs aufrufen (optional)

AI Platform erfasst alle stdout- und stderr-Streams und -Logberichte. Diese Logs werden in Stackdriver Logging gespeichert und sind sowohl während als auch nach der Ausführung sichtbar.

So zeigen Sie die Logs für Ihren Trainingsjob an:

Console

  1. Rufen Sie die AI Platform-Seite Jobs auf.

    Seite "Jobs" in der GCP Console aufrufen

  2. Wählen Sie den Namen des zu prüfenden Trainingsjobs aus. Dadurch gelangen Sie zur Seite Jobdetails für den ausgewählten Trainingsjob.

  3. Klicken Sie in den Jobdetails auf den Link Logs ansehen. Sie werden zur Logging-Seite weitergeleitet, auf der Sie Logs für den ausgewählten Trainingsjob suchen und filtern können.

gcloud

Sie können die Logs in Ihrem Terminal mit gcloud ai-platform jobs stream-logs aufrufen.

gcloud ai-platform jobs stream-logs $JOB_NAME

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

AI Platform für scikit-learn und XGBoost