はじめに
- DockerCon 2023で生成AIアプリの開発環境構築を容易にするGenAI Stackが発表された
- GenAI Stackについて、動作確認した結果をまとめる
GenAI stackとは
概要
GenAI Stackでは、生成AIによるアプリ開発に必要な開発環境がDockerコンテナで提供されており、開発者は生成AIによるアプリ開発環境をすぐに構築できる。
できること
GenAI Stackでは主に下記のようなことが可能
-
ollamaを介して、llama2などのLLMモデルをローカル環境で利用
- Windowsの場合、ollamaは非対応
- Neo4jナレッジグラフを使用したRAG
- Amazon, OpenAIが提供する生成AIのAPI(Amazon BedrockやOpenAI API)を利用したアプリ開発
検証内容
下記の内容を本記事で検証する
- ローカルで起動して、その際の手順などをまとめる
- 構築されているアプリケーションの動作を見てみる
検証環境
下記のスペックのPCで検証しています。
- OS:Ubuntu 22.04 LTS on windows(WSL2)
- CPU:intel core i7 9700
- RAM:16GB
- GPU:NVIDIA GeForce RTX 2060 Super
GenAI Stackを起動
readmeを参考に構築を進める
OSや利用するモデル次第で設定が少々異なります。
本記事では「Ubuntu22.04」で「Ollama」から取得したモデルを利用するかつ、GPUを利用して計算する設定としています。
-
GenAI stackのリポジトリをクローンする
git clone https://github.com/docker/genai-stack cd genai-stack
-
.envファイルをenv.exampleファイルを参考にして作成する。
.env#***************************************************************** # LLM and Embedding Model #***************************************************************** LLM=llama2 #or any Ollama model tag, gpt-4, gpt-3.5, or claudev2 EMBEDDING_MODEL=sentence_transformer #or openai, ollama, or aws #***************************************************************** # Neo4j #***************************************************************** - #NEO4J_URI=neo4j://database:7687 - #NEO4J_USERNAME=neo4j - #NEO4J_PASSWORD=password + NEO4J_URI=neo4j://database:7687 + NEO4J_USERNAME=neo4j + NEO4J_PASSWORD=password #***************************************************************** # Langchain #***************************************************************** # Optional for enabling Langchain Smith API #LANGCHAIN_TRACING_V2=true # false #LANGCHAIN_ENDPOINT="https://api.smith.langchain.com" #LANGCHAIN_PROJECT=#your-project-name #LANGCHAIN_API_KEY=#your-api-key ls_... #***************************************************************** # Ollama #***************************************************************** - #OLLAMA_BASE_URL=http://host.docker.internal:11434 + OLLAMA_BASE_URL=http://llm-gpu:11434 # Linux かつGPUを利用する場合の設定 #***************************************************************** # OpenAI #***************************************************************** # Only required when using OpenAI LLM or embedding model #OPENAI_API_KEY=sk-... #***************************************************************** # AWS #***************************************************************** # Only required when using AWS Bedrock LLM or embedding model #AWS_ACCESS_KEY_ID= #AWS_SECRET_ACCESS_KEY= #AWS_DEFAULT_REGION=us-east-1
-
GenAI Stackを起動する
docker compose --profile linux-gpu up # Macの場合、docker compose up
GenAI Stackの確認
確認する機能について
GenAI Stackではすでに利用できる下記のアプリケーションが提供されていることがReadmiの内容より確認できる。
名前 | メインファイル | コンポーズ名 | URL | 説明 |
---|---|---|---|---|
Support Bot | bot.py |
bot |
http://localhost:8501 | Pythonフルスタックのチャットボットアプリ |
Stack Overflow Loader | loader.py |
loader |
http://localhost:8502 | Stack Overflowのデータをデータベースに読み込み(ベクトル埋め込みなどを作成)アプリ |
PDF Reader | pdf_bot.py |
pdf_bot |
http://localhost:8503 | PDFのQAアプリ |
Standalone Bot API | api.py |
api |
http://localhost:8504 | APIサーバ(Pythonバックエンド)。 |
Standalone Bot UI | front-end/ |
front-end |
http://localhost:8505 | フロントエンド(Vite, Svelte, Tailwind) |
確認結果
Support Bot
機能概要
- http://localhost:8501にブラウザからアクセス
- Streamlitを活用したシンプルなPythonフルスタックのアプリ
- RAGが無効の場合、純粋なLLMの回答を得ることができます。
- RAGが有効の場合、ナレッジグラフ(Neo4j) を活用したRAGを利用
画面
所感
- そのままPoCアプリとしても使えそうな機能と画面
- GPU演算を行うと、そこまで高スペックなGPUではないが推論速度は高速に感じる
- RAGが有効の場合、NEO4Jの探索に時間がかかるのか、無効に比べて大きく性能が劣化する
- 推論中にCPU/GPUには余裕があるが、SSDの稼働率が100%張り付いていて、それがボトルネックになっているかも。
Stack Overflow Loader
機能概要
- http://localhost:8502にブラウザからアクセス
- 特定のタグに関する最新のStack Overflowデータを知識グラフにインポートする
- Streamlitを活用したシンプルなPythonフルスタックのアプリ
画面
所感
- 読み込み後にSupport BotのRAGありで推論したところ、Stack Overflowから検索した結果を返していること確認した
- レスポンスが遅く、Stack Overflowから答えるような結果を見て中断
- 読み込みはかなり早く、すぐに完了する
- Neo4Jの知識不足でクライアントツールなどの使い方が不明
- 後日、Neo4Jの知見を深めて改めて確認する
PDF Reader
機能概要
- http://localhost:8503にブラウザからアクセス
- ImportしたPDFファイルの内容について、QA形式で質問できる
- ImportしたPDFファイルはNeo4Jに登録される
画面
所感
- そのままPoCアプリとしても使えそうな機能と画面
- PDFファイルの登録は早く完了する
- 質問を投げてから帰ってくるまでのかなりの時間を要する
Standalone Bot API & Standalone Bot UI
機能概要
- http://localhost:8505にブラウザからアクセス
- 機能面はSupport Botと同様
- フロントエンドがVite, Svelte, Tailwind、バックエンドがPythonの構成となっている
画面
所感
- そのままPoCアプリとしても使えそうな機能と画面
- そのままクラウドで動かすよう(AWS Amplify, ApiGateway+Lamndaなど )に展開しやすそう
総括
- ローカル実行が可能ではあるが、スペックを大きく積んだPCでないと「RAG」の利用した開発は難しい
- 生成AIアプリのアーキテクチャの勉強するのにはすごくよいと感じた
- そのまま、PoCアプリとして使ってみてもいいレベルかと思う
- 前提として生成AIにかかわる技術の知見がないと扱うのは難しい(Neo4J、RAGなど)
今後の展望
- それぞれのアプリケーションの実装を勉強して、生成AIのアプリケーションのアーキテクチャーの理解を深める
- AWSなどのクラウドで動かすアーキテクチャを考えたい
- Neo4Jのグラフデータベースの知見を深めたい
- GenAI Stackの開発環境を用いて、オリジナルの生成AIサービスを開発したい