コミュニティから共有できる別の素晴らしいAI / MLストーリーを嬉しく思います。 このブログ投稿では、MA Raza博士が、DockerとStreamlitを使用してLangChainを利用したチャットアプリを構築およびデプロイするためのガイドを提供します。
この記事では、デプロイのスピードと一貫性、一度ビルドすればどこでも実行できる機能、開発ワークフロー全体を加速する Docker Desktop で利用できる時間節約ツールなど、Docker が AI/ML プロジェクトにもたらす価値について説明します。
この記事では、LangChain、OpenAI API、およびStreamlitフレームワークを使用してチャットアプリを作成するプロセスについて説明します。 Docker と Docker Compose を使用して、社内サーバーまたはクラウド サーバーにアプリを簡単にデプロイする方法を示します。
デモ アプリ (図 1) を作成して Streamlit Public Cloud と Google App Engine にデプロイし、簡単にプレビューできるようにしました。
包括的な手順と LangChain で実行されるデモ チャット アプリを含む GitHub プロジェクト (図 2) を開発しました。 また、Python 環境マネージャー用の Poetry フレームワーク も構成しました。
チャットアプリのコンポーネントとテクノロジー
テンプレート アプリの作成に使用されるアプリのコンポーネントとフレームワークについて簡単に説明します。
LangChain Python フレームワーク
LangChain フレームワークを使用すると、開発者は強力な大規模言語モデル(LLM)を使用してアプリケーションを作成できます。デモチャットアプリは、OpenAIモデルをデフォルトのオプションとして、Pythonベースのフレームワーク上に構築されています。 ただし、ユーザーは好みのLLMを柔軟に選択できます。
LongChainフレームワークは、入力プロンプトを簡単に管理し、LLMs APIから生成された応答間の接続を確立します。
OpenAI モデル
デモンストレーションの目的で、OpenAI API を使用して、プロンプトの送信時に応答を生成しています。
フロントエンドの合理化されたUI
Streamlit は、データ アプリを構築および共有するための軽量で高速な方法です。 Streamlitフレームワークを備えたシンプルなUIは、チャットアプリと対話するために開発されています。
ドッカーを使用したデプロイ
Docker は、依存関係や環境を気にせずにアプリを開発して任意のサーバーにデプロイするのに役立ちます。 デモ アプリが開発され、ローカルで正常に動作した後、Docker サポートが追加されました。
FROM python:3.10-slim-bullseye
ENV HOST=0.0.0.0
ENV LISTEN_PORT 8080
EXPOSE 8080
RUN apt-get update && apt-get install -y git
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
WORKDIR app/
COPY ./demo_app /app/demo_app
COPY ./.streamlit /app/.streamlit
CMD ["streamlit", "run", "demo_app/main.py", "--server.port", "8080"]
前のコードは、デモ アプリの Docker イメージを生成するために使用される Dockerfile の内容を示しています。 イメージをビルドするには、次を使用します。
docker build -t langchain-chat-app .
軽量で高速なビルドのためのDockerの最適化
エンタープライズアプリケーション用のアプリケーションをデプロイするときは、利用されるリソースと実行/デプロイのライフサイクル計算に注意する必要があります。
また、Dockerビルドプロセスを最適化してイメージサイズの問題を解決し、ソースの変更などのすべての反復で高速にビルドする方法に関する懸念にも対処しました。Docker を最適化するためのさまざまなトリックの詳細については、「Poetry で超高速の Python Docker ビルド」の記事を参照してください。
# The builder image, used to build the virtual environment
FROM python:3.11-buster as builder
RUN apt-get update && apt-get install -y git
RUN pip install poetry==1.4.2
ENV POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_IN_PROJECT=1 \
POETRY_VIRTUALENVS_CREATE=1 \
POETRY_CACHE_DIR=/tmp/poetry_cache
ENV HOST=0.0.0.0
ENV LISTEN_PORT 8080
EXPOSE 8080
WORKDIR /app
#COPY pyproject.toml ./app/pyproject.toml
#COPY poetry.lock ./app/poetry.lock
COPY pyproject.toml poetry.lock ./
RUN poetry install --without dev --no-root && rm -rf $POETRY_CACHE_DIR
# The runtime image, used to just run the code provided its virtual environment
FROM python:3.11-slim-buster as runtime
ENV VIRTUAL_ENV=/app/.venv \
PATH="/app/.venv/bin:$PATH"
COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}
COPY ./demo_app ./demo_app
COPY ./.streamlit ./.streamlit
CMD ["streamlit", "run", "demo_app/main.py", "--server.port", "8080"]
この Dockerfile には、2 つのランタイム イメージ タグがあります。 最初のものでは、仮想環境を形成するための詩の環境を作成します。 アプリは 2 番目のランタイム イメージで実行されますが、アプリケーションは最初の手順で作成した仮想環境をアクティブ化した後に実行されます。
次に、を使用して DOCKER_BUILDKIT
Docker イメージを構築し、Docker イメージをすばやく安全に作成するための最新のツールを提供します。
DOCKER_BUILDKIT=1 docker build --target=runtime . -t langchain-chat-app:latest
Docker-compose.yaml ファイル
アプリを実行するために、次の内容も含まれています docker-compose.yml
。
version: '3'
services:
langchain-chat-app:
image: langchain-chat-app:latest
build: ./app
command: streamlit run demo_app/main.py --server.port 8080
volumes:
- ./demo_app/:/app/demo_app
ports:
- 8080:8080
ローカル サーバーでアプリを実行するには、次のコマンドを使用します。
docker-compose up
インフラストラクチャ
Docker のサポートにより、基本的なガイドに従ってアプリを任意のクラウド インフラストラクチャにデプロイできます。 次のインフラストラクチャにアプリをデプロイしました。
合理化されたパブリッククラウド
パブリッククラウドへのStreamlitアプリのデプロイは、GitHubアカウントとリポジトリを使用すると非常に簡単です。 デプロイされたアプリには、 LangChainデモからアクセスできます。
グーグルアプリエンジン
Docker を使用して Google App Engine にアプリをデプロイしてみました。 リポジトリには、 app.yaml
次の内容をデプロイするための構成ファイルが含まれています。
# With Dockerfile
runtime: custom
env: flex
# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
Google App Engine にチャット アプリをデプロイするには、gcloud Python SDK をインストールした後に次のコマンドを使用しました。
gcloud app create --project=[YOUR_PROJECT_ID]
gcloud config set project [YOUR_PROJECT_ID]
gcloud app deploy app.yaml
Google App Engine にデプロイされたサンプル アプリ (図 3) には、次の方法でアクセスできます。
Google Cloud Run を使用したアプリのデプロイ
また、GCP の Cloud Run Service を使用して Google Cloud にアプリをデプロイすることもできます。 Cloud Run を使用したアプリのデプロイは、Google App Engine よりも高速です。
この方法を採用することに関連する機能は次のとおりです。
- アプリケーションをコンテナーにパッケージ化します。
- コンテナーを成果物レジストリにプッシュします。
- プッシュされたコンテナーからサービスをデプロイします。
Google Cloud Run を使用してアプリをデプロイするための手順を見ていきましょう。 プロジェクトがすでに Google Cloud で作成されていることを前提としています。
1. サービスを有効にします。
以下を使用して gcloud sdk
サービスを有効にできます。
gcloud services enable cloudbuild.googleapis.com
gcloud services enable run.googleapis.com
2. ロールを作成してサービス アカウントに追加します。
次のコマンド セットを使用して、サービス アカウントを作成し、適切なアクセス許可を設定します。 サービス SERVICE_ACCOUNT and PROJECT_ID
を変更します。
gcloud iam service-accounts create langchain-app-cr \
--display-name="langchain-app-cr"
gcloud projects add-iam-policy-binding langchain-chat \
--member="serviceAccount:[email protected]" \
--role="roles/run.invoker"
gcloud projects add-iam-policy-binding langchain-chat \
--member="serviceAccount:[email protected]" \
--role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding langchain-chat \
--member="serviceAccount:[email protected]" \
--role="roles/run.admin"
3. Docker イメージを生成してプッシュします。
次のコマンドを使用して、イメージを生成し、アーティファクト レジストリにプッシュできます。 ただし、これが初めての場合は、Dockerプレースホルダーのアクセス許可を持つリポジトリを作成する必要があります。
DOCKER_BUILDKIT=1 docker build --target=runtime . -t australia-southeast1-docker.pkg.dev/langchain-chat/app/langchain-chat-app:latest
docker push australia-southeast1-docker.pkg.dev/langchain-chat/app/langchain-chat-app:latest
アーティファクトリポジトリを生成し、権限を割り当てるために必要なコマンドは次のとおりです。
gcloud auth configure-docker australia-southeast1-docker.pkg.dev
gcloud artifacts repositories create app \
--repository-format=docker \
--location=australia-southeast1 \
--description="A Langachain Streamlit App" \
--async
これでアプリがデプロイされます。
結論
この記事では、LangChain、OpenAI API、および Streamlit を利用したチャット アプリの開発とデプロイに必要なさまざまなツールとテクノロジについて詳しく説明します。 このプロセスでは、Dockerフレームワークも利用されます。
アプリケーションのデモは、Streamlit Public Cloud と Google App Engine の両方で利用できます。 Dockerのサポートのおかげで、開発者は好みのクラウドプラットフォームにデプロイできます。
このプロジェクトは、LLMの機能を利用するアプリを迅速に開発するための基本的なテンプレートとして機能します。 Razaのプロジェクトの詳細は、彼の GitHubページにあります。
AI / MLワークフローにおけるDockerに関する興味深いユースケースやストーリーはありますか? 私たちはあなた から聞いて 、多分あなたの話を共有したいです。
この投稿は 初版発行 レベルアップコーディングで、許可を得て転載されています。
さらに詳しく
- Docker デスクトップの最新リリースを入手します。
- 次のものに投票してください! 公開ロードマップをご覧ください。
- 質問がありますか? Docker コミュニティがお手伝いします。
- ドッカーは初めてですか? 始めましょう。