このドキュメントでは、インスタンスの柔軟性を使用する Batch ジョブを作成して実行する方法について説明します。インスタンスの柔軟性を使用すると、指定した複数のマシンタイプでジョブを実行できます。必要に応じて、ランク付けすることもできます。
ジョブで使用できるマシンタイプを増やすことで、インスタンスの柔軟性を使用して 、ジョブを実行できるリソースの確率である取得可能性を向上させることができます 。ワークロードに使用する取得可能性 機能を決定する方法については、 リソースの取得可能性を向上させるをご覧ください。 たとえば、インスタンスの柔軟性を使用すると、次のことができます。
- リソース可用性エラー と関連するスケジュールの遅延の可能性を減らす。
- 取得可能性の高いリソースを選択して、ジョブをより早く完了させる。例:
始める前に
- Batch を以前に使用したことがない場合は、 Batch を使ってみる を確認し、 プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- バッチジョブ編集者 (
roles/batch.jobsEditor) プロジェクトの - ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
- バッチジョブ編集者 (
制限事項
ジョブでインスタンスの柔軟性を使用する場合、次の制限がすべて適用されます。
取得可能性の向上は、ジョブで使用できるマシンタイプの数に応じて増加します。
ジョブで
FLEX_STARTプロビジョニング モデルまたはRESERVATION_BOUNDプロビジョニング モデルを指定することはできません。ジョブで対象となる特定の予約を使用することはできません。(
reservationフィールド は未定義にするか、NO_RESERVATIONに設定する必要があります)。対象となる特定の予約には、
RESERVATION_BOUNDプロビジョニング モデルのすべての予約と、STANDARDプロビジョニング モデルの一部の予約が含まれます。インスタンスの作成は予約のマシンタイプでのみ成功するため、これらの機能は本質的に互換性がありません。各ジョブには最大 50 個のインスタンス選択を設定できます。
ジョブ内の各インスタンス選択には、一意の名前、一意のランク、1 つ以上の一意のマシンタイプが必要です。
マシンタイプを繰り返すことはできません。ジョブごとに 1 つのインスタンス選択にのみ各マシンタイプを含めます。
各ジョブには、インスタンス選択全体で最大 200 個の一意のマシンタイプを設定できます。
同じインスタンス選択で複数のマシンタイプを指定することは省略可能ですが、取得可能性の高いリソースが必要な場合は必須です。
- Batch は、ランクのインスタンス選択に複数のマシンタイプがある場合にのみ、取得可能性が最も高い 1 つ以上のマシンタイプを選択しようとします。たとえば、プリエンプトされる可能性の低い Spot VM をジョブに含める場合や、タスクを並行して実行できるジョブにインスタンスを追加する場合は、この選択が重要になります。
- それ以外の場合、ランクのインスタンス選択にマシンタイプが 1 つしかない場合、インスタンスの柔軟性はリソース可用性エラーの防止にのみ役立ちます。
ジョブに
machineTypeフィールドを含めることはできません。 ジョブで指定されたインスタンス テンプレートのマシンタイプは 無視されます。ジョブに指定するすべてのプロパティが、許可されているすべてのマシンタイプと互換性があることを確認する必要があります。そうしないと、インスタンスを作成できないため、ジョブが送信後に失敗する可能性があります。たとえば、ジョブの次のプロパティが少なくともすべてのマシンタイプと互換性があることを確認することをおすすめします。
- ロケーション(指定されている場合は
allowedLocations[]フィールド。それ以外の場合はlocation) - タスクあたりのコンピューティング リソース(
computeResourceフィールド) - ディスクとイメージ(
volumes[]フィールド、disk[]フィールド、bootDiskフィールド) - ネットワーク(
networkフィールド) その他すべてのインスタンス プロパティ(
instances[]サブフィールド):- 最小 CPU プラットフォーム(
minCpuPlatformフィールド) - プロビジョニング モデル(
provisioningModelフィールド) - GPU(
accelerators[]フィールド)
- 最小 CPU プラットフォーム(
- ロケーション(指定されている場合は
Batch ジョブの ディスクと最小 CPU プラットフォームをオーバーライドする ことはできません。すべてのマシンタイプは、指定された値(
policyサブフィールドまたはインスタンス テンプレート)を使用します。指定されていない場合は、優先度の高いインスタンス選択のマシンタイプのデフォルト値を使用します。そのため、次のすべてを行うことをおすすめします。ブートディスクのタイプが、許可されているすべてのマシンタイプと互換性があることを確認します。まとめると、第 4 世代以降のマシンタイプは Persistent Disk をサポートしていません。第 2 世代以前のマシンタイプは Hyperdisk をサポートしていません。第 3 世代以前のマシンタイプはデフォルトで Persistent Disk ブートディスクを使用します。
許可されているすべてのマシンタイプでサポートされていることを確認するまで、最小 CPU プラットフォームまたは省略可能なディスクを指定しないでください。
複数のマシンタイプを使用できるジョブを作成する
複数のマシンタイプを使用できるジョブを作成するには、次のいずれかの方法を選択します。
gcloud
Google Cloud CLI を使用してジョブを作成するときに複数のマシンタイプを構成するには、次の操作を行います。
ジョブの構成の詳細を指定する JSON ファイルの
allocationPolicyフィールドに、instanceFlexibilityPolicyフィールド と サブフィールド を含めます。instanceFlexibilityPolicyフィールドは、1 つ以上のインスタンス選択をサポートします。各インスタンス選択には、一意の名前、一意のランク、1 つ以上のマシンタイプのリストがあります。"allocationPolicy":{ "instanceFlexibilityPolicy":{ "instanceSelections":{ "INSTANCE_SELECTION_NAME":{ "rank": RANK, "machineTypes": [MACHINE_TYPES] } } } }次のように置き換えます。
INSTANCE_SELECTION_NAME: インスタンス選択の名前。ジョブに複数のインスタンス選択がある場合は、このジョブ内の各名前が一意であることを確認してください。RANK: 省略可。このインスタンス選択の優先度を表すゼロ以上の整数。値が小さいほど優先度が高くなります。指定しない場合、デフォルト値は0(最優先)です。ジョブに複数のインスタンス選択がある場合は、このジョブ内の各ランクが一意であることを確認してください。MACHINE_TYPES: このインスタンス選択の 1 つ以上のマシンタイプのカンマ区切りのリスト。文字列として記述されます。ジョブごとに 1 つのインスタンス選択にのみ各マシンタイプを含めることができます。たとえば、3 つのマシンタイプのリストは次のように記述できます。"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"MACHINE_TYPE_1、MACHINE_TYPE_2、MACHINE_TYPE_3をそれぞれマシンタイプ(e2-micro、e2-small、n1-standard-2など)に置き換えます。
詳細については、ジョブの例もご覧ください。
この機能は プレビュー版であるため、
gcloud alpha batch jobs submitコマンド を使用してジョブを作成して送信する必要があります。gcloud alpha batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE次のように置き換えます。
JOB_NAME: ジョブの名前。LOCATION: ジョブのロケーション。JSON_CONFIGURATION_FILE: ジョブの構成の詳細を含む JSON ファイルへのパス。
REST
Batch API を使用して複数の
マシンタイプを使用するジョブを作成するには、この機能が
プレビュー版の間に
v1alpha jobs.create メソッドを使用します。
ジョブに複数のマシンタイプを指定するには、JSON ファイルの本文の
instanceFlexibilityPolicyフィールド
とサブフィールド
をallocationPolicyフィールドに含めます。instanceFlexibilityPolicy フィールドは、1 つ以上のインスタンス選択をサポートします。各インスタンス選択には、一意の名前、一意のランク、1 つ以上のマシンタイプのリストがあります。
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"INSTANCE_SELECTION_NAME":{
"rank": RANK,
"machineTypes": [MACHINE_TYPES]
}
}
}
}
次のように置き換えます。
INSTANCE_SELECTION_NAME: インスタンス選択の名前。ジョブに複数のインスタンス選択がある場合は、このジョブ内の各名前が一意であることを確認してください。RANK: 省略可。このインスタンス選択の優先度を表すゼロ以上の整数。値が小さいほど優先度が高くなります。指定しない場合、デフォルト値は0(最優先)です。ジョブに複数のインスタンス選択がある場合は、このジョブ内の各ランクが一意であることを確認してください。MACHINE_TYPES: このインスタンス選択の 1 つ以上のマシンタイプのカンマ区切りのリスト。文字列として記述されます。ジョブごとに 1 つのインスタンス選択にのみ各マシンタイプを含めることができます。たとえば、3 つのマシンタイプのリストは次のように記述できます。"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"MACHINE_TYPE_1、MACHINE_TYPE_2、MACHINE_TYPE_3をそれぞれマシンタイプ(e2-micro、e2-small、n1-standard-2など)に置き換えます。
詳細については、ジョブの例もご覧ください。
ジョブの JSON 構成ファイルの例
たとえば、gcloud CLI または Batch API を使用する場合、次の JSON 構成ファイルを使用して、2 つのインスタンス選択を持つ基本的なスクリプト ジョブを作成できます。
first-choiceという名前のインスタンス選択は、最優先("rank": 0)で、3 つのマシンタイプ(e2-micro、e2-small、およびn1-standard-2)があります。second-choiceという名前のインスタンス選択は、2 番目の優先度 ("rank": 1)で、1 つのマシンタイプ(e2-medium)があります。
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"first-choice":{
"rank": 0,
"machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
},
"second-choice":{
"rank": 1,
"machineTypes": ["e2-medium"]
}
}
}
}
}
次のステップ
- ジョブの作成または実行で問題が発生した場合は、 トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションについて学習する。