メインコンテンツまでスキップ

トレーニングワークロードの本番運用化

備考

プレビュー

この機能は パブリック プレビュー段階です。

DABs を使用して、AI ランタイム のトレーニング ワークロードをコードとして定義します。ソース管理に維持し、環境間でデプロイし、スケジュールし、他のタスクと組み合わせます。このページでは、独自トレーニングのパスについて説明します。このパスでは、ai_runtime_task が Serverless GPU コンピュート上のコードのディレクトリに対して独自のコマンドを実行します。

ヒント

主なポイント

  • 宣言型オートメーションバンドルを使用して、トレーニングワークロードをコードとして定義し、環境間でデプロイし、スケジュールを設定します。
  • ai_runtime_task は、コードのディレクトリに対して独自のコマンドを実行します (独自のトレーニングを持ち込む)。
  • マルチタスクジョブで GPU と CPU のタスクを組み合わせます。

これは、バンドルを介してServerless GPU上でノートブックを実行するタスクとは異なります。GPU上のノートブックの基本的なバンドルの例については、Jobs APIとDeclarative Automation Bundlesを使用したスケジュール設定を参照してください。

要件​

  • AI ランタイムが有効になっているワークスペース。要件を参照してください。
  • バンドルをデプロイするためにインストールおよび構成された Databricks CLI(コマンドラインインターフェイス)。

バンドルでAI Runtimeタスクを定義する​

1つのai_runtime_taskがエクスペリメントに名前を付け、code_source_pathでトレーニングコードを指定し、1つのデプロイメント(実行するコマンドとそれを実行するGPU)を宣言します。バンドル内のジョブに追加します。

YAML
resources:
jobs:
train:
tasks:
- task_key: train
ai_runtime_task:
experiment: my-experiment
code_source_path: ./dist/code.tgz
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1

code_source_path パッケージ化されたトレーニングコードを指し、command_path はタスクが実行するスクリプトです。再試行、タイムアウト、および権限は、他のDatabricksジョブと同様にタスクとジョブで設定されるため、既存のバンドルのプラクティスを引き続き使用できます。コードのパッケージ化と参照方法については、トレーニングコードの出荷を参照してください。

ai_runtime_task 個のフィールド​

フィールド

Type

説明

experiment

String

必須。ランの MLflow エクスペリメント名。エクスペリメントの追跡と観察可能性を参照してください。

code_source_path

String

実行するトレーニングコード:パッケージ化された tgz アーティファクトの出力ファイル、またはすでにuploadされているコードへの /Workspace または /Volumes パス。トレーニングコードの出荷を参照してください。

deployments

Sequence

必須。コマンドと、それを実行するコンピュートを記述する単一のデプロイメント。各エントリには、command_path、compute、およびオプションの name が含まれます。

deployments[].command_path

String

必須。タスクが各ノード上で実行するスクリプト。

deployments[].compute.accelerator_type

String

必須。GPUタイプ(例:GPU_1xA10、GPU_1xH100、GPU_8xH100、GPU_8xB300など)。

deployments[].compute.accelerator_count

Integer

必須。すべてのノードにわたるGPUの総数—accelerator_typeでエンコードされたノードごとの数の倍数。

deployments[].name

String

Logs と UI で使用される、デプロイのオプションの名前。

docker_image_url

String

管理対象環境の代わりに、コマンドを実行するためのオプションのカスタム Dockerイメージ。レガシー Python CLI でカスタム Dockerイメージを使用するをご覧ください。

mlflow_run

String

MLflow ランのオプションの表示名。

mlflow_experiment_directory

String

エクスペリメントが作成されるオプションのワークスペースディレクトリ。/Workspace で始まる必要があります。defaultのユーザーディレクトリを持たないService Principalとして実行する場合にこれを設定します。

mlflow_artifact_location

String

MLflow アーティファクトのオプションのルート ロケーション (/Volumes/<catalog>/<schema>/<volume>/… パスなど)。既存のエクスペリメントのアーティファクトの場所と一致しているか、省略されている必要があります。

フィールド

Type

説明

experiment

String

必須。ランの MLflow エクスペリメント名。エクスペリメントの追跡と観察可能性を参照してください。

code_source_path

String

実行するトレーニングコード:パッケージ化された tgz アーティファクトの出力ファイル、またはすでにuploadされているコードへの /Workspace または /Volumes パス。トレーニングコードの出荷を参照してください。

deployments

Sequence

必須。コマンドと、それを実行するコンピュートを記述する単一のデプロイメント。各エントリには、command_path、compute、およびオプションの name が含まれます。

deployments[].command_path

String

必須。タスクが各ノード上で実行するスクリプト。

deployments[].compute.accelerator_type

String

必須。GPUタイプ(例:GPU_1xA10、GPU_1xH100、GPU_8xH100、GPU_8xB300など)。

deployments[].compute.accelerator_count

Integer

必須。すべてのノードにわたるGPUの総数—accelerator_typeでエンコードされたノードごとの数の倍数。

deployments[].name

String

Logs と UI で使用される、デプロイのオプションの名前。

docker_image_url

String

管理対象環境の代わりに、コマンドを実行するためのオプションのカスタム Dockerイメージ。レガシー Python CLI でカスタム Dockerイメージを使用するをご覧ください。

mlflow_run

String

MLflow ランのオプションの表示名。

mlflow_experiment_directory

String

エクスペリメントが作成されるオプションのワークスペースディレクトリ。/Workspace で始まる必要があります。defaultのユーザーディレクトリを持たないService Principalとして実行する場合にこれを設定します。

mlflow_artifact_location

String

MLflow アーティファクトのオプションのルート ロケーション (/Volumes/<catalog>/<schema>/<volume>/… パスなど)。既存のエクスペリメントのアーティファクトの場所と一致しているか、省略されている必要があります。

ai_runtime_task内ではなく、タスクとジョブで再試行、タイムアウト、権限、および環境(environment_key)を設定します。タスクのリファレンス全体については、AIランタイムタスクを参照してください。

ハードウェアアクセラレータを設定する​

accelerator_typeワークロードに必要なGPUに設定し、accelerator_countをGPUの総数に設定します。カウントは、ノードあたりのGPU数の倍数になります。GPU_1xA10およびGPU_1xH100の場合は1、GPU_8xH100およびGPU_8xB300の場合は8になります。ノードあたりのサイズより大きいカウントでは、タスクが複数のノードで実行されます。たとえば、GPU_8xH100とaccelerator_count: 16の場合、2つのノードで実行されます。アクセラレータの選択に関するガイダンスについては、ハードウェアオプションを参照してください。

注記

マルチノードランの場合、AI Runtimeはすべてのノードでコマンドを実行し、タスク環境内に標準の分散トレーニング環境変数(NUM_NODES、WORLD_SIZE、LOCAL_WORLD_SIZE、MASTER_ADDR、MASTER_PORT)を設定します。コマンドからそれらを読み込みます(例:torchrunの起動)。バンドルでは設定しません。

環境と依存関係を設定する​

ジョブで environments ブロックを宣言し、タスクから environment_key で参照します。AI ランタイムは、コマンドを実行する前にリストされた依存関係をインストールします:

YAML
resources:
jobs:
train:
tasks:
- task_key: train
environment_key: default
ai_runtime_task:
# experiment, code_source_path, and deployments as above
environments:
- environment_key: default
spec:
environment_version: '6'
dependencies:
- numpy

利用可能な環境については、環境の設定を参照してください。

トレーニングコードを出荷する​

code_source_path トレーニングコードの場所をタスクに伝えます。これは次の2つの形式のいずれかを取ります。

  • パッケージ化された tgz アーティファクト — アーティファクトを宣言し、出力ファイルを code_source_path に指定します。Databricksはtarballをビルドし、databricks bundle deployにuploadします。これは、ローカルのプロジェクトディレクトリまたはコミットされたGitリビジョンからコードを出荷する方法です。
  • ワークスペースまたはボリュームのパス — すでに upload されており、そのまま使用されるコード。

tgz アーティファクトを宣言し、code_source_path がその出力ファイルを指すようにします。databricks bundle deploy では、CLI は tarball をビルドして upload し、タスクがそれを解凍して、それに対してコマンドを実行します:

YAML
artifacts:
code:
type: tgz
path: .
include: [src]
files:
- source: ./dist/code.tgz
resources:
jobs:
train:
tasks:
- task_key: train
ai_runtime_task:
code_source_path: ./dist/code.tgz

作業ツリーからファイルをパッケージ化するには include を使用し、コミットされた Branch または commit のスナップショットを作成するには git を使用します。

tgz アーティファクト フィールド:

フィールド

説明

type

tgz build コマンドを実行する代わりに、ソースファイルから gzipped tarball をビルドします。

path

パッケージ化するベースディレクトリ。include パスおよびアーカイブのエントリ名は、それに対する相対パスになります。

include

パッケージ化する path のサブパスのリスト。path のすべてをパッケージ化するには省略します。.gitignore が適用されます。バンドル全体の sync.include および sync.exclude は適用されません。build コマンドの代替手段。

git

作業ツリーではなく、コミットされた Git リファレンスのスナップショットを作成します。git.branch または git.commit を設定します (両方が設定されている場合は commit が優先されます)。build コマンドの代替手段。

files[].source

ビルドされた tarball のパス。これに対してポイント code_source_path を指定します。

フィールド

説明

type

tgz build コマンドを実行する代わりに、ソースファイルから gzipped tarball をビルドします。

path

パッケージ化するベースディレクトリ。include パスおよびアーカイブのエントリ名は、それに対する相対パスになります。

include

パッケージ化する path のサブパスのリスト。path のすべてをパッケージ化するには省略します。.gitignore が適用されます。バンドル全体の sync.include および sync.exclude は適用されません。build コマンドの代替手段。

git

作業ツリーではなく、コミットされた Git リファレンスのスナップショットを作成します。git.branch または git.commit を設定します (両方が設定されている場合は commit が優先されます)。build コマンドの代替手段。

files[].source

ビルドされた tarball のパス。これに対してポイント code_source_path を指定します。

注記

AI Runtime はコードをディレクトリに抽出し、CODE_SOURCE_PATH 環境変数として公開します。スクリプトを実行する前に、相対パスが解決されるようにコマンドから参照します(例:cd "$CODE_SOURCE_PATH")。

完全な例​

この例では、Databricks CLI のインストールと構成以外の事前の CLI セットアップを行わずに、ローカルプロジェクトから単一の A10 GPU でトレーニングを実行します。プロジェクトには 3 つのファイルがあります。

Text
my-training/
├── databricks.yml
├── command.sh
└── src/
└── train.py

command.sh はcommand_pathによって名前が付けられたエントリポイントです。抽出されたコードディレクトリに移動し、トレーニングスクリプトを実行します:

Bash
#!/usr/bin/env bash
set -euo pipefail
cd "$CODE_SOURCE_PATH"
python train.py

databricks.yml バンドルに名前を付け、src/をtgzアーティファクトとしてパッケージ化し、ai_runtime_taskとして実行し、タスク環境にnumpyをインストールし、開発ターゲットと本番運用ターゲットを定義します。

YAML
bundle:
name: my-training

artifacts:
code:
type: tgz
path: .
include: [src]
files:
- source: ./dist/code.tgz

resources:
jobs:
train:
name: my-training
tasks:
- task_key: train
environment_key: default
ai_runtime_task:
experiment: /Users/me@example.com/my-training
code_source_path: ./dist/code.tgz
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1
environments:
- environment_key: default
spec:
environment_version: '6'
dependencies:
- numpy

targets:
dev:
mode: development
default: true
prod:
mode: production

バンドルをデプロイしてジョブを実行します。databricks bundle deployはtgzアーティファクトをビルドしてuploadし、ジョブを作成します。databricks bundle runはそれを起動します:

Bash
databricks bundle deploy --target dev
databricks bundle run train --target dev

マルチタスク ワークフローを構築する​

ai_runtime_taskはDatabricksのジョブタスクであるため、ジョブの他の部分と構成されます。トレーニングの前に準備ステップを実行し、1 つのジョブで GPU タスクと CPU タスクを組み合わせ、タスクごとに異なるアクセラレータを使用できます。

depends_on でタスクの順序を指定する​

タスクを順番に実行するには、depends_onを使用します。次のパイプラインでは、準備ノートブックを実行し、その後に準備タスクが成功した場合にのみ起動する GPU トレーニングタスクを実行します:

YAML
resources:
jobs:
train_pipeline:
tasks:
- task_key: prep
notebook_task:
notebook_path: ./prep.py
- task_key: train
depends_on:
- task_key: prep
ai_runtime_task:
experiment: my-experiment
code_source_path: ./dist/code.tgz
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1

GPU と CPU のタスクを組み合わせる​

上記のパイプラインでは、トレーニングステップのみに GPU が必要です。データ準備などの非 GPU の作業を別のタスクに維持することで、GPU の時間をトレーニングに集中させることができます。

注記

ai_runtime_task は、Databricks ジョブのタスク値({{tasks.<task_key>.values.<name>}} または dbutils.jobs.taskValues)をサポートしていません。ステップ間でデータを渡すには、Unity Catalog ボリュームやワークスペースファイルなど、両方のタスクが読み取ることができる共有場所にデータを書き込み、各タスクからそのパスを参照します。

ワークロードをスケジュールする​

定期的に実行するようにジョブにscheduleを追加します。バンドルのデプロイによって自動的にランが開始されないようにスケジュールを停止した状態で出荷し、準備ができたら停止を解除します。

YAML
resources:
jobs:
train_pipeline:
schedule:
quartz_cron_expression: '0 0 9 * * ?'
timezone_id: UTC
pause_status: PAUSED

開発から本番運用へプロモートする​

開発から本番運用への昇格は、AI ランタイムタスクがそのまま継承する標準的なバンドル機能です。

バンドルのターゲットとモード​

開発ターゲットとともに、mode: productionを使用して本番運用ターゲットを定義します。ターゲットによって、バンドルのデプロイ先とそのリソースの命名方法が制御されます。

YAML
targets:
dev:
mode: development
default: true
prod:
mode: production

デプロイしてラン​

標準のバンドルコマンドを使用して、ターゲットに対してバンドルをデプロイおよび実行します:

Bash
databricks bundle deploy --target dev
databricks bundle run train_pipeline --target dev

次のステップ​