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 スクリプトを使用します。

要件

Note

Databricks Runtime for Machine Learning では、Databricks Container Services はサポートされていません。

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

ステップ 1:ベースを構築する

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

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

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

FROM databricksruntime/standard:9.x
...

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

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

datatabricksruntime/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 にあります。

Note

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

Note

ベース イメージ 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 の例を参照することもできます。

Note

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

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

警告

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

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

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

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

注意

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

ステップ 3:クラスターを起動する

UI または API を使用してクラスターを起動できます。

UI を使用してクラスターを起動する

  1. [クラスターの作成] ページで、Databricks Container Services をサポートする Databricks Runtime バージョンを指定します。

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

    Databricks ランタイムの選択

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

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

    Docker イメージ URL の例:

    Registry タグの形式
    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 2.0 を使用して、カスタム 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 スクリプトを指定できます。 詳細については、「InitScriptInfo」を参照してください。

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

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

Databricks Container Services クラスターを起動すると、次の手順が実行されます。

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

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