Databricks Container Service(DCS)のマニュアルを読んだことはあったのですが、触ったことがなかったのでウォークスルーします。
Databricksランタイムの課題
Databricksの計算資源であるクラスターを起動する際には、ランタイムを用いて必要なソフトウェアが自動でインストールされます。
Databricks ランタイムは、データブリックスが管理するマシンのクラスタ上で実行されるソフトウェアアーティファクトのセットです。Spark はもちろん、ビッグデータ分析の操作性やパフォーマンス、セキュリティなどを大幅に向上させるコンポーネントや更新プログラムも数多く追加されています。
大抵のニーズはこれで充足できるのですが、以下のようなケースでは代替案が欲しくなります。
- 自分のクラスターでどのようにdatadogをセットアップしたらいいのか?
- ネイティブにコンパイルしたコードを必要とする複雑なMLライブラリをどのようにインストールしたらいいのか?
- PyPiは当てにならない。10回に1回はジョブが失敗する。どのように信頼性を高めることができるのか?
- ネイティブコードのコンパイルに時間がかかりすぎる。
- ライブラリが必要だが、ランタイムに組み込まれているライブラリと競合する依存関係がある。
ライブラリやinitスクリプトの機能である程度カバーはできるのですが完全ではありません。
Databricks Container Service(DCS)
そこで、Databricks Container Service(DCS)の出番です。
Databricks Container Services を使用するとコンピューティングの作成時に Docker イメージを指定できます。 ユース ケースの例を次に示します。
- ライブラリのカスタマイズ: インストールするシステム ライブラリを完全に制御できます。
- ゴールデン コンテナー環境: Docker イメージは、絶対に変更されないロックダウンされた環境です。
- Docker CI/CD 統合: Azure Databricks を Docker CI/CD と統合できます。
DCSの有効化
最初に、イメージをカスタマイズせずにインストールしてみますが、その前にDCSを有効化する必要があります。有効化にはWorkspace Conf REST APIを使います。
まずは、対象のワークスペースでDCSが有効化されているかどうかを確認します。ここでは、背後ではREST APIを呼び出しているDatabricks CLIを使います。なお、以下のmy_azure
はプロファイル名です。
databricks workspace-conf get-status enableDcs -p my_azure
この時点では有効化されていません。
{
"enableDcs":""
}
有効化します。
databricks workspace-conf set-status enableDcs --json '{"enableDcs": "true"}' -p my_azure
確認します。
databricks workspace-conf get-status enableDcs -p my_azure
有効化されました。
{
"enableDcs":"true"
}
これで、クラスター作成時にDockerイメージを選択できるようになります。
ベースイメージのインストール
Dockerhubでベースイメージが公開されています。
databricksruntime/standard:10.4-LTS
をインストールしてみます。
DockerイメージURLにはdatabricksruntime/standard:10.4-LTS
を指定します。コロン以降がタグとなり、これが対応するDatabricksランタイムのバージョンを指定しています。
カスタムイメージのインストール
次にカスタムイメージを作成します。なお、こちらの記事で非常に詳細な手順がカバーされています。
ここからは、Dockerがインストールされているマシンでの作業となります。Azure Container Regstryを使う場合にはAzure CLIもインストールします。以下では、Azure Container Regstryを前提に作業します。事前にコンテナレジストリを作成しておきます。
az login
az acr login --name <レジストリ名>
ベースイメージをインポートします。
az acr import --name <レジストリ名> --source docker.io/databricksruntime/standard:10.4-LTS --image standard:10.4-LTS
カスタムイメージのdockerfileを作成します。ここではdbdemos
ライブラリを追加しています。
FROM <レジストリ名>.azurecr.io/standard:10.4-LTS
RUN /databricks/python3/bin/pip install dbdemos==0.4.6
なお、デフォルトではインストールされていないので、importするとエラーになります。
dockerfileのあるパスで以下を実行します。
docker build -t <レジストリ名>.azurecr.io/standard_custome_image:10.4 .
コンテナレジストリにプッシュします。
docker push <レジストリ名>.azurecr.io/standard_custome_image:10.4
Databricksからイメージを取り出せるように、トークンとパスワードを作成します。
Databricksのクラスター設定で、DockerイメージURLに上記レジストリのURLを指定し、上で作成したユーザー(トークン名)とパスワードを指定します。
pip install
しなくてもdbdemosが動きました!
参考資料
- Databricks Container ServiceでTensorRT-LLMを動かしてみた - NTT Communications Engineers' Blog
- 【Azure Databricks】「Databricks Container Servicesの設定」をしてみる | Azure導入支援デスク