トレーニングワークロードの本番運用化
プレビュー
この機能は パブリック プレビュー段階です。
DABs を使用して、AI ランタイム のトレーニング ワークロードをコードとして定義します。ソース管理に維持し、環境間でデプロイし、スケジュールし、他のタスクと組み合わせます。このページでは、独自トレーニングのパスについて説明します。このパスでは、ai_runtime_task が Serverless GPU コンピュート上のコードのディレクトリに対して独自のコマンドを実行します。
主なポイント
- 宣言型オートメーションバンドルを使用して、トレーニングワークロードをコードとして定義し、環境間でデプロイし、スケジュールを設定します。
ai_runtime_taskは、コードのディレクトリに対して独自のコマンドを実行します (独自のトレーニングを持ち込む)。- マルチタスクジョブで GPU と CPU のタスクを組み合わせます。
これは、バンドルを介してServerless GPU上でノートブックを実行するタスクとは異なります。GPU上のノートブックの基本的なバンドルの例については、Jobs APIとDeclarative Automation Bundlesを使用したスケジュール設定を参照してください。
要件
バンドルでAI Runtimeタスクを定義する
1つのai_runtime_taskがエクスペリメントに名前を付け、code_source_pathでトレーニングコードを指定し、1つのデプロイメント(実行するコマンドとそれを実行するGPU)を宣言します。バンドル内のジョブに追加します。
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 | 説明 |
|---|---|---|
| String | 必須。ランの MLflow エクスペリメント名。エクスペリメントの追跡と観察可能性を参照してください。 |
| String | 実行するトレーニングコード:パッケージ化された |
| Sequence | 必須。コマンドと、それを実行するコンピュートを記述する単一のデプロイメント。各エントリには、 |
| String | 必須。タスクが各ノード上で実行するスクリプト。 |
| String | 必須。GPUタイプ(例: |
| Integer | 必須。すべてのノードにわたるGPUの総数— |
| String | Logs と UI で使用される、デプロイのオプションの名前。 |
| String | 管理対象環境の代わりに、コマンドを実行するためのオプションのカスタム Dockerイメージ。レガシー Python CLI でカスタム Dockerイメージを使用するをご覧ください。 |
| String | MLflow ランのオプションの表示名。 |
| String | エクスペリメントが作成されるオプションのワークスペースディレクトリ。 |
| String | MLflow アーティファクトのオプションのルート ロケーション ( |
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 ランタイムは、コマンドを実行する前にリストされた依存関係をインストールします:
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 されており、そのまま使用されるコード。
- Packaged artifact
- Workspace or volume path
tgz アーティファクトを宣言し、code_source_path がその出力ファイルを指すようにします。databricks bundle deploy では、CLI は tarball をビルドして upload し、タスクがそれを解凍して、それに対してコマンドを実行します:
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 を使用します。
すでにuploadされたコードを使用するには、code_source_pathを/Workspace/…または/Volumes/…のパスに設定します。Databricksはパスをそのまま使用し、何もパッケージ化しません。
tgz アーティファクト フィールド:
フィールド | 説明 |
|---|---|
|
|
| パッケージ化するベースディレクトリ。 |
| パッケージ化する |
| 作業ツリーではなく、コミットされた Git リファレンスのスナップショットを作成します。 |
| ビルドされた tarball のパス。これに対してポイント |
AI Runtime はコードをディレクトリに抽出し、CODE_SOURCE_PATH 環境変数として公開します。スクリプトを実行する前に、相対パスが解決されるようにコマンドから参照します(例:cd "$CODE_SOURCE_PATH")。
完全な例
この例では、Databricks CLI のインストールと構成以外の事前の CLI セットアップを行わずに、ローカルプロジェクトから単一の A10 GPU でトレーニングを実行します。プロジェクトには 3 つのファイルがあります。
my-training/
├── databricks.yml
├── command.sh
└── src/
└── train.py
command.sh はcommand_pathによって名前が付けられたエントリポイントです。抽出されたコードディレクトリに移動し、トレーニングスクリプトを実行します:
#!/usr/bin/env bash
set -euo pipefail
cd "$CODE_SOURCE_PATH"
python train.py
databricks.yml バンドルに名前を付け、src/をtgzアーティファクトとしてパッケージ化し、ai_runtime_taskとして実行し、タスク環境にnumpyをインストールし、開発ターゲットと本番運用ターゲットを定義します。
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はそれを起動します:
databricks bundle deploy --target dev
databricks bundle run train --target dev
マルチタスク ワークフローを構築する
ai_runtime_taskはDatabricksのジョブタスクであるため、ジョブの他の部分と構成されます。トレーニングの前に準備ステップを実行し、1 つのジョブで GPU タスクと CPU タスクを組み合わせ、タスクごとに異なるアクセラレータを使用できます。
depends_on でタスクの順序を指定する
タスクを順番に実行するには、depends_onを使用します。次のパイプラインでは、準備ノートブックを実行し、その後に準備タスクが成功した場合にのみ起動する GPU トレーニングタスクを実行します:
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を追加します。バンドルのデプロイによって自動的にランが開始されないようにスケジュールを停止した状態で出荷し、準備ができたら停止を解除します。
resources:
jobs:
train_pipeline:
schedule:
quartz_cron_expression: '0 0 9 * * ?'
timezone_id: UTC
pause_status: PAUSED
開発から本番運用へプロモートする
開発から本番運用への昇格は、AI ランタイムタスクがそのまま継承する標準的なバンドル機能です。
バンドルのターゲットとモード
開発ターゲットとともに、mode: productionを使用して本番運用ターゲットを定義します。ターゲットによって、バンドルのデプロイ先とそのリソースの命名方法が制御されます。
targets:
dev:
mode: development
default: true
prod:
mode: production
デプロイしてラン
標準のバンドルコマンドを使用して、ターゲットに対してバンドルをデプロイおよび実行します:
databricks bundle deploy --target dev
databricks bundle run train_pipeline --target dev
次のステップ
- AI ランタイム での Databricks CLI の使用を使用して、コマンド ラインから AI ランタイム ワークロードを実行および管理します。
- トレーニングのランを追跡し、チェックポイントを管理します。エクスペリメントの追跡と観察可能性を参照してください。