blog

llama-serverの使い方|ローカルLLMをOpenAI互換APIとして動かす実践ガイド

llama-serverの使い方|ローカルLLMをOpenAI互換APIとして動かす実践ガイド

llama-serverとは何か:llama.cppが提供するローカル推論サーバーの構造

llama-serverは、llama.cppプロジェクトが提供するHTTPベースのLLM推論サーバーである。かつてはserverという名称だったが、llama.cppのリファクタリングを経て現在はllama-serverという独立したバイナリとして配布されている。

最大の特徴はOpenAI互換のREST APIエンドポイントを標準で備える点だ。既存のOpenAI SDKやLangChainなどのツールチェーンは、接続先のベースURLを差し替えるだけでそのまま動作する。モデルはGGUF形式の量子化ファイルをローカルに置いて読み込む設計であり、外部サービスへの依存が一切ない。MetaのLlamaモデル群はオープンウェイトでllama.comやHugging Faceから無償取得できるため、推論コストを自社インフラのコストのみに抑えられる点が運用上のメリットになる。

アーキテクチャを俯瞰すると、以下の処理パイプラインで動作する。

llama-serverのリクエスト処理パイプライン概略図クライアントcurl / SDK / UIllama-serverHTTP / OpenAI互換APIllama.cppランタイムトークナイズ → KVキャッシュ→ GGUF推論(GPU/CPU)ストリームレスポンスSSE / JSON
llama-serverのリクエスト処理パイプライン:クライアントはOpenAI互換エンドポイントにHTTPリクエストを送るだけでよく、内部推論はllama.cppのC++ランタイムが担う。

並列リクエストの管理には「スロット(slot)」という概念が用いられる。--parallelオプションで指定したスロット数が同時処理の上限となり、超過したリクエストはキューに積まれる。スロット数はKVキャッシュのVRAM消費に直結するため、リソース計画の中心に置くべき設計上のトレードオフだ。

ディープラーニングや機械学習の基礎については ディープラーニング解説 および 機械学習入門 もあわせて参照されたい。

llama-serverのビルドと環境別セットアップ

llama-serverはllama.cppのビルドによって生成される。Qiitaの構築事例(llama-serverでローカルLLMサーバーを構築する、2025年)やCLIとサーバーによるllama.cppクイックスタートでも示されているように、環境ごとのビルドフラグを把握することが安定稼働の前提となる。

macOS(Apple Silicon)

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DLLAMA_METAL=ON
cmake --build build --config Release -j$(sysctl -n hw.logicalcpu)
# 生成バイナリ: build/bin/llama-server

Apple SiliconではMetalバックエンドが有効になり、統合GPUへのオフロードが機能する。CPU処理のみと比較してトークン生成速度が大幅に改善する傾向がある。

Linux(CUDA環境)

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j$(nproc)

CUDAビルドにはCUDA Toolkit 11.8以上が必要だ。複数GPU環境では--tensor-splitオプションでレイヤーを分割配置できる。

Docker(ビルド環境を汚さない場合)

# CPU版
docker run --rm -p 8080:8080 \
  -v /path/to/models:/models \
  ghcr.io/ggerganov/llama.cpp:server \
  -m /models/your-model.gguf --host 0.0.0.0 --port 8080

# CUDA版(GPU搭載ホスト向け)
docker run --rm --gpus all -p 8080:8080 \
  -v /path/to/models:/models \
  ghcr.io/ggerganov/llama.cpp:server-cuda \
  -m /models/your-model.gguf --host 0.0.0.0 --port 8080 -ngl 99

公式Dockerイメージ(GitHub Container Registry: ghcr.io)を使うとビルド環境の整備を省略できる。CI/CDパイプラインへの組み込みにも適している。

なお、Rost Glukhov氏のクイックスタートガイドでは、最新のllama.cppビルドでHugging Faceから直接ダウンロードしてローカルキャッシュに保持するワークフローも紹介されており、実験フェーズでのモデル取得の手間を減らせる。

llama-serverの主要オプションとOpenAI互換エンドポイント

起動コマンドの最小構成から示す。以下はローカル実行で広く使われているLlama 3.3-8B InstructのGGUF量子化版を例として使用している。

./llama-server \
  -m ./models/Llama-3.3-8B-Instruct-Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8080 \
  -ngl 33 \
  -c 4096
llama-server 主要起動オプション一覧
オプション 意味 推奨値・留意点
-m / --model GGUFモデルファイルのパス 必須。絶対パス推奨
-ngl / --n-gpu-layers GPUオフロードするレイヤー数 VRAMに収まる最大値。全層なら999でも可
-c / --ctx-size コンテキストウィンドウ長(トークン数) 大きいほどVRAM消費増。2048〜8192が現実的
--parallel / -np 同時処理スロット数 デフォルト1。スロット数×コンテキスト長分のKVキャッシュを消費する
--host バインドIPアドレス 外部公開は0.0.0.0、ローカルのみは127.0.0.1
--port リッスンポート デフォルト8080
--api-key Bearer認証用APIキー 外部公開時は必ず設定。未設定だと誰でもアクセス可能になる
-t / --threads CPUスレッド数 物理コア数を上限の目安にする
--flash-attn / -fa Flash Attention有効化 長コンテキスト時のVRAM削減と速度改善に有効
--chat-template チャットテンプレートの明示指定 GGUFメタデータから自動検出されることが多いが、不整合時は明示する
--ubatch-size マイクロバッチサイズ スループット重視なら512〜1024を試す
--no-webui 組み込みWebUIの無効化 本番APIサーバーではUIを閉じることを検討
--metrics Prometheusメトリクス有効化 /metricsエンドポイントを公開する

OpenAI互換エンドポイント一覧

llama-serverが提供する主要エンドポイントは以下の通りだ。OpenAI SDKのベースURLをhttp://localhost:8080/v1に差し替えるだけで、ほとんどのクライアントコードがそのまま動作する。

llama-server OpenAI互換エンドポイント一覧
エンドポイント メソッド 機能
/v1/chat/completions POST チャット形式の推論。SSEストリーミング対応
/v1/completions POST テキスト補完(レガシー形式)
/v1/embeddings POST テキスト埋め込みベクトルの生成
/v1/models GET ロード中のモデル情報一覧
/health GET サーバー稼働状態・スロット状況確認
/metrics GET Prometheusフォーマットのメトリクス(--metricsフラグ必要)
/slots GET スロット状態の詳細(KVキャッシュ使用率など)

Python SDKからの接続例

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="your-api-key-if-set"  # --api-key設定時のみ必要
)

response = client.chat.completions.create(
    model="local-model",  # サーバー側ではモデル名を検証しないため任意の文字列でよい
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "量子コンピュータを一言で説明して"}
    ],
    stream=True
)

for chunk in response:
    print(chunk.choices[0].delta.content or "", end="", flush=True)
llama-serverによるローカルLLM推論の処理フロー:HTTPリクエストがllama.cppランタイムに渡されトークンストリームとして返るイメージ図
llama-serverによるローカルLLM推論の処理フロー:トークンストリームがSSEでクライアントに返る

GGUFモデルの選択と量子化レベルの判断基準

llama-serverで扱うモデルはGGUF形式が前提だ。Hugging Face上のBartowski氏リポジトリなど信頼できるソースから量子化済みファイルを取得するのが一般的な手順となる。モデルの世代選択については、2026年6月時点でのMetaの現行最新世代はLlama 4(2025年4月発表)であり、MoE(Mixture-of-Experts)アーキテクチャとネイティブマルチモーダルを採用した初の世代だ(出典:Meta AI Blog, 2025)。テキスト専用の実用モデルとしてはLlama 3.3(70B / 8B)が引き続き有力な選択肢であり、マルチモーダル用途にはLlama 4 Scout / MaverickのGGUFが利用できる。

Llama 4 ScoutはMoE構造で17Bアクティブ・16エキスパート、単一NVIDIA H100 GPUで動作するとされる。LLaMA-MoE研究(JST J-Global: LLaMA-MoE: Building Mixture-of-Experts from LLaMA)でも指摘されているように、MoEモデルの実効パラメータ数はデンスモデルと異なる解釈が必要であり、GGUFのサイズと性能の関係が従来モデルとは異なる場合がある点に留意が必要だ。

GGUFの量子化レベル比較(8Bクラスのモデルを例として)
量子化タイプ bits/weight(目安) 8Bモデルの目安サイズ 品質・用途
Q2_K 約2.6 〜3 GB 品質劣化が大きい。VRAMが極端に少ない場合のみ
Q4_K_M 約4.8 〜5 GB 品質・速度・サイズのバランスが最良。実務用途の第一選択肢
Q5_K_M 約5.7 〜6 GB Q4_K_Mより高精度。VRAM余裕があれば選択肢に入る
Q8_0 約8.5 〜9 GB FP16に近い品質。VRAMが十分な検証・ベースライン計測向け
F16 16 〜16 GB 量子化なし。ベースライン測定・ファインチューン後推論など

VRAM容量が限られる環境では、Q4_K_Mを選択した上で--flash-attnを有効にし、KVキャッシュの量子化(--cache-type-k q8_0)を組み合わせる構成が実用的だ。コンテキスト長を必要以上に大きく取らないことも、KVキャッシュのVRAM消費を抑える上で重要になる。

マルチモーダル・テキスト処理の技術背景については マルチモーダルAI解説、自然言語処理の基礎については BERTとNLPガイド、テキストマイニングについては テキストマイニング解説 も参考にされたい。

ローカルLLMの導入やRAG構築をご検討の方は、AI開発会社クリスタルメソッドの無料相談をご利用ください。

本番環境でのllama-server運用:systemd・リバースプロキシ・チューニング

systemdによるサービス化

サーバーの自動起動と障害時の再起動管理にはsystemdユニットファイルが最も手軽だ。

# /etc/systemd/system/llama-server.service
[Unit]
Description=llama-server LLM inference API
After=network.target

[Service]
Type=simple
User=llama
ExecStart=/opt/llama.cpp/build/bin/llama-server \
  -m /opt/models/Llama-3.3-8B-Instruct-Q4_K_M.gguf \
  --host 127.0.0.1 --port 8080 \
  -ngl 33 -c 4096 --parallel 4 \
  --api-key ${LLAMA_API_KEY}
EnvironmentFile=/etc/llama-server.env
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

APIキーは環境変数ファイル(/etc/llama-server.env)に分離してパーミッションを絞ることを推奨する。ユニットファイルにベタ書きするとジャーナルログに露出するリスクがある。

nginxによるリバースプロキシとTLS終端

llama-server自体はHTTPのみを提供するため、外部公開にはリバースプロキシによるTLS終端が必要だ。SSEストリーミングを正常に動作させるにはproxy_buffering offが不可欠であり、この設定を欠いたままにするとクライアント側でトークンが一括送信される挙動となる。

server {
    listen 443 ssl;
    server_name your.domain.com;

    ssl_certificate     /etc/letsencrypt/live/your.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;

    location /v1/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_read_timeout 300s;
        proxy_buffering off;        # SSEストリーミングに必須
        proxy_set_header Connection '';
        proxy_http_version 1.1;
    }
}

パフォーマンスチューニングの判断基準

スループット重視

  • --parallelを増やす
  • -cは必要最小限に設定
  • --ubatch-sizeを512〜1024に
レイテンシ重視

  • --parallel 1で単一集中
  • 全レイヤーをGPUに乗せる(-ngl 999
  • --flash-attnを有効化
VRAM節約

  • Q4_K_M以下の量子化を選ぶ
  • KVキャッシュ量子化(--cache-type-k q8_0
  • --no-mmapは原則避ける

セキュリティ上の留意点

  • 外部公開時は必ず--api-keyを設定する。未設定のまま0.0.0.0でバインドすると、ネットワーク上の誰でもモデルを使用できる状態になる。
  • llama-serverのポートをファイアウォールで直接外部に晒さず、nginxなどのリバースプロキシ経由にする。
  • プロンプトインジェクション対策はアプリケーション層で実装が必要だ。llama-server自体は入力のサニタイズを行わない。
  • モデルファイルの取得元は公式リポジトリ(llama.com・Hugging Face公式)または信頼性の確認できるソースに限定する。悪意のあるGGUFファイルが存在しうる点は継続的に注意が必要だ。
  • Llamaの利用にあたっては、MetaのLlama Community License(制限条項付きのオープンライセンス)を確認すること。月間アクティブユーザーが極めて多い事業者には追加の許諾要件がある(出典:llama.com)。

llama-serverとOllama・vLLMとの技術的な位置づけの違い

ローカルLLM推論サーバーの選択肢として、Ollama・vLLM・LM Studioが挙げられることが多い(出典:自作.com, 2026)。各ツールの技術的な特性を整理する。

ローカルLLMサーバーの技術的特性比較
ツール 技術的強み 向いているケース 主な制約
llama-server 軽量・依存最小・オプションが細かく制御可能・/metrics・WebUI内蔵 サーバー組み込み・カスタム構成・ローリソース環境・CI/CD組み込み モデル管理UIなし・セットアップに知識が必要
Ollama セットアップが極めて簡単・モデル管理コマンドが整備されている(内部でllama.cppを使用) 開発者の個人環境・素早いプロトタイプ 低レベルオプションの直接制御に制限がある
vLLM PagedAttentionによる高スループット・高並列サービング GPU多数のデータセンター・高並列リクエスト処理 Python依存・リソース要件が高い・GGUFを直接扱わない
LM Studio GUIで操作・モデルダウンロードが容易 非エンジニアの試用・デモ環境 サーバー用途の柔軟なカスタマイズは限定的

Ollamaはllama.cppをラップしているため、KVキャッシュの詳細な制御や/metricsエンドポイントの直接利用、--flash-attnなどのパラメータを細かく調整したい用途では、llama-serverを直接使う方が実装上の自由度が高い。

強化学習やスパースモデリングの観点でLLMの技術背景をさらに掘り下げたい場合は、強化学習解説およびスパースモデリング解説も参照されたい。

よくあるエラーと対処法

llama-server 主なトラブルと対処法
症状 原因 対処法
CUDA out of memory VRAMが不足している -nglを減らす・-cを小さくする・より低量子化のモデルを選ぶ
応答に文字化け・不正な記号が混入 チャットテンプレートの不一致 --chat-templateでllama3・chatml・mistralなどを明示指定
ストリームが一括でまとめて届く プロキシのバッファリングが有効 nginx設定にproxy_buffering off;を追加
モデル読み込みが極端に遅い mmapが無効またはストレージがHDD モデルをSSDに移動。--no-mmapフラグを外す
401 Unauthorized APIキーの不一致またはヘッダー欠落 リクエストヘッダにAuthorization: Bearer <key>を付与
生成が途中で停止する コンテキスト長の上限超過 -cを増やす。または--ctx-size 0でモデルのmax値を自動適用
WebUIにアクセスできない --no-webuiフラグが付いている、またはバインドIP制限 フラグを外す。--host 0.0.0.0またはローカルIPで確認
llama-serverの組み込みWebUI:ブラウザからチャット操作・パラメータ調整が可能なReactベースのインターフェース
llama-serverの組み込みWebUI:http://localhost:8080で起動確認やプロンプト実験が行える

llama-serverを使ったバーチャルヒューマン推論基盤への応用

弊社クリスタルメソッド株式会社が開発するバーチャルヒューマン/AIアバターソリューション「DeepAI」では、実在の人物の容姿・表情・声・振る舞いをデジタル空間で再現する。リップシンク・表情生成・音声合成・対話AIを組み合わせたこのシステムでは、対話推論の低レイテンシ化が体験品質に直接影響する。llama-serverは依存関係が最小限でオンプレミス環境への組み込みが容易であり、かつOpenAI互換エンドポイントにより既存の対話制御ロジックをそのまま流用できる。こうしたローカル推論サーバーは、クラウドAPIの遅延や可用性リスクを回避したい用途での選択肢として検討に値する。

生成AIの基盤技術に関心がある場合は GAN(生成的敵対ネットワーク)解説 もあわせて参照されたい。


AIの業務活用・導入をご検討の方へ

クリスタルメソッドは、各種LLM・ローカルAI・RAG・AIアバターを活用した業務へのAI導入を支援しています。「自社の業務でどう使えるか」をまずはお気軽にご相談ください。

参考文献

監修

河合 継(クリスタルメソッド株式会社 代表取締役)

AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について編集方針

AIブログ購読

 
クリスタルメソッドがお届けする
AIブログの更新通知を受け取る

Study about AI

AIについて学ぶ

  • 教育 AI 活用 事例から学ぶ企業研修のDXとAnthropic無償提供が示すプロンプトの重要性

    教育 AI 活用 事例から学ぶ企業研修のDXとAnthropic無償提供が示すプロンプトの重要性

    ## 1. Anthropicによる教育者向けClaude無償提供ニュースの要点 2026年1月、AIスタートアップのAnthropicは、国際NGO「Teac...

  • AI人事評価のリスクと違法性の境界線とは?Meta社リストラ訴訟から学ぶ防衛策

    AI人事評価のリスクと違法性の境界線とは?Meta社リストラ訴訟から学ぶ防衛策

    近年、企業の意思決定プロセスにおいてAI(人工知能)の活用が急速に進んでいます。特に人事評価や採用、人員整理といった領域でのAI導入は、業務効率化や客観性の担保...

  • AIエージェントの相互運用性と規制がもたらす経営インパクト—米上院法案から紐解く日本企業の針路

    AIエージェントの相互運用性と規制がもたらす経営インパクト—米上院法案から紐解く日本企業の針路

    自律的にタスクを遂行するAIエージェントの台頭に伴い、異なるシステムやプラットフォーム間でこれらを安全に連携させる「相互運用性」と、それを支える「規制」のあり方...

View more