ローカル生成AI環境の構築

投稿者: | 2025年4月6日

vLLMで独自実装モデルを高速推論させる

vLLMを使ってコストゼロで実現するローカルLLMホスティング実装ガイド

Ubuntu環境で LangChain + LLaMA 3.2(仮:Metaからの将来モデル)を使用する前提で、ローカル実行・LangChain連携用のセットアップ例

vLLMインストール

docker run -itd --rm --runtime nvidia --gpus all \\
-v ~/.cache/huggingface:/root/.cache/huggingface \\
-p 8000:8000 \\
-e MAX_BATCH_SIZE=16 -e BATCH_TIMEOUT_MS=100 \\
vllm/vllm-openai:latest \\
--model Qwen/Qwen2-1.5B-Instruct \\
--tokenizer-mode auto \\
--gpu-memory-utilization 0.8 \\
--max-model-len 16384


✅ 前提

  • OS:Ubuntu 20.04 以上(GPUドライバ & CUDA対応済)
  • サーバ:GPU H100, メモリ 1TB
  • モデル:LLaMA 3.2(想定:HuggingFaceからDL)
  • 実行エンジン:vLLM
  • LangChainと統合

環境構築

🧱 1. Python・CUDA・ドライバの準備

Python 環境構築(推奨:venv)

sudo apt update
sudo apt install python3-venv python3-pip -y

python3 -m venv llama_env
source llama_env/bin/activate

📦 2. ライブラリのインストール

pip install --upgrade pip
pip install langchain vllm transformers accelerate

オプション(RAG用):

pip install chromadb sentence-transformers

🧠 3. LLaMA 3.2 モデルの取得(仮想の名前として meta-llama/Llama-3.2-70B-Instruct を使用)

※Metaのモデルは Hugging Face 経由で取得するのが一般的です。 ライセンスの同意後、以下のように transformers または vllm から読み込みできます。

# モデル取得(仮名)
huggingface-cli login
git lfs install
git clone https://huggingface.co/meta-llama/Llama-4-65B-Instruct

⚙️ 4. vLLMでモデルを起動(OpenAI API互換サーバ)

python3 -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.2-70B-Instruct \
--tensor-parallel-size 8 \
--dtype bfloat16 \
--gpu-memory-utilization 0.9

--tensor-parallel-size はH100の枚数に応じて調整(1枚なら省略可能)


🔌 5. LangChainから接続する(OpenAI互換API)

pythonコピーする編集するfrom langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(
    model="meta-llama/Llama-3.2-70B-Instruct",
    openai_api_base="http://localhost:8000/v1",
    openai_api_key="not-needed"  # 任意文字列でOK
)

print(llm.invoke("自己紹介してください"))

🔍 6. LangChain + RAGをやるなら(例)

pythonコピーする編集するfrom langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA

# ベクトルDBとエンベディング
embedding = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = Chroma(persist_directory="./db", embedding_function=embedding)

# RAG チェーン構築
qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever()
)

qa.run("社内ドキュメントの保存場所は?")

✅ まとめ:UbuntuでLangChain + LLaMA 3.2 セットアップ構成

コンポーネント選定内容
モデルmeta-llama/Llama-3.2-70B-Instruct(仮)
実行エンジンvLLM(OpenAI API互換)
フレームワークLangChain
ベクトルDB(RAG)Chroma or FAISS
Embeddingモデルsentence-transformers

チャットボット構築

了解です!H100搭載のUbuntu環境 + LangChain + LLaMA 3.2(想定)+ vLLM を使ったチャットボットの構築例を、以下のような構成でステップバイステップで紹介します。


🎯 目的:

ローカルで動作する高性能チャットボットを構築。
LangChain を活用して会話履歴管理・RAG(検索拡張)なども視野に。


🧱 想定スタック:

項目使用ツール
モデルmeta-llama/Llama-3.2-70B-Instruct(仮)
モデル実行vLLM(OpenAI互換)
フレームワークLangChain
フロントエンドGradio(WebチャットUI)
言語Python(venv推奨)

🛠️ 手順


✅ 1. vLLMでモデルを起動

bashコピーする編集するpython3 -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3.2-70B-Instruct \
  --tensor-parallel-size 8 \
  --dtype bfloat16 \
  --gpu-memory-utilization 0.9

✅ 2. 必要パッケージのインストール

bashコピーする編集するpip install langchain gradio openai

✅ 3. LangChain × Gradio チャットボットコード(例)

pythonコピーする編集するfrom langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
from langchain.prompts import PromptTemplate
import gradio as gr

# LLM設定(OpenAI互換)
llm = ChatOpenAI(
    model="meta-llama/Llama-3.2-70B-Instruct",
    openai_api_base="http://localhost:8000/v1",
    openai_api_key="dummy-key",  # 何でもOK
)

# 会話メモリ
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

# プロンプトテンプレート(任意で調整)
prompt = PromptTemplate.from_template("""
あなたは優秀なAIアシスタントです。ユーザーと自然に会話してください。

過去の会話履歴:
{chat_history}

現在のユーザー入力:
{question}

回答:
""")

# チャットチェーン(RAG無し)
from langchain.chains import LLMChain
chat_chain = LLMChain(llm=llm, memory=memory, prompt=prompt)

# Gradio UI
def chat_fn(user_input, history=[]):
    response = chat_chain.run(question=user_input)
    history.append((user_input, response))
    return history, history

with gr.Blocks() as demo:
    gr.Markdown("# 💬 LLaMA3.2 チャットボット(ローカル)")
    chatbot = gr.Chatbot()
    msg = gr.Textbox(placeholder="メッセージを入力...")
    state = gr.State([])

    msg.submit(chat_fn, [msg, state], [chatbot, state])
    
demo.launch()

✅ 4. 起動方法

bashコピーする編集するpython chatbot.py

その後、http://localhost:7860 にアクセスすればチャットボットが使えます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です