トレーニング中に、インタラクティブ シェルを使用して、トレーニング コードが実行されているコンテナを検査できます。ファイル システムを参照して、AI Platform Training で実行されているランタイム バージョンまたはカスタム コンテナごとにデバッグ ユーティリティを実行できます。
インタラクティブ シェルを使用してトレーニング コンテナを検査すると、トレーニング コードや AI Platform Training の構成の問題をデバッグできます。たとえば、インタラクティブ シェルを使用すると、次のことができます。
- トレースツールおよびプロファイリング ツールの実行
- GPU の使用状況を分析する
- コンテナで使用できる Google Cloud の権限を確認する
始める前に
トレーニング ジョブまたはハイパーパラメータ調整ジョブを実行する場合は、インタラクティブ シェルを使用できます。トレーニング コードを準備してトレーニング ジョブを実行する場合は、次の要件を満たしていることを確認してください。
トレーニング コンテナに
bash
がインストールされている。すべてのランタイム バージョン コンテナに
bash
がインストールされている。トレーニング用のカスタム コンテナを作成する場合は、bash
を含むベースコンテナを使用するか、bash
を Dockerfile にインストールします。インタラクティブ シェルをサポートするリージョンでトレーニングを行う。
インタラクティブ シェルにアクセスするすべてのユーザーに、トレーニングを実行している Google Cloud プロジェクトに対する次の権限が付与されていることを確認します。
ml.jobs.create
ml.jobs.get
ml.jobs.cancel
自分でトレーニングを開始する場合、これらの権限がすでに付与されているため、インタラクティブ シェルにアクセスできます。ただし、インタラクティブ シェルを使用して、組織内の他のユーザーが作成したトレーニング ジョブを検査する場合は、これらの権限の取得が必要になることがあります。
これらの権限を取得するには、組織の管理者に AI Platform Training 管理者ロール(
roles/ml.admin
)を付与するよう依頼する方法があります。AI Platform Training デベロッパーのロール(roles/ml.developer
)があれば、作成するジョブのインタラクティブ シェルにアクセスできます。
高度なケースの要件
特定の高度な機能を使用する場合は、次の追加要件を満たす必要があります。
トレーニング ジョブにカスタム サービス アカウントを関連付ける場合は、インタラクティブ シェルにアクセスするユーザーに、関連付けられたサービス アカウントに対する
iam.serviceAccounts.actAs
権限があることを確認します。カスタム サービス アカウントのガイドには、サービス アカウントを関連付けるにはこの権限が必要であることが記載されています。この権限は、カスタム トレーニングでインタラクティブ シェルを表示するためにも必要です。
たとえば、サービス アカウントが設定されたジョブを作成するには、サービス アカウントに対する
iam.serviceAccounts.actAs
権限が必要です。同僚の 1 人がこのジョブのインタラクティブ シェルを表示するには、そのユーザーにも同じiam.serviceAccounts.actAs
権限が付与されている必要があります。AI Platform Training で VPC Service Controls を使用するようにプロジェクトを構成している場合は、次の制限も考慮してください。
VPC ネットワーク ピアリングでは VPC Service Controls を使用できません。
インタラクティブ シェル内から、サービス境界外の公共のインターネットや Google Cloud リソースにアクセスすることはできません。
インタラクティブ シェルへのアクセスを保護するには、
ml.googleapis.com
に加えて、サービス境界内で制限されているサービスとしてnotebooks.googleapis.com
を追加する必要があります。notebooks.googleapis.com
ではなくml.googleapis.com
のみを制限すると、ユーザーはサービス境界外のマシンからインタラクティブ シェルにアクセスできるため、VPC Service Controls を使用するセキュリティ上のメリットが少なくなります。
インタラクティブ シェルを有効にする
トレーニング ジョブでインタラクティブ シェルを有効にするには、トレーニング ジョブを作成するときに、ジョブの trainingInput
フィールドで enableWebAccess
API フィールドを true
に設定します。
次の例は、gcloud CLI を使用するときに --enable-web-access
フラグを追加してこれを行う方法を示しています。現在、Google Cloud コンソールでインタラクティブ シェルを有効にしてトレーニング ジョブを作成することはできません。
この例では、trainer
という名前のディレクトリに、task
というモジュール名で、トレーニング アプリケーションが置かれていると想定しています。
トレーニング ジョブを作成するには、次のコマンドを実行します。
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
このコマンドで、プレースホルダは次のように置き換えます。
- JOB_ID: ジョブに付ける名前。
- JOB_DIR: トレーニング アプリケーションがアップロードされる Cloud Storage ディレクトリへのパス。
REGION: トレーニング ジョブを作成する予定のリージョン。対話型シェルをサポートするリージョンである必要があります。
正常な場合は、次の出力が表示されます。
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
ウェブアクセス URI を取得する
前のセクションのガイダンスに従ってトレーニングを開始したら、Google Cloud コンソールまたは gcloud
コマンドライン ツールを使用して、インタラクティブ シェルへのアクセスに使用できる URI を確認します。AI Platform Training は、ジョブの一部である各トレーニング ノードの URI を提供します。
作成したトレーニング ジョブのタイプに応じて、次のいずれかのタブを選択して、ジョブ内の各ノードの対話型シェル URI を含む webAccessUris
API フィールドを検索する方法の例を確認してください。
トレーニング ジョブ
以下のタブでは、標準のトレーニング ジョブの TrainingOutput
にアクセスする方法を示します。
gcloud
gcloud ai-platform jobs describe
コマンドを実行します。
gcloud ai-platform jobs describe JOB_ID
以下を置き換えます。
-
JOB_ID: ジョブの ID。この ID はジョブの作成時に設定しています(ジョブの ID がわからない場合は、
gcloud ai-platform jobs list
コマンドを実行して、該当するジョブを探します)。
出力で以下を探します。
trainingOutput:
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Google Cloud コンソールで AI Platform Training の [ジョブ] ページを開きます。
リスト内のジョブ名をクリックして、[ジョブの詳細] ページを開きます。
[トレーニング出力] セクションの [JSON を表示] ボタンをクリックして、ジョブの
TrainingOutput
の JSON ビューを開きます。
出力で以下を探します。
{
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
}
webAccessUris
フィールドが表示されない場合は、AI Platform Training がジョブまたはトライアルの実行をまだ開始していない可能性があります。RUNNING
に state
フィールドが表示されていることを確認します。状態が QUEUED
または PREPARING
の場合は、1 分ほど待ちます。その後、ジョブ情報をもう一度取得してみてください。
ハイパーパラメータ調整ジョブ
以下のタブでは、ハイパーパラメータ調整ジョブの TrainingOutput
にアクセスするさまざまな方法を示しています。
gcloud
gcloud ai-platform jobs describe
コマンドを実行します。
gcloud ai-platform jobs describe JOB_ID
以下を置き換えます。
-
JOB_ID: ジョブの ID。この ID はジョブの作成時に設定しています(ジョブの ID がわからない場合は、
gcloud ai-platform jobs list
コマンドを実行して、該当するジョブを探します)。
出力で以下を探します。
trainingOutput:
trials:
- trialId: '1'
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Google Cloud コンソールで AI Platform Training の [ジョブ] ページを開きます。
リスト内のジョブ名をクリックして、[ジョブの詳細] ページを開きます。
[トレーニング出力] セクションの [JSON を表示] ボタンをクリックして、ジョブの
TrainingOutput
の JSON ビューを開きます。
出力で以下を探します。
{
"trials": [
{
...
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
},
...
]
}
webAccessUris
フィールドが表示されない場合は、AI Platform Training がジョブまたはトライアルの実行をまだ開始していない可能性があります。RUNNING
に state
フィールドが表示されていることを確認します。状態が QUEUED
または PREPARING
の場合は、1 分ほど待ちます。その後、ジョブ情報をもう一度取得してみてください。
トライアルが RUNNING
状態になると、AI Platform Training は各ハイパーパラメータ調整トライアルに一連の対話型シェル URI を提供します。以降のトライアルの対話型シェル URI を取得する場合は、それらのトライアルの開始後にジョブ情報を再度取得します。
上の例は、単一レプリカのトレーニングで予想される出力を示しています。これは、プライマリ トレーニング ノードの URI の 1 つです。分散トレーニングを実行している場合、出力にはトレーニング ノードごとに 1 つの URI がタスク名で表示されます。
たとえば、ジョブにマスターと 2 つのワーカーがある場合、webAccessUris
フィールドは次のようになります。
{
"master-replica-0": "URI_FOR_PRIMARY",
"worker-replica-0": "URI_FOR_FIRST_SECONDARY",
"worker-replica-1": "URI_FOR_SECOND_SECONDARY"
}
利用可能なリージョン
次のリージョンでは、AI Platform Training でインタラクティブ シェルを使用できます。
アメリカ大陸
- オレゴン(us-west1)
- ロサンゼルス(us-west2)
- アイオワ(us-central1)
- サウス カロライナ(us-east1)
- 北バージニア(us-east4)
- モントリオール(northamerica-northeast1)
ヨーロッパ
- ロンドン(europe-west2)
- ベルギー(europe-west1)
- チューリッヒ(europe-west6)
- フランクフルト(europe-west3)
アジア太平洋
- シンガポール(asia-southeast1)
- 台湾(asia-east1)
- 東京(asia-northeast1)
- シドニー(australia-southeast1)
- ソウル(asia-northeast3)
AI Platform Training には、トレーニング用の追加のリージョンも用意されています。
インタラクティブ シェルを使用する
トレーニング ノードでインタラクティブ シェルを使用するには、前のセクションで確認した URI の 1 つに移動します。ブラウザに Bash シェルが表示され、AI Platform Training がトレーニング コードを実行しているコンテナのファイル システムにアクセスできます。
以降のセクションでは、シェルを使用する際の考慮事項について説明します。また、シェルで使用できるモニタリング ツールの例を示します。
ジョブの実行を継続する
AI Platform Training でジョブまたはトライアルの実行を終了するとすぐに、インタラクティブ シェルへのアクセス権が失われます。その場合、command terminated with exit code 137
というメッセージが表示されるか、シェルが応答不能になります。コンテナのファイル システムにファイルを作成した場合、ジョブが終了すると、そのファイルは保持されません。
インタラクティブ シェルでデバッグするために、ジョブを長時間実行したい場合があります。たとえば、例外が発生してから 1 時間以上、ジョブの実行を継続させる場合は、次のようなコードをトレーニング コードに追加します。
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
ただし、ジョブが実行されている間は AI Platform Training のトレーニング料金が課金されます。
権限の問題を確認する
インタラクティブ シェル環境では、AI Platform Training がトレーニング コードの実行に使用するサービス アカウントのアプリケーションのデフォルト認証情報(ADC)を使用して認証が行われます。詳細については、シェルで gcloud auth list
を実行してください。
シェルでは、gcloud storage
、bq
をはじめとする、ADC をサポートするツールを使用できます。これは、ジョブが特定の Cloud Storage バケット、BigQuery テーブル、またはトレーニング コードに必要なその他の Google Cloud リソースにアクセスできることを確認するのに役立ちます。
py-spy
を使用して Python の実行を可視化する
py-spy
を使用すると、実行中の Python プログラムを変更せずにプロファイリングできます。インタラクティブ シェルで py-spy
を使用するには、次の操作を行います。
py-spy
をインストールします。pip3 install py-spy
シェルで
ps aux
を実行し、Python トレーニング プログラムの PID を確認します。py-spy
のドキュメントで説明されているサブコマンドのいずれかを実行し、前の手順で確認した PID を使用します。py-spy record
を使用して SVG ファイルを作成する場合は、後でローカル コンピュータで閲覧できるように、このファイルを Cloud Storage バケットにコピーします。例:gcloud storage cp profile.svg gs://BUCKET
BUCKET は、アクセスできるバケットの名前に置き換えます。
perf
を使用してパフォーマンスを分析する
perf
を使用すると、トレーニング ノードのパフォーマンスを分析できます。ノードの Linux カーネルに適した perf
のバージョンをインストールするには、次のコマンドを実行します。
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
その後、perf
のドキュメントで説明されているサブコマンドを実行できます。
GPU 使用状況に関する情報の取得
通常、GPU を使用するノード上で動作する GPU 対応コンテナには、GPU の使用状況のモニタリングに役立つコマンドライン ツールがプリインストールされています。次に例を示します。
nvidia-smi
を使用して、GPU の使用状況をモニタリングします。nvprof
を使用して、さまざまな GPU プロファイリング情報を収集します。nvprof
は既存のプロセスには接続できないため、このツールを使用して、トレーニング コードを実行する追加のプロセスを開始することをおすすめします(この場合、ノードでトレーニング コードが 2 回実行されることになります)。次に例を示します。nvprof -o prof.nvvp python3 -m MODULE_NAME
MODULE_NAME は、トレーニング アプリケーションのエントリ ポイント モジュールの完全修飾名で置き換えます(例:
trainer.task
)。後でローカル コンピュータで分析できるように、この出力ファイルを Cloud Storage バケットに転送します。例:
gcloud storage cp prof.nvvp gs://BUCKET
BUCKET は、アクセスできるバケットの名前に置き換えます。
構成または AI Platform Training の問題ではなく、GPU のエラーが発生した場合は、
nvidia-bug-report.sh
を使用してバグレポートを作成します。その後、ローカルのパソコン上で分析したり、NVIDIA に送信したりできるように、レポートを Cloud Storage バケットに転送します。例:
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
BUCKET は、アクセスできるバケットの名前に置き換えます。
これらの NVIDIA コマンドが bash
で見つからない場合は、シェルの PATH
に /usr/local/nvidia/bin
と /usr/local/cuda/bin
を追加してみてください。
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
次のステップ
- AI Platform Training サービスの詳細を確認する。
- トレーニング アプリケーションのパッケージングについて読む。