Databricks Container Services を使用してコンテナーをカスタマイズする

Databricks Container Services を使用するとコンピューティングの作成時に Docker イメージを指定できます。 ユース ケースの例を次に示します。

  • ライブラリのカスタマイズ: インストールするシステム ライブラリを完全に制御できます。
  • ゴールデン コンテナー環境: Docker イメージは、絶対に変更されないロックダウンされた環境です。
  • Docker CI/CD 統合: Azure Databricks を Docker CI/CD と統合できます。

また、Docker イメージを使用して、GPU デバイスを使用するコンピューティングにカスタム ディープ ラーニング環境を作成することもできます。 Databricks Container Services で GPU コンピューティングを使用する方法の詳細については、GPU コンピューティングでの Databricks Container Services に関するページを参照してください。

コンテナーが起動するごとにタスクを実行するには、init スクリプトを使用します。

要件

  • Azure Databricks ワークスペースの Databricks Container Services が有効になっている必要があります。
  • コンピューターで最新の Docker デーモン (テスト済みで、クライアント/サーバー バージョン 18.03.0-ce で動作するデーモン) が実行されている必要があります。docker コマンドを PATH で使用できる必要があります。

制限事項

  • Databricks Container Services は、共有アクセス モードを使用するコンピューティングではサポートされていません。
  • Databricks Runtime for Machine Learning では、Databricks Container Services はサポートされていません。
  • Databricks Container Services のボリュームにアクセスするには、コンピューティングの [Spark 構成] フィールドに構成 spark.databricks.unityCatalog.volumes.enabled true を追加します。

手順 1: ベースを構築する

Databricks では、Databricks がビルドしてテストしたベースから Docker ベースを構築する必要があります。 Docker ベースを最初からビルドすることもできます。 ここでは、2 つのオプションについて説明します。

方法 1. Databricks によって構築されたベースを使用する

この例では、ランタイム バージョンが Databricks Runtime 9.0 以上のコンピューティングを対象とする 9.x イメージ タグを使用します。

FROM databricksruntime/standard:9.x
...

pandas や urllib の最新バージョンなど、追加の Python ライブラリを指定するには、コンテナー固有のバージョンの pip を使用します。 databricksruntime/standard:9.x コンテナーには、次を含めます。

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

databricksruntime/standard:8.x コンテナー以下には、次を含めます。

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3

ベース イメージは、https://hub.docker.com/u/databricksruntime の Docker Hub でホストされています。 これらのベースの生成に使用される Dockerfile は https://github.com/databricks/containers にあります。

注意

Docker Hub でホストされていて、"-LTS" サフィックスが付いたタグを持つイメージにパッチが適用されます。 他のすべてのイメージは例であり、定期的にパッチが適用されるわけではありません。

注意

ベース イメージ databricksruntime/standarddatabricksruntime/minimal は、使用できなくなった Databricks Runtime with Conda (ベータ版) に含まれる関連のない databricks-standard および databricks-minimal 環境と混同しないでください。

方法 2. 独自の Docker ベースを構築する

Docker ベースを最初からビルドすることもできます。 Docker 画像は、次の要件を満たしている必要があります。

独自の画像をゼロから構築するには、仮想環境を作成する必要があります。 また、Python や R などの Databricks コンピューティングに組み込まれているパッケージも含める必要があります。開始するには、適切なベース イメージを使用します。

  • R の場合: databricksruntime/rbase
  • Python の場合: databricksruntime/python
  • Databricks によって構築された最小限のイメージの場合: databricksruntime/minimal

GitHub の Dockerfile の例を参照することもできます。

注意

Databricks では、Ubuntu Linux を使用することをお勧めします。ただし、Alpine Linux も使用することができます。 Alpine Linux を使用するには、次のファイルを含める必要があります。

さらに、この Dockerfile の例に示すように、Python を設定する必要があります。

警告

Azure Databricks コンピューティング上でカスタム コンテナー イメージを十分にテストします。 コンテナーはローカル コンピューターまたはビルド コンピューター上で動作する場合がありますが、コンテナーを Azure Databricks で起動すると、コンピューティングの起動が失敗したり、特定の機能が無効になったり、コンテナーが警告なしに動作しなくなる可能性があります。 最悪のシナリオでは、データが破損したり、誤って外部のパーティにデータが公開される可能性があります。

手順 2: ベース イメージをプッシュする

カスタム ベース イメージを Docker レジストリにプッシュします。 このプロセスは、次のレジストリでサポートされています。

認証も基本認証もサポートしていない他の Docker レジストリも機能することが予想されます。

Note

Docker レジストリに Docker Hub を使用する場合は、レート制限が 6 時間で起動する予定のコンピューティングの量に対応していることを確認してください。 これらのレート制限は、匿名ユーザー、有料サブスクリプションのない認証済みユーザー、有料サブスクリプションで異なります。 詳細については、Docker のドキュメントを参照してください。 この制限を超えると、"429 要求が多すぎます" という応答が返されます。

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

UI または API を使用してコンピューティングを起動できます。

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

  1. [コンピューティングの作成] ページで、Databricks Container Services をサポートする Databricks Runtime バージョンを指定します。

  2. [詳細オプション] で、[Docker] タブを選択します。

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

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

    Docker イメージ URL の例:

    レジストリ タグの形式
    Docker Hub <organization>/<repository>:<tag> (例: databricksruntime/standard:latest)
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. 認証の種類を選択します。

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

  1. API トークンを生成します。

  2. Clusters API を使用して、カスタム Docker ベースでコンピューティングを起動します。

    curl -X POST -H "Authorization: Bearer <token>" https://<databricks-instance>/api/2.0/clusters/create -d '{
      "cluster_name": "<cluster-name>",
      "num_workers": 0,
      "node_type_id": "Standard_DS3_v2",
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "7.3.x-scala2.12",
    }'
    

    basic_auth 要件は、Docker イメージの種類によって異なります。

    • パブリック Docker イメージの場合は、basic_auth フィールドを含めないでください。
    • プライベート Docker イメージの場合は、サービス プリンシパル ID とパスワードをユーザー名とパスワードとして使用して、basic_auth フィールドを含める必要があります。
    • Azure Container Registry の場合、サービス プリンシパルの ID とパスワードに basic_auth フィールドを設定する必要があります。 サービス プリンシパル作成の詳細については、Azure Container Registry サービス プリンシパルの認証に関するドキュメントを参照してください。

init スクリプトを使用する

Databricks Container Services を使用すると、お客様は Docker コンテナーに init スクリプトを含めることができます。 ほとんどの場合、init スクリプトの代わりに Docker を使用して (Dockerfile を使用して) 直接カスタマイズを行う必要があります。 ただし、コンテナーのビルド時ではなく、コンテナーの起動時に特定のタスクを実行する必要があります。 これらのタスクには init スクリプトを使用します。

たとえば、カスタム コンテナー内でセキュリティ デーモンを実行するとします。 イメージ ビルド パイプラインを使用して、Docker イメージにデーモンをインストールしてビルドします。 次に、デーモンを起動する init スクリプトを追加します。 この例では、init スクリプトに systemctl start my-daemon のような行が含まれます。

この API では、次のようにコンピューティング仕様の一部として init スクリプトを指定できます。 詳細については、Clusters API に関するページをご覧ください。

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Databricks Container Services イメージの場合は、init スクリプトをクラウド ストレージに格納することもできます。

Databricks Container Services を使用するコンピューティングを起動すると、次の手順が実行されます。

  1. VM はクラウド プロバイダーから取得されます。
  2. カスタム Docker イメージは、リポジトリからダウンロードされます。
  3. Azure Databricks は、イメージから Docker コンテナーを作成します。
  4. Databricks Runtime コードが Docker コンテナーにコピーされます。
  5. init スクリプトが実行されます。 「init スクリプトとは」を参照してください。

Azure Databricks は、Dockerの CMD および ENTRYPOINT プリミティブを無視します。

コンテナー サービスを有効にする

コンピューティングでカスタム コンテナーを使用するには、ワークスペース管理者が Databricks Container Services を有効にする必要があります。

ワークスペース管理者は、 ワークスペース構成 API を使用して Databricks Container Service を有効にすることができます。 JSON 要求本文で、次の例のように enableDcstrue に指定します。

curl -X PATCH -n \
  https://<databricks-instance>/api/2.0/workspace-conf \
  -d '{
    "enableDcs": "true"
    }'