ML-Modell mit scikit-learn und XGBoost trainieren
Der AI Platform-Trainingsdienst verwaltet die Rechenressourcen in der Cloud für das Training Ihrer Modelle. Auf dieser Seite wird das Verfahren zum Trainieren eines Modells mit scikit-learn und XGBoost in AI Platform Training beschrieben.
Übersicht
In dieser Anleitung trainieren Sie mit dem Iris-Dataset ein einfaches Modell zur Vorhersage von Blumenarten. Nachdem Sie Ihren Modelltrainingscode so angepasst haben, dass Daten aus Cloud Storage heruntergeladen und Ihre gespeicherte Modelldatei in Cloud Storage hochgeladen werden, erstellen Sie ein Trainingsanwendungspaket und verwenden es, um Trainings in AI Platform Training durchzuführen.
Modell in AI Platform Training trainieren
Nach der Ersteinrichtung können Sie Ihr Modell in AI Platform Training in drei Schritten trainieren:
- Python-Trainingsmodul erstellen
- Sie fügen Code zum Herunterladen Ihrer Daten aus Cloud Storage hinzu, damit AI Platform Training sie verwenden kann.
- Sie fügen Code hinzu, um das Modell nach Cloud Storage zu exportieren und dort zu speichern, wenn das Training in AI Platform Training beendet ist.
- Trainingsanwendungspaket vorbereiten
- Trainingsjob senden
Die Ersteinrichtung umfasst die Erstellung eines Google Cloud-Projekts, die Aktivierung der Abrechnung und von APIs, die Einrichtung eines Cloud Storage-Buckets für AI Platform Training und die lokale Installation von scikit-learn oder XGBoost. Wenn Sie bereits alles eingerichtet und installiert haben, fahren Sie mit Modelltrainingscode erstellen fort.
Hinweise
Führen Sie die folgenden Schritte aus, um ein GCP-Konto einzurichten, die AI Platform Training API zu aktivieren und das Cloud SDK zu installieren und zu aktivieren.
GCP-Projekt einrichten
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Umgebung einrichten
Wählen Sie eine der folgenden Optionen aus, um Ihre Umgebung entweder lokal auf macOS oder in einer Remote-Umgebung in Cloud Shell einzurichten.
Nutzern von macOS wird empfohlen, ihre Umgebung mit dem folgenden MACOS-Tab 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 Training, eignet sich jedoch nicht für fortlaufende Entwicklungsarbeiten.
macOS
-
Python-Installation prüfen.
Prüfen Sie, ob Python installiert ist, und installieren Sie es gegebenenfalls.python -V
-
pip
-Installation prüfen.
pip
ist der Paketmanager von Python, der in aktuellen Versionen von Python enthalten ist. Prüfen Sie, ob Siepip
bereits installiert haben. Dazu führen Siepip --version
aus. Ist das nicht der Fall, lesen Sie die Anleitung zum Installieren vonpip
.Mit diesem Befehl können Sie ein Upgrade von
pip
ausführen:pip install -U pip
Weitere Informationen finden Sie in der Dokumentation zu pip.
-
virtualenv
installieren
virtualenv
ist ein Tool, mit dem sich isolierte Python-Umgebungen erstellen lassen. Prüfen Sie, ob Sievirtualenv
bereits installiert haben. Dazu führen Sievirtualenv --version
aus. Ist dies nicht der Fall, installieren Sievirtualenv
: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 Namenaip-env
aktiviert:virtualenv aip-env source aip-env/bin/activate
-
Führen Sie für diese Anleitung die übrigen Befehle in Ihrer virtuellen Umgebung aus.
Hier finden Sie weitere Informationen zur Verwendung vonvirtualenv
. Zum Beenden vonvirtualenv
führen Siedeactivate
aus.
Cloud Shell
-
Öffnen Sie die Google Cloud Console.
-
Klicken Sie oben auf 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.
Die Cloud Shell-Sitzung kann jetzt verwendet werden.
-
Für die Verwendung Ihres ausgewählten Projekts konfigurieren Sie das
gcloud
-Befehlszeilentool.gcloud config set project [selected-project-id]
Dabei ist
[selected-project-id]
Ihre Projekt-ID. Diese geben Sie ohne die Klammern ein.
Frameworks installieren
macOS
Führen Sie den folgenden Befehl in Ihrer virtuellen Umgebung aus, um die Versionen von scikit-learn, XGBoost und pandas zu installieren, die in der Laufzeitversion 2.11 von AI Platform Training verwendet werden:
(aip-env)$ pip install scikit-learn==1.0.2 xgboost==1.6.2 pandas==1.3.5
Durch die Angabe von Versionsnummern im vorherigen Befehl sorgen Sie dafür, dass die Abhängigkeiten in Ihrer virtuellen Umgebung mit den Abhängigkeiten in der Laufzeitversion übereinstimmen. Dies verhindert unerwartetes Verhalten, wenn Ihr Code in AI Platform Training ausgeführt wird.
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 und pandas 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, um Trainingscode und Abhängigkeiten zu speichern. Für diese Anleitung ist es am einfachsten, wenn Sie einen dedizierten Cloud Storage-Bucket im selben Projekt wie AI Platform Training verwenden.
Wenn Sie einen Bucket in einem anderen Projekt verwenden, müssen Sie dafür sorgen, dass Ihr AI Platform Training-Dienstkonto auf Ihren Trainingscode und Ihre 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. Hier finden Sie die Regionen, in denen AI Training Platform-Dienste verfügbar sind.
In diesem Abschnitt erfahren Sie, wie Sie einen neuen Bucket erstellen. Sie können auch einen vorhandenen Bucket verwenden. Dieser muss sich aber in der Region befinden, in der Sie AI Platform-Jobs ausführen. Hinzu kommt: Wenn der Bucket nicht in dem Projekt ist, das Sie für die Ausführung von AI Platform Training verwenden, müssen Sie den AI Platform Training-Dienstkonten explizit Zugriff gewähren.
-
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"
Beispielsweise verwenden Sie den Projektnamen mit angehängtem
-aiplatform
:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
Prüfen Sie den erstellten Bucketnamen.
echo $BUCKET_NAME
-
Wählen Sie eine Region für den Bucket aus und legen Sie eine Umgebungsvariable
REGION
fest.Verwenden Sie die Region, in der Sie auch AI Platform Training-Jobs ausführen möchten. Hier finden Sie die Regionen, in denen AI Platform Training-Dienste verfügbar sind.
Mit dem folgenden Code wird beispielsweise
REGION
erstellt und dafürus-central1
festgelegt:REGION=us-central1
-
Erstellen Sie den neuen Bucket:
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
Python-Trainingsmodul erstellen
Erstellen Sie eine Datei namens iris_training.py
, die den Code zum Trainieren Ihres Modells enthält.
In diesem Abschnitt werden die Aufgaben der einzelnen Abschnitte des Trainingscodes erläutert:
- Einrichtung und Importe
- Herunterladen der Daten aus Cloud Storage
- Laden der Daten in Pandas
- Trainieren und Speichern des Modells
- Hochladen der Datei mit dem gespeicherten Modell zu Cloud Storage
Der Einfachheit halber ist der gesamte Code für iris_training.py
auf GitHub gehostet und kann für diese Anleitung verwendet werden:
Einrichtung
Importieren Sie die folgenden Bibliotheken aus Python und scikit-learn bzw. XGBoost. Legen Sie eine Variable für den Namen Ihres Cloud Storage-Buckets fest.
scikit-learn
XGBoost
Daten von Cloud Storage herunterladen
Im Rahmen eines typischen Entwicklungsprozesses laden Sie Ihre Daten in Cloud Storage hoch, damit AI Platform Training darauf zugreifen kann. Die Daten für diese Anleitung werden in einem öffentlichen Cloud Storage-Bucket gehostet: gs://cloud-samples-data/ai-platform/iris/
.
Mit dem folgenden Code lassen sich die Daten mit gsutil
herunterladen und dann von gsutil
an stdout
weiterleiten:
scikit-learn
XGBoost
Daten in Pandas laden
Verwenden Sie Pandas, um für das Training mit scikit-learn oder XGBoost Ihre Daten in NumPy-Arrays zu laden.
scikit-learn
XGBoost
Modell trainieren und speichern
Erstellen Sie ein Trainingsmodul zur Ausführung von AI Platform Training. In diesem Beispiel wird mit dem Trainingsmodul ein Modell mit den Iris-Trainingsdaten (iris_data
und iris_target
) trainiert und das trainierte Modell gespeichert. Dazu wird es in eine Datei exportiert. Wenn Sie über AI Platform Prediction Onlinevorhersagen nach dem Training erhalten möchten, müssen Sie Ihre Modelldatei entsprechend der Bibliothek benennen, die Sie zum Exportieren verwenden. Weitere Informationen zu den Anforderungen für die Benennung Ihrer Modelldatei.
scikit-learn
Gemäß dem scikit-learn-Beispiel zur Modellpersistenz können Sie ein Modell so trainieren und exportieren:
Sie haben auch die Möglichkeit, die Pickle-Bibliothek zu verwenden, um das Modell zu exportieren:
import pickle
with open('model.pkl', 'wb') as model_file:
pickle.dump(classifier, model_file)
XGBoost
Sie können das Modell mithilfe der Methode "save_model" des Booster-Objekts exportieren.
Sie haben auch die Möglichkeit, die Pickle-Bibliothek zu verwenden, um das Modell zu exportieren:
import pickle
with open('model.pkl', 'wb') as model_file:
pickle.dump(bst, model_file)
Anforderungen an die Benennung von Modelldateien
Bei Onlinevorhersagen muss je nach verwendeter Bibliothek die gespeicherte Modelldatei, die Sie in Cloud Storage hochladen, einen der folgenden Namen haben: model.pkl
, model.joblib
oder model.bst
. Diese Einschränkung sorgt dafür, dass AI Platform Prediction zur Modellrekonstruktion beim Importieren das gleiche Muster verwendet, das auch beim Exportieren verwendet wurde.
Die Anforderung gilt nicht, wenn Sie eine benutzerdefinierte Vorhersageroutine (Beta) erstellen.
scikit-learn
Zum Exportieren des Modells verwendete Bibliothek | Korrekter Modellname |
---|---|
pickle |
model.pkl |
sklearn.externals.joblib |
model.joblib |
XGBoost
Zum Exportieren des Modells verwendete Bibliothek | Korrekter Modellname |
---|---|
pickle |
model.pkl |
joblib |
model.joblib |
xgboost.Booster |
model.bst |
Organisieren Sie bei zukünftigen Iterationen Ihres Modells den Cloud Storage-Bucket so, dass jedes neue Modell ein eigenes Verzeichnis hat.
Gespeichertes Modell in Cloud Storage hochladen
Wenn Sie einen Cloud Storage-Bucket außerhalb des Google Cloud-Projekts verwenden, das Sie zum Ausführen von AI Platform Training verwenden, sorgen Sie dafür, dass AI Platform Training Zugriff auf Ihren Bucket hat.
scikit-learn
XGBoost
Trainingsanwendungspaket erstellen
Wenn Sie iris_training.py
mit den oben gezeigten Snippets erstellt haben, erstellen Sie ein Trainingsanwendungspaket und fügen iris_training.py
als Hauptmodul ein.
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.
scikit-learn
Für den Zweck dieser Anleitung sollte das Trainingsanwendungspaket in etwa so aussehen:
iris_sklearn_trainer/
__init__.py
iris_training.py
Erstellen Sie in der Befehlszeile lokal ein Verzeichnis:
mkdir iris_sklearn_trainer
Erstellen Sie eine leere Datei mit dem Namen
__init__.py
:touch iris_sklearn_trainer/__init__.py
Speichern Sie den Trainingscode als
iris_training.py
und speichern Sie diese Datei im Verzeichnisiris_sklearn_trainer
. Alternativ können Sie mitcURL
die Datei von GitHub herunterladen und speichern:curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/sklearn/iris_training.py > iris_sklearn_trainer/iris_training.py
Sehen Sie sich den vollständigen Quellcode auf GitHub an.
Überprüfen Sie, ob Ihr Trainingsanwendungspaket ordnungsgemäß eingerichtet ist:
ls ./iris_sklearn_trainer __init__.py iris_training.py
XGBoost
Für den Zweck dieser Anleitung sollte das Trainingsanwendungspaket in etwa so aussehen:
iris_xgboost_trainer/
__init__.py
iris_training.py
Erstellen Sie in der Befehlszeile lokal ein Verzeichnis:
mkdir iris_xgboost_trainer
Erstellen Sie eine leere Datei mit dem Namen
__init__.py
:touch iris_xgboost_trainer/__init__.py
Speichern Sie den Trainingscode als
iris_training.py
und speichern Sie diese Datei im Verzeichnisiris_xgboost_trainer
. Alternativ können Sie mitcURL
die Datei von GitHub herunterladen und speichern:curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/xgboost/iris_training.py > iris_xgboost_trainer/iris_training.py
Sehen Sie sich den vollständigen Quellcode auf GitHub an.
Überprüfen Sie, ob Ihr Trainingsanwendungspaket ordnungsgemäß eingerichtet ist:
ls ./iris_xgboost_trainer __init__.py iris_training.py
Weitere Informationen zum Verpacken einer Trainingsanwendung.
Trainingsanwendung lokal ausführen
Mit dem Befehl gcloud ai-platform local train
können Sie Ihre Trainingsanwendung lokal testen. Dieser Schritt ist optional, aber nützlich für die Fehlerbehebung.
scikit-learn
Legen Sie in der Befehlszeile die folgenden Umgebungsvariablen fest und ersetzen Sie [VALUES-IN-BRACKETS]
durch die entsprechenden Werte:
TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
Testen Sie Ihren Trainingsjob lokal:
gcloud ai-platform local train \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE
XGBoost
Legen Sie in der Befehlszeile die folgenden Umgebungsvariablen fest und ersetzen Sie [VALUES-IN-BRACKETS]
durch die entsprechenden Werte:
TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
Testen Sie Ihren Trainingsjob lokal:
gcloud ai-platform local train \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE
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:
BUCKET_NAME
: Der Name Ihres Cloud Storage-BucketsJOB_NAME
: Der für den Job zu verwendende, mit einem Buchstaben beginnende Name, bestehend aus Groß- und Kleinbuchstaben, Ziffern und Unterstrichen. Beispiel:iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")
oderiris_xgboost_$(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_NAME/scikit_learn_job_dir
odergs://$BUCKET_NAME/xgboost_job_dir
.TRAINING_PACKAGE_PATH
: Der lokale Pfad zum Stammverzeichnis der Trainingsanwendung, Beispiel:./iris_sklearn_trainer/
oder./iris_xgboost_trainer/
.MAIN_TRAINER_MODULE
: die Datei, die der Trainingsdienst von AI Platform Training ausführen soll. Das Format sieht so aus:[YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]
. Beispiel:iris_sklearn_trainer.iris_training
oderiris_xgboost_trainer.iris_training
.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 Training. Achten Sie darauf, dass sich der Cloud Storage-Bucket in derselben Region befindet.RUNTIME_VERSION
: Sie müssen eine AI Platform Training-Laufzeitversion angeben, die scikit-learn unterstützt, in diesem Beispiel2.11
.PYTHON_VERSION
: Die für den Job zu verwendende Python-Version; Geben Sie für diese Anleitung Python 3.7 an.SCALE_TIER
: Eine vordefinierte Clusterspezifikation für Rechner, auf denen der Trainingsjob ausgeführt werden soll. In diesem FallBASIC
. 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.
scikit-learn
Ersetzen Sie [VALUES-IN-BRACKETS]
dabei durch die entsprechenden Werte:
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME="iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")"
JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir
TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC
XGBoost
Ersetzen Sie [VALUES-IN-BRACKETS]
dabei durch die entsprechenden Werte:
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME="iris_xgboost_$(date +"%Y%m%d_%H%M%S")"
JOB_DIR=gs://$BUCKET_NAME/xgboost_job_dir
TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC
Senden Sie die Trainingsjobanfrage:
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 [iris_scikit_learn_[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 iris_scikit_learn_[DATE]_[TIME]
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs iris_scikit_learn_[DATE]_[TIME]
jobId: iris_scikit_learn_[DATE]_[TIME]
state: QUEUED
Trainingslogs ansehen (optional)
AI Platform Training erfasst alle Streams und Logberichte von stdout
und stderr
. 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
Rufen Sie die AI Platform Training-Seite Jobs auf.
Wählen Sie den Namen des zu prüfenden Trainingsjobs aus. Dadurch gelangen Sie zur Seite Jobdetails für den ausgewählten Trainingsjob.
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
Mit gcloud ai-platform jobs stream-logs
können Sie Logs in Ihrem Terminal aufrufen:
gcloud ai-platform jobs stream-logs $JOB_NAME
Modelldatei in Cloud Storage prüfen
Sehen Sie sich den Inhalt des Zielordners für das Modell an, um zu überprüfen, ob die Datei mit dem gespeicherten Modell in Cloud Storage hochgeladen wurde.
gcloud storage ls gs://$BUCKET_NAME/iris_*
Beispielausgabe:
gs://bucket-name/iris_20180518_123815/:
gs://bucket-name/iris_20180518_123815/model.joblib
Nächste Schritte
- Onlinevorhersagen mit scikit-learn in AI-Platform Training abrufen
- Benutzerdefinierte Skalierungsstufen verwenden, um eine eigene Clusterkonfiguration für das Training zu definieren