標準コンピュート向け 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 以降を実行し、 Standard アクセス モードを使用する必要があります。
  • dockerPATH コマンドを使用できる最新の Docker デーモンが必要です。

Note

Databricks Runtime 18 では、 18 を選択します。 18.0 を選択しないでください。 18 ランタイム オプションの名前は、今後の更新で 18 LTS に変更されます。

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

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

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

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

これらの手順では、Databricks で提供される基本イメージ (推奨) を拡張してカスタム イメージを構築する方法について説明します。 基本イメージには、Ubuntu、Python、JDK など、ワークロードを起動するために必要な依存関係が含まれています。 databricksruntime/environment:v5-standardをプルし、パッケージを上に重ねて、進行中の Databricks で管理されている更新プログラムとセキュリティ パッチを継承できます。

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

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

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

docker pull databricksruntime/environment:v5-standard

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

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

FROM databricksruntime/environment:v5-standard

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

次の例は、プライベート リポジトリからパッケージをインストールする方法を示しています。

FROM databricksruntime/environment:v5-standard

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

RUN /databricks/python3/bin/python -m pip install --no-cache-dir simplejson

任意の標準的な Dockerfile 命令 ( RUNENVWORKDIRCOPYなど) を使用できます。 次の手順は、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:v5-standard を拡張する代わりに、最小限の同等のをゼロから構築できます。

警告

ゼロからビルドすることは高度なオプションです。 Python のピン、セキュリティ パッチ、プラットフォーム ツール、および v5-standard/databricks/ 配下のプラットフォーム必須ファイルを含む、/etc/environment イメージに対するアップストリームでの変更を追跡する責任を負います。 代わりに、Databricks では、前述のdatabricksruntime/environment:v5-standardで示したようにを拡張することを推奨しています。

Databricks には、requirements.txtの基本的なPython環境を再作成する参照 Dockerfile と v5-standardが用意されています。 ビルドする前に、両方のファイルを同じディレクトリにダウンロードします。

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

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_modeDATA_SECURITY_MODE_STANDARD に設定します)。 コンピューティングが 専用 アクセス モードに設定されている場合は、別のバージョンの Databricks Container Services が使用されます。これは別の基本イメージを想定しており、ビルドした基本イメージで起動できません。
  • Databricks ランタイムのバージョンは 18 以上である必要があります。 Databricks Runtime 18 では、 18.0 ではなく 18 を選択します。

Note

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

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

  1. [ コンピューティングの作成] ページで、 アクセス モードStandard に設定され、 Databricks ランタイム18 以上に設定されていることを確認します。 18 と18.0 の両方が表示される場合は、18 を選択します。

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

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

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

    レジストリ タグ形式
    Docker Hub <organization>/<repository>:<tag> (例: databricksruntime/environment:v5-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 呼び出しの例を次に示します。 data_security_modeDATA_SECURITY_MODE_STANDARD に設定され、spark_versionが Databricks Runtime 18 以上の値に設定されていることを確認します。 Databricks Runtime 18 では、18.x-scala2.13ではなく、18.0.x-scala2.13を使用します。

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": "18.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 行を FROM databricksruntime/environment:v5-standard (または AWS Graviton の場合は v5-standard-arm ) に置き換えます。
  2. Dockerfile 命令を新しい基本イメージに移植します。 標準の Dockerfile 命令がサポートされています。ただし、「 手順 2: カスタム イメージをビルドする」に記載されている例外があります。
  3. Pythonパッケージを他の virtualenv ではなく /databricks/python3 にインストールします。 このパスから読み取られたワークロード (ノートブック、Python ホイール ジョブ、Python スクリプト ジョブ)。
  4. Standard アクセス モードと Databricks Runtime 18 以降を使用するようにコンピューティング構成を更新します。 Databricks Runtime 18 では、 18.0 ではなく 18 を選択します。
  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 イメージを指定する前に、ワークスペースで有効にする必要があります。 「手順 1: Standard コンピューティングで Databricks Container Services を有効にする」を参照してください

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