Important
この機能は ベータ版です。 これを使用するには、ワークスペース管理者がワークスペースプレビューページからAIランタイムベータ機能とDatabricksアーティファクトレジストリのプレビューを有効にしなければなりません。
AIランタイムはArtifact Registryに保存されたカスタムDockerコンテナイメージを実行できます。 必要な場合は、カスタム イメージを使用します。
- システムライブラリや
environment.dependenciesではインストールできない複雑な依存関係。 - 開発、研究、生産にまたがる再現可能な環境。
- 貴社のプラットフォーム チームまたはセキュリティ チームが構築した、組織で承認された非公開のイメージ。
前提条件
- Databricks CLIバージョン1.19.0以上にインストールまたはアップデートしてください。 「Databricks CLI のインストールまたは更新」を参照してください。
- ワークスペース管理者にAI ランタイムベータ機能 プレビューを有効にするよう依頼してください。 手順については 「ワークスペースレベルのプレビュー管理」をご覧ください。
- 同じワークスペース内にArtifact Registryを設定し、画像のプッシュや読み取りの許可を取得してください。 「 アーティファクトレジストリで始める」をご覧ください。
- ローカルマシンにDockerをインストールして起動してください。
画像をアーティファクトレジストリにプッシュする
AI Runtimeでカスタムイメージを使う前に、ワークロードを提出したのと同じワークスペース内のArtifact Registryに保存してください。
画像用のUnityカタログカタログとスキーマを作成または選択してください。
「 Artifact Registryで始めて 」に従い、Docker認証を設定し、必要な権限を付与し、イメージをプッシュします。
画像のUnity Catalog名を以下の形式で確認してください:
<catalog>.<schema>.<image>:<tag>たとえば、「
main.ml.training:v1」のように入力します。 ワークロード設定にはレジストリホスト名を含めないでください。
Tip
または、Databricks CLIの databricks air images push ヘルパーコマンド を使うこともできます。
ワークロードでDockerイメージを使う
ワークロードのYAMLで画像のUnity Catalog名を environment.unity_catalog_image以下に指定してください:
experiment_name: my-dcs-training
environment:
unity_catalog_image: main.ml.training:v1
compute:
num_accelerators: 1
accelerator_type: GPU_1xA10
command: python /app/train.py
この例では、画像内でtrain.pyから/appを実行します。 イメージを再構築せずにアプリケーションコードを別途アップロードするには、「 アップロードされたアプリケーションコードを実行する」をご覧ください。
独自の Docker イメージを取り込む場合、 environment.dependencies と environment.version はサポートされません。 いずれかのフィールドで environment.unity_catalog_image を指定すると、エラーがトリガーされます。 追加の依存関係がある場合は、代わりに Dockerfile にパッケージをインストールします。
ワークロードを送信します。
databricks air run -f workload.yaml -p my-databricks-profile
プロファイルは画像が保存されている同じワークスペースに認証しなければなりません。
コンテナーに挿入された環境変数
AI ランタイムは、実行時にすべてのコンテナーに次の環境変数を挿入します。
-
CODE_SOURCE_PATH:code_sourceが設定されたときにアップロードされたアプリケーションコードへのパス。 -
NUM_NODES:ノードの総数。 -
LOCAL_WORLD_SIZE:ノードあたりのGPU数。 -
WORLD_SIZE:プロセスの総数。 -
POD_RANK: 現在のノードランク(0インデックス)。 また、NODE_RANKとして注入されます。 -
LOCAL_ADDR:ローカルノードIP(マルチノードのみ)。 -
MASTER_ADDR: ランク0の調整アドレス(マルチノードのみ)。 -
MASTER_PORT: ランク0のコーディネーションポート(マルチノードのみ)。
Examples
以下の例は、アップロードされたアプリケーションコードとカスタムイメージで分散トレーニングを実行する方法を示しています。
アップロードしたアプリケーションコードを実行する
code_sourceを使って画像とは別にアプリケーションコードをアップロードしてください。 画像を再構築せずにコードを編集して再提出できます。 コードのPythonおよびシステム依存関係を画像にインストールしてください。
train.py
workload.yamlの隣にあるローカルsrcディレクトリに置いてください。 以下の構成は src をアップロードし、カスタムイメージ内で train.py を実行します:
experiment_name: my-dcs-uploaded-code
environment:
unity_catalog_image: main.ml.training:v1
compute:
num_accelerators: 1
accelerator_type: GPU_1xA10
code_source:
root_path: ./src
command: |-
cd "$CODE_SOURCE_PATH"
python3 train.py
root_pathはworkload.yamlに対して解決されます。 AI Runtimeはアップロードされたディレクトリのコンテナ内のパスに $CODE_SOURCE_PATH を設定します。 コードソースの選択肢については code_source を参照してください。
RDMA を使用したマルチノード H100
AWS p5 インスタンスで完全なネットワーク帯域幅を必要とするマルチノード H100 ジョブの場合は、NCCL と EFA が事前に構成された Databricks 基本イメージのいずれかにイメージを基 にします。
experiment_name: my-dcs-distributed
environment:
unity_catalog_image: main.ml.training:v1
compute:
num_accelerators: 16 # 2 nodes × 8 H100
accelerator_type: GPU_8xH100
command: |-
torchrun \
--nnodes="${NUM_NODES}" \
--nproc_per_node="${LOCAL_WORLD_SIZE}" \
--node_rank="${POD_RANK}" \
--rdzv_endpoint="${MASTER_ADDR}:${MASTER_PORT}" \
/app/train.py
独自のイメージをビルドする
独自のイメージを構築する場合、Databricks では、コーディング エージェントで databricks-ai-runtime スキルを使用するか、Databricks 基本イメージから開始することをお勧めします。
コーディング エージェントを使用する
ゼロからのビルド、CUDA/NCCL/EFA の互換性、一般的な問題、ビルド前チェックリストなど、Dockerfile のステップ バイ ステップ ガイダンス用 の databricks-ai-runtime Claude Code スキルをインストールします。 このスキルには、Databricks CLI バージョン 1.0.0 以降が必要です。
databricks aitools install --skills databricks-ai-runtime --experimental
Databricks の基本イメージ
Databricks は、CUDA、NCCL、クラウド固有のネットワーク (AWS EFA または Azure InfiniBand) が事前に構成されたdatabricksruntime/airで、Docker Hubにベース イメージを発行します。
| タグ | Variant | CUDA | 次の場合に使用します。 |
|---|---|---|---|
dcs-base-azure-runtime |
Runtime | 12 | 事前に構築されたホイールのみをインストールする |
dcs-base-azure-devel |
Devel | 12 | CUDA 拡張機能のコンパイル ( nvccが必要) |
以下のDockerfileはDatabricksのベースイメージにPyTorchを追加します。 基本イメージは、/opt/venvによって管理されるuvでPythonを提供します。
uv pip install デフォルトでその環境をターゲットにしています。 別の環境を使うには、 uv pip installを実行する前にvenvを作成して有効化してください。
画像にトレーニングスクリプトを含めるには、Dockerファイルの横に train.py を配置してください。 Dockerfileはそれを /app/train.pyにコピーします。
code_sourceでアプリケーションコードをアップロードする場合は、COPY指示を省略し、ソースディレクトリにtrain.pyを残してください。
FROM databricksruntime/air:dcs-base-azure-runtime
RUN uv pip install --no-cache \
torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0
RUN uv pip install --no-cache \
transformers==4.45.0 \
accelerate==0.34.0 \
'mlflow>=3.6'
COPY ./train.py /app/train.py
イメージをローカルで構築する:
docker build --platform linux/amd64 -t my-training-image:v1 .
次に「 Artifact Registryで始めて 」に従い、画像をタグ付けしてArtifact Registryにプッシュしてください。 その結果得られた <catalog>.<schema>.<image>:<tag> 名をワークロードYAMLの environment.unity_catalog_image として使います。
Tip
または、Databricks CLIの databricks air images push ヘルパーコマンド を使い、インタラクティブなプロンプトに従ってください。
Limitations
- 画像は、作業を提出するワークスペースのArtifact Registryに保存する必要があります。
- イメージ サイズは 20 GB 以下である必要があります。
-
WORKDIRは実行時に受け入れられない。 イメージにベイクされたファイルには絶対パスを使用します。 たとえば、python /app/train.pyではなくpython train.pyを使用します。 -
environment.dependenciesでenvironment.versionまたはenvironment.unity_catalog_imageを使用することはできません。 イメージ内のパッケージ以外の追加パッケージが必要な場合は、それらを Dockerfile に追加する必要があります。
Troubleshooting
レジストリ関連の認証、許可、イメージプッシュ、または画像発見エラーについては 、「アーティファクトレジストリのトラブルシューティング」を参照してください。
依存関係の読み込み時の ssl.SSLError
ライブラリが SSL コンテキストを作成しようとすると、実行時に OpenSSL エラーが発生してカスタム イメージが失敗する場合があります。次に例を示します。
ssl.SSLError: [CRYPTO] unknown error (_ssl.c:3076)
このエラーは、 huggingface_hubなどのネットワーク接続を開き、読み込みを妨げるライブラリのインポート中に表示されます。
これは、AIランタイムワークロードが連邦情報処理基準(FIPS)が有効化されたホスト上で動作するためです。 イメージの暗号化ライブラリが FIPS に準拠していない場合、OpenSSL は FIPS モードで初期化に失敗するため、SSL コンテキストの作成は失敗します。
推奨される解決策:
エンタープライズ、政府機関、医療、および財務のワークロードは、多くの場合、FedRAMP、CMMC、または HIPAA 監査の FIPS 140-2 または 140-3 コンプライアンスに依存します。 ワークロードが FIPS に準拠している必要がある場合は、FIPS 準拠の暗号化ライブラリを使用してイメージを構築します。
ワークロードで FIPS 準拠が必要ない場合は、 OPENSSL_FORCE_FIPS_MODE 環境変数を 0 に設定して FIPS モードを無効にすることができます。 これを行うと、コンプライアンス要件が自動的に損なわれます。
FIPS モードを無効にするには、 env_variablesのワークロード YAML で設定します。
env_variables:
OPENSSL_FORCE_FIPS_MODE: '0'
または、イメージを使用するすべてのワークロードに適用されるように、Dockerfile に変数を設定します。
ENV OPENSSL_FORCE_FIPS_MODE=0
ワークロードを再送信し、依存関係の読み込み時に SSL エラーが表示されなくなったのを確認します。