llama.cpp — C/C++でLLMやVLMの高速推論を実現するフレームワーク
ggml-org/llama.cpp
★ 134,577 ・ C++ ・ MIT
概要
llama.cpp は、大規模言語モデル(LLM)やビジョン言語モデル(VLM)の推論を C/C++ で実行するために開発されているオープンソースソフトウェアです。
近年の機械学習フレームワークは Python や重厚なランタイムへの依存が大きい傾向にありますが、llama.cpp は最小限の環境構成で、多様なハードウェア上で動作するように設計されています。PC などの一般的なデスクトップ環境やモバイル端末などのエッジ環境で LLM を手軽に動かしたい開発者をはじめ、低リソースなサーバーで推論 API を提供したいエンジニアに適しています。
基盤となるテンソル計算ライブラリ「ggml」の上に構築されており、ハードウェアのアーキテクチャ特性を活かした最適化と豊富な量子化オプションによって、メモリ消費の抑制と高速な処理を両立しています。
主な特徴
llama.cpp の主な特徴として、README には以下の点が挙げられています。
- ピュアな C/C++ 実装と依存の少なさ: 外部ライブラリへの依存を持たないプレーンな C/C++ 実装を基本としており、環境構築の手間を抑えて導入できます。
- 幅広いハードウェア・命令セットの最適化: Apple Silicon(ARM NEON、Accelerate、Metal)をファーストクラスとして扱い最適化しているほか、x86 向けの AVX/AVX2/AVX512/AMX や、RISC-V 向けの拡張命令(RVV、ZVFH、ZFH、ZICBOP、ZIHINTPAUSE)にも対応しています。
- 細やかな整数量子化: 1.5ビット、2ビット、3ビット、4ビット、5ビット、6ビット、8ビットの整数量子化をサポートしており、モデルのメモリ使用量を削減しつつ推論を高速化できます。
- CPU と GPU のハイブリッド推論: VRAM の総容量を超える大規模なモデルであっても、モデルの一部を GPU にオフロードして部分的に高速化する CPU+GPU ハイブリッド推論が可能です。
- 多様なアクセラレータ対応: NVIDIA GPU 向けカスタム CUDA カーネルをはじめ、AMD GPU 向けの HIP、Moore Threads GPU 向けの MUSA、Vulkan、SYCL、WebGPU、CANN、Hexagon など、多種多様なバックエンドを網羅しています。
- OpenAI 互換の API サーバーと内蔵 Web UI: コマンドラインからの対話実行だけでなく、OpenAI 互換のエンドポイントを持つサーバー機能(llama serve)やブラウザから操作できる Web UI が提供されています。
使い方
README では、いくつかのインストール方法と実行手順が紹介されています。
インストール
インストールスクリプトを利用する場合、環境に応じて次のコマンドを実行します。
Linux や macOS などの環境(curl):
curl -LsSf https://llama.app/install.sh | sh
Windows(PowerShell):
irm https://llama.app/install.ps1 | iex
このほかにも、公式サイト(https://llama.app)の案内に従う方法、公式の Releases ページからビルド済みバイナリを取得する方法、Docker を利用する方法、リポジトリをクローンしてソースコードからビルドする方法が案内されています。
実行方法
インストール完了後は、llama コマンドを使用してモデルの取得と推論を直接実行できます。
Hugging Face からモデルを直接ダウンロードして CLI で実行する例:
llama cli -hf ggml-org/Qwen3.5-0.8B-GGUF
OpenAI 互換の API サーバーとして起動する例:
llama serve -hf ggml-org/Qwen3.5-0.8B-GGUF
CLI ツールではテキスト対話だけでなく VLM(ビジョン言語モデル)を用いたセッションも扱えるほか、llama serve を起動した際には内蔵された Web UI からモデルを利用することも可能です。
技術的なポイント
llama.cpp の内部構造と設計における注目点は、徹底したポータビリティとハードウェアリソースの効率的な利用にあります。
ggml を中核としたテンソル演算
本プロジェクトはテンソル計算ライブラリ「ggml」をベースにしています。ggml 自体が C/C++ で書かれており、ランタイムオーバーヘッドを極力排除しながら各種 SIMD 演算命令や GPU オフロードを制御できる基盤となっています。
多岐にわたるバックエンドサポート
README の対応一覧表には、以下のような多様なバックエンドが記載されています。
- GPU / NPU 系: CUDA(NVIDIA)、HIP(AMD)、MUSA(Moore Threads)、Metal(Apple Silicon)、Vulkan、SYCL(Intel GPU)、CANN(Huawei Ascend)、Hexagon(Snapdragon)、OpenCL(Adreno)、OpenVINO(Intel CPU/GPU/NPU、策定中)
- CPU 系: BLAS、BLIS、ZenDNN(AMD CPU)、IBM zDNN(IBM Z & LinuxONE)
- その他プラットフォーム: WebGPU、VirtGPU、分散処理向けの RPC バックエンド
これにより、特定のベンダー製 GPU に縛られることなく、手元の PC やスマートフォン、各種サーバーハードウェアで利用可能なリソースに応じたバックエンドを選択できます。
構造化出力とツール群
llama.cpp には、推論エンジンの本体に加えて実用的なツール群が同梱されています。
tools/cli: インタラクティブな対話や単発の推論を行う CLItools/server: HTTP 経由で推論機能を提供するサーバー実装(lib llama API や llama-server REST API)tools/completion: 補完機能を提供するツールgrammars: GBNF(GGML BNF)文法を利用し、LLM の出力を特定の構文や JSON スキーマに制約する仕組み
外部ライブラリの採用方針
C/C++ プロジェクトとしての可搬性を維持するため、ツール群の補助として組み込まれている外部ライブラリは、単一ヘッダー(Single-header)形式のものが中心です。
- cpp-httplib:
llama-serverで使用される単一ヘッダーの HTTP サーバーライブラリ(MIT ライセンス) - nlohmann/json: 各種ツールやサンプルで使われている単一ヘッダーの JSON ライブラリ(MIT ライセンス)
- stb: マルチモーダル機能で画像フォーマットのデコードに用いられる単一ヘッダーライブラリ(パブリックドメイン)
- miniaudio: マルチモーダル機能で音声デコードに用いられる単一ヘッダーライブラリ(パブリックドメイン)
- subprocess.h: プロセス起動用の単一ヘッダーライブラリ(パブリックドメイン)
このように、大規模なフレームワークをリンクすることなく、スタンドアロンに近い形で各機能を実現しています。
注意点
llama.cpp を利用する上での留意点は以下の通りです。
- ライセンス: 本リポジトリのライセンスは MIT ライセンスです。商用・非商用問わず広く利用可能ですが、使用するモデル(Hugging Face 等から取得する重みデータ)自体の利用規約やライセンスはモデルごとに異なるため、別途確認が必要です。
- 動作環境とビルド構成: 実行環境に合わせたバックエンド(CUDA、Metal、Vulkan など)を有効にしてビルドまたはバイナリを選択しない場合、ハードウェアアクセラレーションが効かず CPU 推論のみとなり、実行速度に影響が出ることがあります。
- 開発状況: バックエンド一覧において OpenVINO への対応が「In Progress」と記載されているなど、一部の機能やバックエンドは現在も開発途上です。最新の機能や特定のチップセット対応を利用する際は、ドキュメントやイシューの進捗状況を確認することが推奨されます。
まとめ
llama.cpp は、余計な依存関係を排除し、C/C++ で高効率な LLM・VLM 推論を実現するフレームワークです。広範な量子化と多彩なハードウェアバックエンドに対応しており、単一マシン上でのローカル推論から API サーバー構築まで柔軟に活用できます。





