10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

  • 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 BedrockOpenAI API)を利用したアプリ開発

検証内容

下記の内容を本記事で検証する

  1. ローカルで起動して、その際の手順などをまとめる
  2. 構築されているアプリケーションの動作を見てみる

検証環境

下記のスペックの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を利用して計算する設定としています。

  1. GenAI stackのリポジトリをクローンする

    git clone https://github.com/docker/genai-stack
    cd genai-stack
    
  2. .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
    
  3. 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を利用
画面

FireShot Capture 002 - bot · Streamlit - localhost.png

所感
  • そのままPoCアプリとしても使えそうな機能と画面
  • GPU演算を行うと、そこまで高スペックなGPUではないが推論速度は高速に感じる
  • RAGが有効の場合、NEO4Jの探索に時間がかかるのか、無効に比べて大きく性能が劣化する
    • 推論中にCPU/GPUには余裕があるが、SSDの稼働率が100%張り付いていて、それがボトルネックになっているかも。

Stack Overflow Loader

機能概要
画面

FireShot Capture 005 - loader · Streamlit - localhost.png

所感
  • 読み込み後にSupport BotのRAGありで推論したところ、Stack Overflowから検索した結果を返していること確認した
    • レスポンスが遅く、Stack Overflowから答えるような結果を見て中断
  • 読み込みはかなり早く、すぐに完了する
  • Neo4Jの知識不足でクライアントツールなどの使い方が不明
    • 後日、Neo4Jの知見を深めて改めて確認する

PDF Reader

機能概要
画面

FireShot Capture 008 - pdf_bot · Streamlit - localhost.png

所感
  • そのままPoCアプリとしても使えそうな機能と画面
  • PDFファイルの登録は早く完了する
  • 質問を投げてから帰ってくるまでのかなりの時間を要する

Standalone Bot API & Standalone Bot UI

機能概要
  • http://localhost:8505にブラウザからアクセス
  • 機能面はSupport Botと同様
  • フロントエンドがVite, Svelte, Tailwind、バックエンドがPythonの構成となっている
画面

FireShot Capture 009 - Support bot application - localhost.png

所感
  • そのままPoCアプリとしても使えそうな機能と画面
  • そのままクラウドで動かすよう(AWS Amplify, ApiGateway+Lamndaなど )に展開しやすそう

総括

  • ローカル実行が可能ではあるが、スペックを大きく積んだPCでないと「RAG」の利用した開発は難しい
  • 生成AIアプリのアーキテクチャの勉強するのにはすごくよいと感じた
  • そのまま、PoCアプリとして使ってみてもいいレベルかと思う
  • 前提として生成AIにかかわる技術の知見がないと扱うのは難しい(Neo4J、RAGなど)

今後の展望

  • それぞれのアプリケーションの実装を勉強して、生成AIのアプリケーションのアーキテクチャーの理解を深める
  • AWSなどのクラウドで動かすアーキテクチャを考えたい
  • Neo4Jのグラフデータベースの知見を深めたい
  • GenAI Stackの開発環境を用いて、オリジナルの生成AIサービスを開発したい

参考サイト

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?