Mímisbrunnr知恵の泉

← ローカルLLM 一覧

🎓 レベル:標準 | 重要度:B(推奨) 📎 前提:OpenAI互換API | 原理:推論の実務(機械学習)

要点(結論先出し)

概念 ── 「速さ」は2つに分けて測る

ユーザー体感はTTFTに強く引っ張られます。だからストリーミングでまず出し始めるのが効く。

動くコード(ストリーミング・Python)

from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="local")

stream = client.chat.completions.create(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "短い物語を書いて"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content or ""
    print(delta, end="", flush=True)

逐次トークンが届くので、生成完了を待たずに読み始められます。

仕組み ── 並行リクエストはどこで詰まるか

flowchart TD
  R["複数リクエスト同時"] --> E{"エンジンの種類"}
  E -->|"単機向け(llama.cpp・Ollama)"| Q["基本は順番待ち(取り合いで遅延)"]
  E -->|"連続バッチング(vLLM・TGI)"| B["まとめて並行処理(高スループット)"]

単機向けエンジンは1リクエストを速く返す設計。同時に多数を投げると待ち行列ができます。多人数前提なら連続バッチング系を選ぶのが筋(→ vLLMとTGI)。

運用の勘所

なぜそうするか

総処理時間を縮めるのは難しくても、出し始めを早める(ストリーミング)だけで体感は大きく改善します。また、並行性の要求を最初に見積もると、エンジン選定(単機 or バッチング)を間違えません。体感と同時実行は別物として設計するのが正解です。

⚠️ よくある落とし穴

対応lab

関連