Während des Trainings können Sie mit einer interaktiven Shell den Container prüfen, in dem der Trainingscode ausgeführt wird. Sie können das Dateisystem durchsuchen und Dienstprogramme zur Fehlerbehebung in jeder Laufzeitversion oder in benutzerdefinierten Containern ausführen, die in AI Platform Training ausgeführt werden.
Wenn Sie Ihren Trainingscontainer mit einer interaktiven Shell prüfen, können Sie Probleme mit Ihrem Trainingscode oder Ihrer AI Platform Training-Konfiguration debuggen. Beispielsweise können Sie mit einer interaktiven Shell Folgendes tun:
- Tracing-Tools und Tools zur Profilerstellung ausführen
- GPU-Nutzung analysieren
- Für den Container verfügbare Google Cloud-Berechtigungen prüfen
Hinweis
Sie können eine interaktive Shell verwenden, wenn Sie einen Trainings- oder Hyperparameter-Abstimmungsjob ausführen. Achten Sie bei der Vorbereitung Ihres Trainingscodes und dem Trainingsjob darauf, dass Sie die folgenden Anforderungen erfüllen:
In Ihrem Trainingscontainer muss
bash
installiert sein.Auf allen Laufzeitversionscontainern ist
bash
installiert. Wenn Sie einen benutzerdefinierten Container für das Training erstellen, verwenden Sie einen Basiscontainer mitbash
oder installieren Siebash
in Ihrem Dockerfile.Führen Sie das Training in einer Region aus, die interaktive Shells unterstützt.
Sorgen Sie dafür, dass jeder Nutzer mit Zugriff auf eine interaktive Shell die folgenden Berechtigungen für das Google Cloud-Projekt hat, in dem das Training ausgeführt wird:
ml.jobs.create
ml.jobs.get
ml.jobs.cancel
Wenn Sie das Training selbst starten, haben Sie wahrscheinlich bereits diese Berechtigungen und können auf eine interaktive Shell zugreifen. Wenn Sie jedoch eine interaktive Shell verwenden möchten, um einen Trainingsjob zu prüfen, der von einer anderen Person in Ihrer Organisation erstellt wurde, benötigen Sie möglicherweise diese Berechtigungen.
Eine Möglichkeit, diese Berechtigungen zu erhalten, ist, einen Administrator Ihrer Organisation zu bitten, Ihnen die Rolle AI Platform Training-Administrator (
roles/ml.admin
) zuzuweisen. Wenn Sie die Rolle AI Platform Training-Entwickler (roles/ml.developer
) erhalten, haben Sie Zugriff auf die interaktive Shell für von Ihnen erstellte Jobs.
Anforderungen für erweiterte Fälle
Wenn Sie bestimmte erweiterte Features verwenden, müssen Sie die folgenden zusätzlichen Anforderungen erfüllen:
Wenn Sie einem Trainingsjob ein benutzerdefiniertes Dienstkonto anhängen, achten Sie darauf, dass jeder Nutzer, der auf eine interaktive Shell zugreifen möchte, die Berechtigung
iam.serviceAccounts.actAs
für das angehängte Dienstkonto hat.In der Anleitung zu benutzerdefinierten Dienstkonten ist angegeben, dass Sie diese Berechtigung zum Anhängen eines Dienstkontos benötigen. Sie benötigen diese Berechtigung auch, um während des benutzerdefinierten Trainings eine interaktive Shell aufzurufen.
Wenn Sie beispielsweise einen Job mit einem angehängten Dienstkonto erstellen möchten, benötigen Sie die Berechtigung
iam.serviceAccounts.actAs
für das Dienstkonto. Wenn einer Ihrer Kollegen dann eine interaktive Shell für diesen Job ansehen möchte, muss er dieselbe Berechtigungiam.serviceAccounts.actAs
haben.Wenn Sie Ihr Projekt für die Verwendung von VPC Service Controls mit AI Platform Training konfiguriert haben, berücksichtigen Sie die folgenden zusätzlichen Einschränkungen:
Sie können VPC Service Controls nicht mit VPC-Netzwerk-Peering verwenden.
Innerhalb einer interaktiven Shell können Sie nicht auf das öffentliche Internet oder Google Cloud-Ressourcen außerhalb Ihres Dienstperimeters zugreifen.
Für einen sicheren Zugriff auf interaktive Shells müssen Sie
notebooks.googleapis.com
zusätzlich zuml.googleapis.com
als eingeschränkten Dienst zu Ihrem Dienstperimeter hinzufügen. Wenn Sie nurml.googleapis.com
und nichtnotebooks.googleapis.com
einschränken, können Nutzer über Maschinen außerhalb des Dienstperimeters auf interaktive Shells zugreifen. Dadurch wird der Sicherheitsvorteil einer Verwendung von VPC Service Controls reduziert.
Interaktive Shells aktivieren
Zur Aktivierung interaktiver Shells für einen Trainingsjob legen Sie das API-Feld enableWebAccess
beim Erstellen eines Trainingsjobs im Feld trainingInput
Ihres Jobs auf true
fest.
Im folgenden Beispiel wird gezeigt, wie Sie dies tun, indem Sie das Flag --enable-web-access
hinzufügen, wenn Sie die gcloud CLI verwenden. Sie können derzeit keinen Trainingsjob mit einer interaktiven Shell erstellen, die in der Google Cloud Console aktiviert ist.
In diesem Beispiel wird davon ausgegangen, dass Sie eine Trainingsanwendung in Ihrem lokalen Dateisystem in einem Verzeichnis mit dem Namen trainer
mit dem Modul task
haben.
Führen Sie den folgenden Befehl aus, um den Trainingsjob zu erstellen:
gcloud ai-platform jobs submit training JOB_ID \
--enable-web-access \
--job-dir=JOB_DIR \
--module-name=trainer.task \
--package-path=trainer \
--python-version=3.7 \
--region=REGION \
--runtime-version=2.11 \
--scale-tier=CUSTOM \
--master-machine-type=n1-highmem-8
Ersetzen Sie in diesem Befehl die folgenden Platzhalter:
- JOB_ID: Ein Name, den Sie für den Job auswählen.
- JOB_DIR: Ein Pfad zu einem Cloud Storage-Verzeichnis, in das Ihre Trainingsanwendung hochgeladen wird.
REGION: Die Region, in der Sie den Trainingsjob erstellen möchten. Beachten Sie, dass es sich um eine Region handeln muss, die interaktive Shells unterstützt.
Der Befehl erzeugt bei Erfolg folgende Ausgabe:
Job [JOB_ID] submitted successfully. Your job is still active. You may view the status of your job with the command $ gcloud ai-platform jobs describe JOB_ID or continue streaming the logs with the command $ gcloud ai-platform jobs stream-logs JOB_ID jobId: JOB_ID state: QUEUED
Webzugriff-URI abrufen
Nachdem Sie das Training gemäß der Anleitung im vorherigen Abschnitt gestartet haben, verwenden Sie die Google Cloud Console oder das gcloud
-Befehlszeilentool, um die URIs anzuzeigen, mit denen Sie auf interaktive Shells zugreifen können.
AI Platform Training stellt einen URI für jeden Trainingsknoten bereit, der Teil Ihres Jobs ist.
Wählen Sie je nach erstelltem Trainingsjob einen der folgenden Tabs aus, um Beispiele zu sehen, wie Sie das API-Feld webAccessUris
finden, das einen interaktiven Shell-URI für jeden Knoten in Ihrem Job enthält.
Trainingsjob
Auf den folgenden Tabs finden Sie verschiedene Möglichkeiten, auf TrainingOutput
für einen Standardtrainingsjob zuzugreifen.
gcloud
Führen Sie den Befehl gcloud ai-platform jobs describe
aus:
gcloud ai-platform jobs describe JOB_ID
Dabei gilt:
-
JOB_ID: Die ID Ihres Jobs. Sie legen diese ID beim Erstellen des Jobs fest.
Wenn Sie die ID Ihres Jobs nicht kennen, können Sie den Befehl
gcloud ai-platform jobs list
ausführen und nach dem entsprechenden Job suchen.
Suchen Sie in der Ausgabe nach Folgendem:
trainingOutput:
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Öffnen Sie in der Google Cloud Console die AI Platform Training-Seite Jobs.
Klicken Sie in der Liste auf den Namen des jeweiligen Jobs, um die Seite mit den Jobdetails zu öffnen.
Klicken Sie auf die Schaltfläche Json anzeigen im Abschnitt Trainingsausgabe, um eine JSON-Ansicht des
TrainingOutput
für den Job zu maximieren.
Suchen Sie in der Ausgabe nach Folgendem:
{
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
}
Wenn das Feld webAccessUris
nicht angezeigt wird, hat AI Platform Training möglicherweise noch nicht mit der Ausführung des Jobs oder Tests begonnen.
Prüfen Sie, ob RUNNING
das Feld state
enthält. Wenn der Status QUEUED
oder PREPARING
lautet, warten Sie eine Minute und versuchen Sie dann noch einmal, die Jobinformationen abzurufen.
Hyperparameter-Abstimmungsjob
Auf den folgenden Tabs finden Sie verschiedene Möglichkeiten, auf TrainingOutput
für einen Hyperparameter-Abstimmungsjob zuzugreifen.
gcloud
Führen Sie den Befehl gcloud ai-platform jobs describe
aus:
gcloud ai-platform jobs describe JOB_ID
Dabei gilt:
-
JOB_ID: Die ID Ihres Jobs. Sie legen diese ID beim Erstellen des Jobs fest.
Wenn Sie die ID Ihres Jobs nicht kennen, können Sie den Befehl
gcloud ai-platform jobs list
ausführen und nach dem entsprechenden Job suchen.
Suchen Sie in der Ausgabe nach Folgendem:
trainingOutput:
trials:
- trialId: '1'
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Öffnen Sie in der Google Cloud Console die AI Platform Training-Seite Jobs.
Klicken Sie in der Liste auf den Namen des jeweiligen Jobs, um die Seite mit den Jobdetails zu öffnen.
Klicken Sie auf die Schaltfläche Json anzeigen im Abschnitt Trainingsausgabe, um eine JSON-Ansicht des
TrainingOutput
für den Job zu maximieren.
Suchen Sie in der Ausgabe nach Folgendem:
{
"trials": [
{
...
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
},
...
]
}
Wenn das Feld webAccessUris
nicht angezeigt wird, hat AI Platform Training möglicherweise noch nicht mit der Ausführung des Jobs oder Tests begonnen.
Prüfen Sie, ob RUNNING
das Feld state
enthält. Wenn der Status QUEUED
oder PREPARING
lautet, warten Sie eine Minute und versuchen Sie dann noch einmal, die Jobinformationen abzurufen.
AI Platform Training bietet eine Reihe interaktiver Shell-URIs für jeden Hyperparameter-Abstimmungstest, während der Test in den Status RUNNING
wechselt. Wenn Sie die interaktive Shell-URIs für spätere Tests abrufen möchten, rufen Sie die Jobinformationen nach Beginn der Tests noch einmal ab.
Das vorherige Beispiel zeigt die erwartete Ausgabe für das Training mit einem einzigen Replikat: einen URI für den primären Trainingsknoten. Wenn Sie ein verteiltes Training ausführen, enthält die Ausgabe für jeden Trainingsknoten einen URI, identifiziert durch den Aufgabennamen.
Wenn Ihr Job beispielsweise einen Master und zwei Worker hat, sieht das Feld webAccessUris
in etwa so aus:
{
"master-replica-0": "URI_FOR_PRIMARY",
"worker-replica-0": "URI_FOR_FIRST_SECONDARY",
"worker-replica-1": "URI_FOR_SECOND_SECONDARY"
}
Verfügbare Regionen
Die Verwendung einer interaktiven Shell für AI Platform Training wird in den folgenden Regionen unterstützt:
Amerika
- Oregon (us-west1)
- Los Angeles (us-west2)
- Iowa (us-central1)
- South Carolina (us-east1)
- N. Virginia (us-east4)
- Montreal (northamerica-northeast1)
Europa
- London (europe-west2)
- Belgien (europe-west1)
- Zürich (europe-west6)
- Frankfurt (europe-west3)
Asiatisch-pazifischer Raum
- Singapur (asia-southeast1)
- Taiwan (asia-east1)
- Tokio (asia-northeast1)
- Sydney (australia-southeast1)
- Seoul (asia-northeast3)
AI Platform Training bietet auch zusätzliche Regionen für das Training.
Interaktive Shell verwenden
Rufen Sie einen der URIs aus dem vorherigen Abschnitt auf, um die interaktive Shell für einen Trainingsknoten zu verwenden. In Ihrem Browser wird eine Bash-Shell angezeigt, die Ihnen Zugriff auf das Dateisystem des Containers ermöglicht, in dem AI Platform Training Ihren Trainingscode ausführt.
In den folgenden Abschnitten werden einige Dinge beschrieben, die Sie bei der Verwendung der Shell berücksichtigen sollten. Außerdem werden Beispiele für Monitoringtools aufgeführt, die Sie in der Shell verwenden können.
Beenden des Jobs verhindern
Wenn AI Platform Training den Job oder die Testphase ausführt, verlieren Sie sofort den Zugriff auf die interaktive Shell. In diesem Fall wird möglicherweise die Meldung command terminated with exit code 137
angezeigt oder die Shell reagiert möglicherweise nicht mehr. Wenn Sie Dateien im Dateisystem des Containers erstellt haben, bleiben diese nach Beendigung des Jobs nicht bestehen.
In einigen Fällen kann es sinnvoll sein, den Job gezielt länger auszuführen, um Fehler in einer interaktiven Shell zu beheben. Sie können dem Trainingscode beispielsweise Code wie den folgenden hinzufügen, damit der Job mindestens eine Stunde nach einer Ausnahme weiter ausgeführt wird:
import time
import traceback
try:
# Replace with a function that runs your training code
train_model()
except Exception as e:
traceback.print_exc()
time.sleep(60 * 60) # 1 hour
Beachten Sie jedoch, dass Ihnen AI Platform Training-Trainingsgebühren berechnet werden, solange der Job weiter ausgeführt wird.
Berechtigungsprobleme prüfen
Die interaktive Shell-Umgebung wird mithilfe von Standardanmeldedaten für Anwendungen für das Dienstkonto authentifiziert, mit dem AI Platform Training Ihren Trainingscode ausführt. Sie können gcloud auth list
in der Shell ausführen, um weitere Details zu sehen.
In der Shell können Sie gcloud storage
, bq
und andere Tools verwenden, die ADC unterstützen.
Dadurch können Sie prüfen, ob der Job auf einen bestimmten Cloud Storage-Bucket, eine BigQuery-Tabelle oder eine andere Google Cloud-Ressource zugreifen kann, die Ihr Trainingscode benötigt.
Python-Ausführung mit py-spy
visualisieren
Mit py-spy
können Sie das Profil eines ausgeführten Python-Programms erstellen, ohne es ändern zu müssen. So verwenden Sie py-spy
in einer interaktiven Shell:
Installieren Sie
py-spy
:pip3 install py-spy
Führen Sie
ps aux
in der Shell aus und suchen Sie nach der PID des Python-Trainingsprogramms.Führen Sie alle in der Dokumentation zu
py-spy
beschriebenen Unterbefehle mit der PID aus, die Sie im vorherigen Schritt ermittelt haben.Wenn Sie mit
py-spy record
eine SVG-Datei erstellen, kopieren Sie diese Datei in einen Cloud Storage-Bucket, damit Sie sie später auf Ihrem lokalen Computer ansehen können. Beispiel:gcloud storage cp profile.svg gs://BUCKET
Ersetzen Sie BUCKET durch den Namen eines Buckets, auf den Sie Zugriff haben.
Leistung mit perf
analysieren
Mit perf
können Sie die Leistung des Trainingsknotens analysieren.
Führen Sie die folgenden Befehle aus, um die für den Linux-Kernel Ihres Knotens geeignete Version von perf
zu installieren:
apt-get update
apt-get install -y linux-tools-generic
rm /usr/bin/perf
LINUX_TOOLS_VERSION=$(ls /usr/lib/linux-tools | tail -n 1)
ln -s "/usr/lib/linux-tools/${LINUX_TOOLS_VERSION}/perf" /usr/bin/perf
Danach können Sie alle in der Dokumentation zu perf
beschriebenen Unterbefehle ausführen.
Informationen zur GPU-Nutzung abrufen
Für GPU-fähige Container, die auf Knoten mit GPUs ausgeführt werden, sind in der Regel mehrere Befehlszeilentools vorinstalliert, mit denen Sie die GPU-Nutzung überwachen können. Beispiel:
Mit
nvidia-smi
können Sie die GPU-Nutzung verschiedener Prozesse überwachen.Verwenden Sie
nvprof
, um verschiedene GPU-Profilinformationen zu erfassen. Da sichnvprof
nicht an einen vorhandenen Prozess anhängen lässt, sollten Sie das Tool verwenden, um einen zusätzlichen Prozess zu starten, der den Trainingscode ausführt. (Dies bedeutet, dass der Trainingscode auf dem Knoten zweimal ausgeführt wird.) Beispiel:nvprof -o prof.nvvp python3 -m MODULE_NAME
Ersetzen Sie MODULE_NAME durch den vollständig qualifizierten Namen des Einstiegspunktmoduls für Ihre Trainingsanwendung, z. B.
trainer.task
.Übertragen Sie dann die Ausgabedatei in einen Cloud Storage-Bucket, um sie später auf Ihrem lokalen Computer zu analysieren. Beispiel:
gcloud storage cp prof.nvvp gs://BUCKET
Ersetzen Sie BUCKET durch den Namen eines Buckets, auf den Sie Zugriff haben.
Wenn ein GPU-Fehler auftritt (nicht ein Problem mit Ihrer Konfiguration oder mit AI Platform Training), erstellen Sie mit
nvidia-bug-report.sh
einen Fehlerbericht.Übertragen Sie dann den Bericht in einen Cloud Storage-Bucket, um ihn später auf Ihrem lokalen Computer zu analysieren oder an NVIDIA zu senden. Beispiel:
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
Ersetzen Sie BUCKET durch den Namen eines Buckets, auf den Sie Zugriff haben.
Wenn bash
keinen dieser NVIDIA-Befehle finden kann, fügen Sie /usr/local/nvidia/bin
und /usr/local/cuda/bin
zum PATH
der Shell hinzu:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Nächste Schritte
- Weitere Informationen zum AI Platform Training-Dienst
- Weitere Informationen finden Sie unter Paket für eine Trainingsanwendung erstellen