このページでは、Batch の使用中に発生する可能性のある既知の問題について説明します。
Batch の使用についてさらにサポートが必要な場合は、トラブルシューティングのドキュメントをご覧いただくか、サポートにお問い合わせください。
タイムアウト ログに、タスクまたは実行可能なタイムアウトのタイムアウトを超えたかどうかが示されない
タイムアウト超過でジョブが失敗した場合、ジョブに関連付けられたログは、失敗の原因が関連するタスクのタイムアウトか、関連する実行可能物のタイムアウトかを示すものではありません。
この問題を回避するには、タスクと実行可能物に異なるタイムアウト値を設定します。その後、次の手順を使用して、関連するタスクのタイムアウトまたは実行可能物のタイムアウトを超えたことが失敗の原因を特定できます。
タスク、実行可能物、タイムアウト超過時の失敗時間を特定します。
タイムアウト タイムアウトの終了コード
50005
が記録されているログを見つけます。このログには、次のようなメッセージのようなtextPayload
があります。Task task/JOB_UID-group0-TASK_INDEX/0/0 runnable RUNNABLE_INDEX...exitCode 50005
そのログから、
TASK_INDEX
を失敗したタスク、RUNNABLE_INDEX
を失敗した実行可能物として、ログのtimestamp
値をタイムアウト超過の時刻として記録します。
失敗したタスクの開始時刻を特定します。
次のメッセージに対応するステータス イベントを見つけます。
Task state is updated from ASSIGNED to RUNNING
そのステータス イベントから、失敗したタスクの開始時刻として
eventTime
フィールドを記録します。
次の式を使用して、失敗したタスクの合計実行時間 \({failedTaskRunTime}\) を計算します。
\[{failedTaskRunTime}={failureTime}-{failedTaskStartTime}\]
次の値を置き換えます。
- \({failureTime}\): タイムアウト超過時の失敗時刻。
- \({failedTaskStartTime}\): 失敗したタスクの開始時刻。
超過したタイムアウトを特定します。
\({failedTaskRunTime}\) が、失敗したタスクに構成したタイムアウトと一致する場合、そのタスクのタイムアウトは超過し、失敗の原因になっています。
それ以外の場合、失敗した実行可能物に構成したタイムアウトを超え、失敗しています。
予約を使用するジョブが遅延するか、阻止される可能性がある
Compute Engine の予約を消費するジョブを作成して実行しようとすると、Batch によってジョブが誤って遅延したり、実行されなくなったりすることがあります。具体的には、これらのリソース割り当てが未使用の予約で使用されている場合でも、Batch ではプロジェクトに十分な Compute Engine リソース割り当てを確保する必要があります。
問題の回避策
ジョブのこの問題を回避するには、goog-batch-skip-quota-check
という名前ラベル と 値 true
をジョブレベル labels
フィールドに追加します。このラベルにより、Batch はジョブを作成する前にプロジェクトのリソース割り当ての確認をスキップします。
たとえば、予約を消費できる基本スクリプト ジョブでこの問題を回避または解決するには、次の JSON 構成でジョブを作成して実行します。
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"instances": [
{
VM_RESOURCES
}
],
},
"labels": {
"goog-batch-skip-quota-check": "true"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
VM_RESOURCES
は、ジョブで消費する予約と一致する VM リソースに置き換えます。
詳細については、予約済み VM を消費できるジョブを作成して実行するとジョブのカスタムラベルを定義するをご覧ください。
事象を特定する
この問題を示す特定のエラー メッセージはありません。代わりに、この問題は次のような状況で発生する可能性があります。
割り当てがあるすべてのリソースをプロジェクトで予約している場合、この問題により、ジョブでそれらのリソースを指定できなくなります。
たとえば、プロジェクトに次のようなものがあるとします。
- H100 GPU の最大割り当てが 16。
- 2 つの
a3-highgpu-8g
VM に対する未使用の単一プロジェクトの予約。合計 16 個の H100 GPU が予約されます。
このシナリオでは、この問題により、予約済みの H100 GPU を消費するように正しく構成されているジョブをプロジェクトでスケジュールして実行することが妨げられます。
割り当てがある一部のリソースをプロジェクトで予約している場合、この問題により、それらのリソースを指定するジョブが妨げられたり、遅延したりする可能性があります。
たとえば、プロジェクトに次のようなものがあるとします。
- H100 GPU の最大割り当てが 16。
- 1 つの
a3-highgpu-8g
VM 用の未使用の単一プロジェクトの予約。合計 8 つの H100 GPU が予約されます。 - 予約を消費しないように構成され、削除されて再作成されることがある
a3-highgpu-8g
VM。(この VM は、8 個の未予約の H100 GPU を使用します(存在する場合))。
このシナリオでは、この問題により、
a3-highgpu-8g
VM が存在しない場合に、予約済みの H100 GPU のいずれかを消費するように正しく構成されているジョブをプロジェクトでスケジュールして開始することのみが可能になります。
古いカーネルの Compute Engine(またはカスタム)VM OS イメージを指定すると、ジョブが失敗する可能性がある
カーネルのバージョンが最新でない Compute Engine VM OS イメージを指定すると、ジョブが失敗する可能性があります。この問題は、Compute Engine VM OS イメージをベースにしたカスタム イメージにも影響します。この問題を引き起こす Compute Engine の公開イメージは簡単に特定できず、いつでも変更される可能性があります。
この問題を示す特定のエラー メッセージはありません。このため、予期せず失敗したジョブで、Compute Engine VM OS イメージまたは同様のカスタム イメージが指定されている場合は、この問題を検討してください。
この問題を回避または解決する手順は、以下のとおりです。
- 可能であれば、この問題の影響を受けない Batch イメージまたは Batch イメージをベースにしたカスタム イメージを使用してください。
- Batch イメージを使用できない場合は、目的の Compute Engine イメージの最新バージョンを試してください。一般的に、新しいバージョンの Compute Engine イメージは、古いバージョンではなく最新バージョンのカーネルを使用している可能性が高くなります。
- 特定のイメージの最新バージョンが動作しない場合は、別の OS を試すか、カスタム イメージを作成する必要があるかもしれません。たとえば、最新バージョンの Debian 11 が機能しない場合は、Debian 11 が動作し、最新のカーネル バージョンを使用するように更新した Compute Engine VM からカスタム イメージを作成してみてください。
この問題は、VM OS イメージのカーネル バージョンが古いため、VM が再起動されたことが原因です。ジョブで Batch からのものでも Batch イメージをベースにしたものでもない VM OS イメージが指定されている場合、Batch は起動後に必要なパッケージをジョブの VM にインストールします。必要なパッケージはジョブによって異なり、時間とともに変化する可能性があります。また、VM OS イメージに最新のカーネル バージョンを指定する必要があります。この問題は、カーネル バージョンの更新時に VM の再起動が必要になり、パッケージのインストールとジョブが失敗する場合に発生します。
VM OS イメージの詳細については、ジョブの VM OS 環境の概要をご覧ください。
GPU と古いカーネルの VM OS イメージを使用するジョブが、ドライバの自動インストール時にのみ失敗する可能性がある
この問題は、カーネルが古い Compute Engine(またはカスタム)VM OS イメージを指定したジョブが失敗する可能性があることと密接に関連しています。具体的には、カーネルが最新ではない Compute Engine(またはカスタム)VM OS イメージを指定し、GPU を使用するジョブは、GPU ドライバを自動的にインストールしようとした場合にのみ失敗する可能性があります。このようなジョブでは、GPU ドライバを手動でインストールするだけで障害を解決できる可能性があります。
GPU の詳細については、GPU を使用するジョブを作成して実行するをご覧ください。