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

AIランタイムでカスタムDockerイメージを使用する

備考

この機能はベータ版です。使用するには、ワークスペース管理者がワークスペースの プレビューページから AI ランタイム ベータ機能 および Databricks アーティファクト Registry プレビューを有効にする必要があります。

AI ランタイムは、アーティファクトレジストリに保存されているカスタムDockerコンテナイメージを実行できます。カスタムイメージが必要な場合は、それを使用します。

  • システムライブラリ、または environment.dependencies でインストールできない複雑な依存関係。
  • 開発、調査、本番運用環境全体で再現可能な環境。
  • プラットフォームまたはセキュリティチームによって構築された、組織で承認済みのプライベートイメージ。

前提条件​

アーティファクトレジストリにイメージをプッシュする​

AI ランタイムでカスタムイメージを使用する前に、ワークロードの送信に使用するのと同じワークスペース内のアーティファクトレジストリに保存してください。

  1. 画像用のUnity Catalogカタログとスキーマを作成または選択します。

  2. アーティファクトレジストリの入門に従って、Docker 認証を構成し、必要な権限を付与し、イメージをプッシュします。

  3. 画像は次の形式で Unity Catalog 名に注意してください:

    Text
    <catalog>.<schema>.<image>:<tag>

    たとえば、main.ml.training:v1などです。ワークロード構成にレジストリホスト名を含めないでください。

ヒント

代わりに、Databricks CLI の databricks air images push ヘルパーコマンドを使用します。

ワークロードで Dockerイメージを使用する​

ワークロードYAMLの environment.unity_catalog_image に画像のUnity Catalog名を指定します。

YAML
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

この例では、イメージ内の /app から train.py をランします。イメージを再構築せずにアプリケーションコードを個別にuploadするには、uploadされたアプリケーションコードのランを参照してください。

独自の Dockerイメージ を持ち込む場合、 environment.dependencies および environment.version はサポートされません。両方のフィールドに environment.unity_catalog_image を指定すると、エラーが Trigger されます。追加の依存関係がある場合は、代わりに Dockerfile にパッケージをインストールしてください。

ワークロードを送信します:

Shell
databricks air run -f workload.yaml -p my-databricks-profile

プロファイルは、イメージが保存されているワークスペースと同じワークスペースに対して認証する必要があります。

コンテナに挿入される環境変数​

AIランタイムは、実行時にすべてのコンテナに次の環境変数を注入します。

  • CODE_SOURCE_PATH: code_sourceが構成されている場合の、uploadアプリケーションコードへのパス。
  • NUM_NODES:ノードの合計数。
  • LOCAL_WORLD_SIZE:ノードごとのGPU
  • WORLD_SIZE:プロセスの総数。
  • POD_RANK:現在のノードランク(0始まり)。また、NODE_RANKとして注入されます。
  • LOCAL_ADDR: ローカルノードIP (マルチノードのみ)。
  • MASTER_ADDR: ランク 0 コーディネーションアドレス(マルチノードのみ)。
  • MASTER_PORT:ランク0コーディネーションポート(マルチノードのみ)。

例​

次の例は、upload アプリケーションコードとカスタムイメージを使用して分散トレーニングをランする方法を示しています。

uploadされたアプリケーションコードのラン​

アプリケーション コードをイメージと別に upload するには、 code_source を使用します。イメージを再ビルドせずにコードを編集して再サブミットできます。コードの Python およびシステム依存関係をイメージにインストールします。

train.pyをworkload.yamlの隣のローカルsrcディレクトリに配置します。次の構成は、 src をuploadし、カスタムイメージ内でその train.py を実行します:

YAML
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ランタイムは、コンテナ内のuploadされたディレクトリのパスに$CODE_SOURCE_PATHを設定します。コードソースオプションについては、code_sourceを参照してください。

RDMA 対応のマルチノード H100​

AWS p5 インスタンスで完全なネットワーク帯域幅を必要とするマルチノード H100 ジョブの場合は、NCCL および EFA が事前構成された Databricks ベースイメージのいずれかにイメージのベースを置きます:

YAML
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ベースイメージから開始することをお勧めします。

コーディングエージェントの利用​

databricks-AI-ランタイム Claude Code スキルをインストールすると、Dockerfile に関するステップバイステップのガイダンス(ゼロからの構築、CUDA/NCCL/EFA の互換性、一般的な問題、ビルド前のチェックリストなど)が得られます。このスキルには、Databricks CLI バージョン 1.0.0 以降が必要です。

Shell
databricks aitools install --skills databricks-ai-runtime

Databricksベース画像​

DatabricksはDocker Hub(databricksruntime/air)でベースイメージを公開しており、CUDA、NCCL、クラウド固有のネットワーク(AWS EFAまたはAzure InfiniBand)があらかじめ構成されています。

タグ

バリアント

CUDA

次の時に使用

dcs-base-aws-runtime

ランタイム

12

ビルド済みの wheel のインストールのみ

dcs-base-aws-devel

開発用

12

CUDA 拡張機能のコンパイル (nvcc が必要)

dcs-base-aws-runtime-cu13

ランタイム

13

CUDA 13でのビルド済みwheelのみのインストール

dcs-base-aws-devel-cu13

開発用

13

CUDA 13でのCUDA拡張機能のコンパイル( nvccが必要)

タグ

バリアント

CUDA

次の時に使用

dcs-base-aws-runtime

ランタイム

12

ビルド済みの wheel のインストールのみ

dcs-base-aws-devel

開発用

12

CUDA 拡張機能のコンパイル (nvcc が必要)

dcs-base-aws-runtime-cu13

ランタイム

13

CUDA 13でのビルド済みwheelのみのインストール

dcs-base-aws-devel-cu13

開発用

13

CUDA 13でのCUDA拡張機能のコンパイル( nvccが必要)

次のDockerfileは、DatabricksベースイメージにPyTorchを追加します。ベースイメージは、 uvで管理される /opt/venvで Python を提供します。uv pip install は、defaultでその環境をターゲットにします。異なる環境を使用するには、 uv pip install を実行する前に venv を作成してアクティブ化します。

トレーニングスクリプトをイメージに含めるには、 train.py を Dockerfile の横に配置します。Dockerfile はそれを /app/train.pyにコピーします。code_sourceでアプリケーションコードをuploadする場合は、 COPY 命令を省略し、代わりに train.py をソースディレクトリに保持してください。

Dockerfile
FROM databricksruntime/air:dcs-base-aws-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

画像をローカルでビルドします。

Shell
docker build --platform linux/amd64 -t my-training-image:v1 .

次に、アーティファクトレジストリの起動を参照して、イメージにタグを付け、アーティファクト Registryにプッシュします。生成された<catalog>.<schema>.<image>:<tag>の名前を、ワークロードYAML内でenvironment.unity_catalog_imageとして使用します。

ヒント

代わりに、Databricks CLIでdatabricks air images pushヘルパーコマンドを使用して、対話型プロンプトに従うことができます。

制限​

  • : イメージは、ワークロードを送信するワークスペースのアーティファクトレジストリに保存する必要があります。
  • 画像サイズは20 GB未満である必要があります。
  • WORKDIR : は実行時に適用されません。: イメージに焼き込まれたファイルには絶対パスを使用します。: たとえば、 python train.py ではなく python /app/train.py を使用します。
  • environment.unity_catalog_imageで environment.dependencies または environment.version を使用することはできません。イメージに含まれている以外の追加パッケージが必要な場合は、Dockerfileに追加する必要があります。

トラブルシューティング​

レジストリ関連の認証、許可、イメージプッシュ、またはイメージ探索のエラーについては、アーティファクトレジストリのトラブルシューティングを参照してください。

依存アイテムのロード中に ssl.SSLError が発生しました​

ライブラリがSSLコンテキストを作成しようとしたときに、カスタムイメージが実行時にOpenSSLエラーで失敗することがあります。たとえば、次のようになります。

Text
ssl.SSLError: [CRYPTO] unknown error (_ssl.c:3076)

huggingface_hubなど、ネットワーク接続を開くライブラリをインポート中にエラーが発生し、ロードが妨げられます。

これは、AI ランタイムのワークロードが、連邦情報処理標準 (FIPS) が有効になっているホストで実行されるために発生します。画像の暗号化ライブラリがFIPS準拠でない場合、OpenSSLはFIPSモードで初期化できず、SSLコンテキストの作成に失敗します。

推奨ソリューション:

企業、政府、ヘルスケア、および財務のワークロードは、FedRAMP、CMMC、または HIPPA の監査のために FIPS 140-2 または 140-3 のコンプライアンスに依存することがよくあります。ワークロードが FIPS 準拠である必要がある場合は、FIPS 準拠の暗号化ライブラリを使用してイメージをビルドしてください。

ワークロードにFIPSコンプライアンスが不要な場合は、 OPENSSL_FORCE_FIPS_MODE 環境変数を 0 に設定してFIPSモードを無効にできます。そうすることで、コンプライアンス要件が黙って損なわれる可能性があります。

FIPSモードを無効にするには、env_variablesの下にあるワークロードYAMLで設定します:

YAML
env_variables:
OPENSSL_FORCE_FIPS_MODE: '0'

あるいは、Dockerfileで変数を設定して、イメージを使用するすべてのワークロードに適用されるようにすることもできます。

Dockerfile
ENV OPENSSL_FORCE_FIPS_MODE=0

ワークロードを再送信し、依存関係を読み込むときに SSL エラーが発生しなくなったことを確認してください。

その他のリソース​