標準コンピュート向け Databricks Container Services

Important

標準コンピューティング用の Databricks Container Services は ベータ版です。 ワークスペース管理者は、ワークスペースのプレビュー ページからこの機能を有効にする必要があります。 これは、一般公開されている 専用コンピューティング用の Databricks Container Services とは別のサービスです。

標準コンピューティング用の Databricks Container Services を使用すると、 標準コンピューティングを作成するときに Docker イメージを指定できます。これにより、共有コンピューティング環境のカスタム コンテナーにアクセスできます。 Docker イメージはワークロード環境の唯一の定義であるため、開発と運用全体で一貫した結果を得るためのリモート環境をローカルで再現できます。

カスタム イメージは、PYTHON REPL コマンドやPython UDF など、ユーザー コードを実行するサンドボックス コンテナーに使用されます。 Spark エンジンは Databricks で管理された環境で実行され、Spark クエリは Spark Connect を使用してサンドボックス コンテナーと Spark エンジンの間で送信されます。

さらに、カスタムイメージ構築を支援するために、Azure Databricksはサーバーレス環境のバージョンに合わせたベースイメージを提供し、ニーズに応じて拡張可能です。

Requirements

Databricks Container Services を標準コンピューティングに使用するには:

  • コンピューティング リソースは Databricks Runtime 18 LTS 以上を実行し、 Standard アクセス モードを使用する必要があります。
  • dockerでPATH コマンドを使用できる最新の Docker デーモンが必要です。

Note

必ず 18 LTS を選択してください。 18.0、18.1、または 18.2 を選択しないでください。

以下の表を使って、各ベースイメージに必要な最小Databricksランタイムバージョンを特定します。

TestVM Databricks Runtime の最小構成 最低API spark_version サーバーレス環境バージョン
databricksruntime/environment:v6-standard 19 19.x-scala2.13 6
databricksruntime/environment:v5-standard 18 LTS 18.3.x-scala2.13 5

手順 1: Databricks Container Services を Standard コンピューティングに対して有効にする

標準コンピューティングに Databricks Container Services を使用するには、ワークスペース管理者が [プレビュー ] ページからこの機能を有効にする必要があります。

  1. Azure Databricks ワークスペースに管理者としてサインインします。
  2. 右上のユーザー メニューで、[ プレビュー] をクリックします。
  3. 標準コンピューティング用の DCS を見つけてオンにします。

手順 2: カスタム イメージをビルドする

これらの手順では、Databricks で提供される基本イメージ (推奨) を拡張してカスタム イメージを構築する方法について説明します。 基本イメージには、Ubuntu、Python、JDK など、ワークロードを起動するために必要な依存関係が含まれています。 使用するコンピュートが Databricks Runtime の最小要件 を満たすベースイメージを選択し、その上にカスタマイズを追加します。 定期的にイメージを再構築して、ベースイメージから最新のパッチを取り入れてください。 この記事の例では、Databricks Runtime 19 で v6-standard を使用します。

最小限の基本イメージをゼロからビルドする場合は、「 リファレンス: 最小限の基本イメージをゼロからビルドする」を参照してください。

手順 2a: 基本イメージをプルする

基本イメージをプルするには、次を実行します。

docker pull databricksruntime/environment:v6-standard

手順 2b: 基本イメージを拡張する Dockerfile を記述する

カスタム Python パッケージを基本イメージの /databricks/python3 仮想環境にインストールします。 これは、ワークロードを起動するシステム仮想環境です。

FROM databricksruntime/environment:v6-standard

RUN /databricks/python3/bin/python -m pip install <your python package>

以下の例は、ランタイム環境でインデックスURLを保持せずにカスタムパッケージインデックスからパッケージをインストールする方法を示しています。 プライベートインデックスを使う際はビルド時に PIP_INDEX_URL をオーバーライドします。

FROM databricksruntime/environment:v6-standard

ARG PIP_INDEX_URL=https://pypi.org/simple

RUN PIP_INDEX_URL="${PIP_INDEX_URL}" \
    /databricks/python3/bin/python -m pip install --no-cache-dir simplejson

任意の標準的な Dockerfile 命令 ( RUN、 ENV、 WORKDIR、 COPYなど) を使用できます。 次の手順は、Azure Databricks でワークロードが起動される方法により無視されます。

  • USER
  • CMD
  • ENTRYPOINT
  • EXPOSE
  • HEALTHCHECK
  • SHELL
  • STOPSIGNAL

Note

Scala ワークロードの場合は、JAR ファイルをイメージ内の /scala-jars/user ディレクトリにコピーし、サンドボックス ユーザーが読み取ることができるように chmod 0644 します。 Azure Databricks、このパスから Scala REPL クラスパスと Scala UDF クラスパスに JAR を読み込みます。

手順 2c: イメージをビルドする

イメージをビルドするには、次のコマンドを実行します。

docker build -f <your-dockerfile> -t <registry-url>/<project>[/<repo>]:<tag> .

警告

Azure Databricks コンピューティングでカスタム イメージを十分にテストします。 ローカル コンピューターまたはビルド コンピューターで動作するイメージは、Azure Databricksで起動すると、機能を起動したり、サイレント モードで機能を無効にしたり、動作を停止したりできない場合があります。

リファレンス: 最小限の基本イメージをゼロからビルドする

もしベース画像の内容を完全にコントロールしたい場合(例えば、厳格な画像サイズ、サプライチェーン、コンプライアンス要件を満たすため)、databricksruntime/environment:v6-standardを拡張する代わりに、ゼロから最小限のPythonに焦点を当てた画像を作成できます。

このゼロからのリファレンスは、基本的なPython環境のみを再現しています。 v6-standardのJDKやその他のPython以外のランタイムコンポーネントは含まれず、Scalaワークロードもサポートしていません。 ワークロードでそれらのコンポーネントが必要な場合は、Databricks が提供するベースイメージを拡張してください。

警告

ゼロからビルドすることは高度なオプションです。 v6-standard画像の上游の変更、例えばPythonピン、セキュリティパッチ、プラットフォームツール、/databricks/および/etc/environmentのプラットフォームに必要なファイルを追跡する責任を負います。 Databricks では、前述のdatabricksruntime/environment:v6-standardで示したように、を拡張することを推奨しています。

Databricksは、各ベース画像の本質的なPython環境を再現する参照ファイルを提供します。 ビルドする前に、ベースイメージのDockerファイルと依存関係ファイルを同じディレクトリにダウンロードしてください。 Dockerfile.txtをDockerfileとして保存してください。

TestVM Dockerfile 依存ファイル
v6-standard Dockerfile.txt pyproject.toml
v5-standard Dockerfile.txt requirements.txt

イメージをビルドするには、次のコマンドを実行します。

docker build -t <your-registry>/<repo>:<tag> .

ビルド ホストが https://pypi.orgに到達できない場合は、次を実行して、ビルド時に pip インデックスをオーバーライドします。

docker build --build-arg PIP_INDEX_URL=https://your-mirror/simple -t <your-registry>/<repo>:<tag> .

次の手順に進む前に、次のコマンドを実行して、キュレーションされたPython パッケージが正常にインポートされることを確認します。

docker run --rm --cpus 2 <your-registry>/<repo>:<tag> \
  /databricks/python3/bin/python -c \
  "import pandas, numpy, pyarrow, mlflow, databricks.connect; print('OK')"

手順 3: イメージをレジストリにプッシュする

次に、イメージを Docker レジストリにプッシュします。 Databricks Container Services では、Standard コンピューティングと専用コンピューティングの両方で同じレジストリがサポートされています。

認証または基本認証をサポートしていない他のレジストリも機能する必要があります。 基本認証では、レジストリのユーザー名とパスワードが使用されます。

イメージ プルのパフォーマンスを最大限に高めるには、Azure Databricks ワークスペースと同じクラウドとリージョンのレジストリを使用します。

echo "$REGISTRY_PASSWORD" | docker login -u <registry-username> --password-stdin <registry-url>
docker push <registry-url>/<project>[/<repo>]:<tag>

Note

Docker Hubを使用する場合は、レート制限が 6 時間以内に起動する予定のコンピューティングに対応していることを確認します。 詳細については、Docker のドキュメントを参照してください。 この制限を超えた場合、要求は 429 Too Many Requestsを返します。

手順 4: コンピューティングを起動する

UI または API を使用して、カスタム イメージを使用するコンピューティングを起動できます。 次の要件を満たす必要があります。

  • コンピューティング アクセス モードは Standard である必要があります (API では、 data_security_mode を DATA_SECURITY_MODE_STANDARD に設定します)。 コンピューティングが 専用 アクセス モードに設定されている場合は、別のバージョンの Databricks Container Services が使用されます。これは別の基本イメージを想定しており、ビルドした基本イメージで起動できません。
  • Databricks ランタイムのバージョンは 18 LTS 以上である必要があります。 必ず 18.0、18.1、または 18.2 ではなく、18LTS を選択してください。
  • Databricksのランタイムバージョンは 、ベースイメージの最低要件を満たす必要があります。

Note

インスタンス プールに対して起動するには、preloaded_docker_imagesセットでプールを作成し、クラスターのdocker_imageが一致する必要があります。 起動する前に、 インスタンス プールで Databricks Container Services を使用するを 参照してください。

UI を使用してコンピューティングを起動する

  1. 「Create compute」ページでアクセスモードをStandardに設定し、ベースイメージの最低要件を満たすDatabricksランタイムを選択します。

  2. [ 詳細設定] で[ Docker ] タブを選択します。

  3. [独自の Docker コンテナーを使用する] を選択します。

  4. [ Docker イメージ URL ] フィールドに、カスタム イメージを入力します。

    レジストリ タグ形式
    Docker Hub <organization>/<repository>:<tag> (例: databricksruntime/environment:v6-standard)
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. 認証の種類を選択します。 Docker イメージ認証を参照してください。

Note

コンピューティングの作成時に Docker の設定が表示されない場合は、ワークスペースで Databricks Container Services が有効になっていない可能性があります。 ワークスペース管理者は、ユーザーが Docker イメージを指定する前に有効にする必要があります。 「手順 1: Standard コンピューティングで Databricks Container Services を有効にする」を参照してください。

API を使用してコンピューティングを起動する

以下のAPIコール例は、Databricks Runtime 19上で v6-standard カスタムイメージを用いて標準計算を作成します。 data_security_mode を DATA_SECURITY_MODE_STANDARD に設定します。 spark_versionはベース画像の最低要件を満たす必要があります。

databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id Standard_DS3_v2 \
--json '{
  "num_workers": 1,
  "docker_image": {
    "url": "<docker-registry-image-url>",
    "basic_auth": {
      "username": "<docker-registry-username>",
      "password": "<docker-registry-password>"
    }
  },
  "spark_version": "19.x-scala2.13",
  "data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'

Docker イメージ認証

認証要件は、Docker イメージの種類によって異なります。 シークレットを使用して、認証ユーザー名とパスワードを格納することもできます。 「認証にシークレットを使用する」を参照してください。

  • パブリック Docker イメージの場合、認証情報を含める必要はありません。 UI で、[ 認証 ] を [既定] に設定します。 API 呼び出しの場合は、フィールドを含basic_auth。
  • プライベート Docker イメージの場合は、サービス プリンシパル ID とパスワード (または該当するシークレット) をユーザー名とパスワードとして使用して認証します。
  • Azure Container Registry の場合は、サービス プリンシパル ID とパスワード (または該当するシークレット) をユーザー名とパスワードとして使用して認証します。 サービス プリンシパル作成の詳細については、Azure Container Registry サービス プリンシパルの認証に関するドキュメントを参照してください。

認証にシークレットを使用する

Databricks Container Service では、認証にシークレットの使用がサポートされています。 UI でコンピューティング リソースを作成するときは、[ 認証 ] フィールドを使用して ユーザー名とパスワードを選択し、プレーン テキストのユーザー名またはパスワードを入力する代わりに、 {{secrets/<scope-name>/<dcs-secret>}} 形式を使用してシークレットを入力します。 API を使用する場合は、 basic_auth フィールドにシークレットを入力します。

シークレットの作成の詳細については、「 シークレット管理」を参照してください。

インスタンス プールで Databricks Container Services を使用する

インスタンス プールで Databricks Container Services を使用するには、UI ではなく インスタンス プール API を使用してプールを作成する必要があります。

プールは、Docker イメージが事前に読み込まれた状態で作成する必要があります。 これにより、アイドル状態のインスタンスがカスタム イメージでウォームアップされ、ワークロードの開始速度が速くなります。 コンピューティングを直接起動するときに使用するのと同じイメージ参照と認証を使用して、要求の preloaded_docker_images フィールドを設定します。 フィールドはリストであるため、1 つのプールで複数のイメージをプリロードできます。

プールとそのアタッチされたコンピューティング リソースは、Docker が使用されているかどうかを確認する必要があります。 プールに preloaded_docker_images が設定されていない場合、それに対して Databricks Container Services コンピューティングを起動することはできません。 preloaded_docker_imagesセットで新しいプールを作成します。

preloaded_docker_imagesで作成されたプールの場合、プールに対して起動されるすべてのコンピューティング リソースは、作成要求で一致するdocker_imageを提供する必要があります。 そうしないと、コンピュートの作成は'docker_image' must be provided for cluster created with instance pool: <pool-id>で失敗します。

元の Databricks Container Services からの移行

標準コンピューティング用の Databricks Container Services は、専用コンピューティング用の元の Databricks Container Services とは異なるサービスです。 この機能には、次の違いがあります。

  • ワークロードは Spark Connect プロトコルを介して実行されます。
  • Init スクリプトは、ワークロードのPython環境を変更しません。 すべてのPython依存関係を Docker イメージにインストールする必要があります。 Datadog や Kafka エージェントなど、Spark からのデータを使用するアプリケーションでは、引き続き init スクリプトを使用できます。

専用コンピューティング用に元の Databricks Container Services から移行するには、標準コンピューティング用に Databricks Container Services でカスタム イメージを再構築し、コンピューティング構成を更新します。

  1. Dockerfile の FROM 行を、ターゲットランタイムが Databricks Runtime の最小要件 を満たすベースイメージに置き換えてください。 AWS Gravitonの場合は対応する -arm 画像バリアントを使いましょう。
  2. Dockerfile 命令を新しい基本イメージに移植します。 標準の Dockerfile 命令がサポートされています。ただし、「 手順 2: カスタム イメージをビルドする」に記載されている例外があります。
  3. Pythonパッケージを他の virtualenv ではなく /databricks/python3 にインストールします。 このパスから読み取られたワークロード (ノートブック、Python ホイール ジョブ、Python スクリプト ジョブ)。
  4. コンピュート設定を 標準 アクセスモードに更新し、 ベースイメージの最低要件を満たすDatabricksランタイムバージョンを選択します。
  5. init スクリプトが以前に実行したPython環境セットアップを Dockerfile に移動します。

制限事項

標準コンピューティングの 制限に加えて、標準コンピューティングの Databricks Container Services には次の制限があります。

  • コンピューティング スコープ ライブラリはサポートされていません。
  • プライベート パッケージ リポジトリはサポートされていません。
  • databricks Runtime for Machine Learningはサポートされていません。
  • インスタンス プールに対して Databricks Container Services を使用して標準コンピューティングを起動するには、preloaded_docker_imagesセットを使用してプールを作成する必要があります。 インスタンス プールでの Databricks Container Services の使用に関する説明を参照してください。

Troubleshooting

コンピュートの作成時に、[詳細] の下に Docker タブが表示されない場合は、Databricks Container Services はワークスペースで有効になっていません。 ワークスペース管理者は、ユーザーが Docker イメージを指定する前に、ワークスペースで有効にする必要があります。 「コンテナー サービスを有効にする」を参照してください。

[ Docker ] タブは、 docker_image.url 属性を非表示にするコンピューティング ポリシーによって非表示にすることもできます。 この機能が有効になっていてもタブが見つからない場合は、割り当てられたポリシーがこの属性を非表示にするかどうかを確認するようにワークスペース管理者に依頼します。 サポートされている属性を参照してください。