生成 AI アプリケーションのコンテナー化

前提条件

メモ

GenAI applications can often benefit from GPU acceleration. Currently Docker Desktop supports GPU acceleration only on Windows with the WSL2 backend. Linux users can also access GPU acceleration using a native installation of the Docker Engine.

  • Docker Desktop の最新版をインストールしていること。 そして Linux ユーザーの場合、GPU アクセラレーションを利用する予定であること。 Docker は常に新たな機能を追加してきているため、本ガイドは最新の Docker Desktop でしか動作しない場合があります。
  • git クライアント が利用可能であること。 本節の利用例ではコマンドラインベースの git クライアントを用いていきますが、別のクライアントを用いてもかまいません。

概要

本節では Docker Desktop を使って、生成 AI (generative AI; GenAI) アプリケーションをコンテナー化して実行する手順を示していきます。

メモ

コンテナー化した GenAI アプリケーションのより詳細なサンプルについては、 GenAI スタック のデモアプリケーションにおいて見ることができます。

サンプルアプリケーションの入手

本ガイドで利用するサンプルアプリケーションは、 GenAI スタック のデモアプリケーションにある PDF リーダーアプリケーションを修正したものです。 このアプリケーションは Python によるフルスタックのアプリケーションであり、PDF ファイルに対する問い合わせを行うことができます。

このアプリケーションでは、オーケストレーションに LangChain、UI に Streamlit を用いています。 また LLM 実行のために Ollama、ベクター保存に Neo4j を用いています。

サンプルアプリケーションをクローンします。 端末画面を開いて、作業を行うディレクトリに移動します。 そして以下のコマンドを実行してリポジトリをクローンします。

$ git clone https://github.com/craig-osterhout/docker-genai-sample

上の結果として docker-genai-sample ディレクトリには以下のようなファイルがあるはずです。

├── docker-genai-sample/
│ ├── .gitignore
│ ├── app.py
│ ├── chains.py
│ ├── env.example
│ ├── requirements.txt
│ ├── util.py
│ ├── LICENSE
│ └── README.md

Docker アセットの初期化

アプリケーションの入手はできました。 次に docker init を実行して、アプリケーションのコンテナー化に必要となる Docker アセットを生成します。 端末画面内の docker-genai-sample ディレクトリにおいて docker init コマンドを実行します。 docker init はデフォルトの設定をいくつか行いますが、アプリケーション内容についていくつか質問が行われるので、それに答えます。 たとえばこのアプリケーションを実行するにあたっては Streamlit を利用しています。 以下の docker init の例を参考にして、同様の入力を行ってください。

$ docker init
Welcome to the Docker Init CLI!

This utility will walk you through creating the following files with sensible defaults for your project:
  - .dockerignore
  - Dockerfile
  - compose.yaml
  - README.Docker.md

Let's get started!

? What application platform does your project use? Python
? What version of Python do you want to use? 3.11.4
? What port do you want your app to listen on? 8000
? What is the command to run your app? streamlit run app.py --server.address=0.0.0.0 --server.port=8000

上により docker-genai-sample ディレクトリ内は以下の構成となるはずです。

├── docker-genai-sample/
│ ├── .dockerignore
│ ├── .gitignore
│ ├── app.py
│ ├── chains.py
│ ├── compose.yaml
│ ├── env.example
│ ├── requirements.txt
│ ├── util.py
│ ├── Dockerfile
│ ├── LICENSE
│ ├── README.Docker.md
│ └── README.md

docker init が追加したファイルについての詳細は、以下を参照してください。

アプリケーションの実行

端末画面内の docker-genai-sample ディレクトリから以下のコマンドを実行します。

$ docker compose up --build

Docker がアプリケーションをビルドして実行します。 ネットワークの状況に依存しますが、依存パッケージのダウンロードには数分程度かかります。 アプリケーションが起動する際には、端末画面に以下のようなメッセージが表示されます。

server-1  |   You can now view your Streamlit app in your browser.
server-1  |
server-1  |   URL: http://0.0.0.0:8000
server-1  |

ブラウザーを開いて http://localhost:3000 にアクセスし、アプリケーションを確認します。 シンプルな Streamlit アプリケーションが表示されたはずです。 このアプリケーションでは埋め込みモデルのダウンロードに数分かかります。 ダウンロードが行われている間は、右上隅に Running (実行中) と表示されます。

このアプリケーションは Neo4j データベースサービスと LLM サービス機能を必要とします。 Docker の外部からサービスへのアクセスを行う場合は、接続情報を指定して試してみてください。 サービスを実行しない場合は、引き続き本ガイドに従って、Docker を使ってそれらのサービスをいくつか、あるいはすべて実行する方法について学びます。

端末画面から ctrl+c を押下してアプリケーションを停止します。

まとめ

本節においては Docker を使って、既存の GenAI アプリケーションをコンテナー化して実行する方法について学びました。

関連情報

次のステップ

次の節では、Docker を使って、アプリケーション、データベース、LLM サービスをすべてローカル内で実行する方法について学びます。