Databricksの環境構築を劇的に改善!Databricks Container Service × Poetry 活用法
はじめに
Databricksは、Apache Sparkを活用したデータエンジニアリングや機械学習のワークフローを効率的に構築できるクラウドベースのプラットフォームです。DatabricksのContainer Serviceを利用すると、カスタムコンテナイメージをクラスターにデプロイし、特定の環境やライブラリのセットアップを統一できます。
本記事では、Docker HubにホストしたカスタムDockerイメージをDatabricksのContainer Serviceを使用してクラスターにデプロイする方法を詳しく解説します。また、Poetryを活用してPythonの依存関係を管理し、環境の再現性を高める方法についても説明します。
データサイエンティストがモデルを作成し、エンジニアがシステムを開発する場合、それぞれの環境の統一が課題になります。DatabricksのContainer ServiceとPoetryを活用することで、チーム間でのバージョンの共有が容易になり、一貫性のある開発環境を維持できます。
環境構築の概要
本記事で行う環境構築の流れは以下の通りです。
- Dockerイメージの作成
- databricksruntime/standard:15.4-LTS をベースにしたDockerfileを作成
- Poetryをインストールし、依存関係を管理
- 必要なPythonライブラリをインストール
- Docker Hubへのプッシュ
- 作成したDockerイメージをDocker Hubにプッシュ
- Databricks Container Serviceの設定
- Databricksでカスタムコンテナを指定したクラスターを作成
- Docker Hubの認証情報をDatabricksに設定
- クラスターの起動と確認
- Databricks NotebookでPythonコードを実行し、環境が正しくセットアップされているか確認
Poetryを採用する理由
Pythonの依存関係管理にはpipやcondaといった方法もありますが、本記事ではPoetryを使用します。その理由は以下の通りです。
- 環境の再現性の向上: poetry.lock により、同じ依存関係のバージョンを保証し、異なる環境間での一貫性を確保できます。
- 依存関係の明確化と解決: pyproject.toml を用いることで、プロジェクトのメタデータと依存関係を統一的に管理でき、手動での管理ミスを防げます。
- パッケージ管理の一元化: Poetry は、仮想環境の作成やパッケージのインストール・更新・削除を一つのツールで完結させるため、開発の効率化につながります。
- Databricks環境との相性: Databricksの既存のPython環境を活用しつつ、依存関係の管理を容易にするために、仮想環境の作成を無効化(
poetry config virtualenvs.create false
)することで、クラスターのセットアップがシンプルになります。
これにより、データサイエンティストとエンジニアの間で同じ環境を簡単に共有できるようになります。
Dockerイメージの作成
カスタムDockerイメージを作成するためのDockerfileを作成します。このイメージには、
- Databricks Runtime
- Poetry
- 必要なPythonライブラリ
を含めます。
FROM databricksruntime/standard:15.4-LTS
# Poetry のインストールとパス設定
RUN /databricks/python3/bin/pip install poetry==1.6.1 && \
ln -s /databricks/python3/bin/poetry /usr/local/bin/poetry
# 作業ディレクトリの設定
WORKDIR /databricks/app
# Poetry プロジェクトファイルのコピー
COPY pyproject.toml poetry.lock ./
# Databricks の Python 環境をそのまま利用するため、仮想環境作成を無効化
RUN poetry config virtualenvs.create false
# 依存関係のインストール
RUN poetry install --no-dev
DatabricksのデフォルトPython環境を活用するために、poetry config virtualenvs.create false
を設定し、新たな仮想環境を作成しないようにしています。これにより、DatabricksのネイティブなPython環境を維持したまま、依存関係をインストールできます。DatabricksのデフォルトPython環境には新機能の対応やバグ修正などのアップデートが含まれているため、そのまま利用することが推奨されます。
今回は、pyproject.tomlの内容を以下とします。
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.9, <3.13"
polars = "^1.11.0"
tensorflow = "2.12.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Docker Hub へのプッシュ
カスタムDockerイメージを作成したら、Docker Hubにプッシュします。
- Dockerイメージのビルド
docker build -t your-dockerhub-username/databricks-container:latest .
- Docker Hubにログイン
docker login
- Dockerイメージのプッシュ
docker push your-dockerhub-username/databricks-container:latest
Docker Hubにプッシュしたイメージは、DatabricksのContainer Serviceで利用できます。
Databricks Container Service の設定
-
Databricks の UI でカスタムコンテナを設定
a. DatabricksのComputeページに移動
b. 「Create Cluster」をクリック
c. 「Advanced Options」を展開
d.「Docker」の設定で、作成したDocker Hubのイメージを指定
- your-dockerhub-username/databricks-container:latest
e. (必要に応じて、Docker Hubの認証情報(ユーザー名・パスワード)を設定) -
クラスターの作成と起動
設定が完了したら、クラスターを作成し、起動します。 -
Databricks Notebook での動作確認
クラスターが起動したら、Databricks Notebookを開き、環境が正しくセットアップされているか確認します。
!pip list
Datarbricks Container Serviceの設定しなかった場合
polars、tensorflowは最初からインストールされていません。
Databricks Container Serviceの設定をした場合
polars、tensorflowがインストールされている状態で作業を進めることができます。
まとめ
本記事では、Docker HubにホストしたカスタムDockerイメージをDatabricksのContainer Serviceで利用する方法を解説しました。
- Poetryを活用してPythonの依存関係を管理し、環境の再現性を確保
- Dockerfileを作成し、カスタム環境を構築
- 作成したDockerイメージをDocker Hubにプッシュ
- Databricks Container Serviceを活用し、環境を統一
- Databricks Notebookで環境のセットアップを確認
モデルを作るデータサイエンティストとシステムを作るエンジニアが分業をしている場合、統一された環境の共有が容易になるため、開発のスムーズな連携が可能になります。
Discussion