重要なポイント
- 無料・MITライセンスのオープンソースで、GitHubのggml-orgがメンテナンス
- C/C++で書かれ、ggmlテンソルライブラリの上に構築
- ローカルAIエコシステム全体で使われるGGUFモデルファイル形式(.gguf)を定義
- ハードウェアバックエンド:CUDA、Metal、Vulkan、ROCm/HIP、SYCL、CPU(AVX/AVX2/AVX512)
- 8ビットから約1.5ビット/重みまでの量子化に対応
- ウェブUI付きの内蔵OpenAI互換HTTPサーバー、llama-serverを同梱
- Ollamaはほとんどのプラットフォームでllama.cppを推論エンジンとして利用し、モデルレジストリとCLIを追加
- グラフィカルなインストーラーはなく、コマンドライン、内蔵ウェブUI、または各種言語バインディング経由で利用
📍 一文で説明
llama.cppはGeorgi Gerganov氏が開発した無料・MITライセンスのC/C++推論エンジンで、CPUまたはGPUでLLMをローカル実行し、GGUFモデル形式を定義し、Ollamaを含む複数のローカルAIツールがほとんどのプラットフォームで基盤として利用する推論バックエンドです。
💬 簡潔に説明
クリックで使えるアプリではなく、llama.cppはモデルファイルを読み込んでテキストを生成する実際のエンジンコードそのものです——Ollamaや他の多くのローカルAIアプリは、内部でllama.cppを実行し、その上により使いやすいインターフェースを載せています。
📌補足: この記事はllama.cppの公式GitHubリポジトリと公開ドキュメントに基づいており、独自のベンチマークによるものではありません。具体的なトークン/秒の数値は、本記事のために独自に測定していないため掲載しておらず、ハードウェア、モデル、量子化形式によって大きく変わります。
llama.cppとは?
llama.cppは、最小限の外部依存でローカルに大規模言語モデルを実行する、無料・MITライセンスのC/C++推論エンジンです。2023年にGeorgi Gerganov氏が、MetaのLLaMA推論コードをゼロから書き直したC/C++移植版として開発し、データセンター向けGPUを必要とせず、CPUのみのマシンを含む一般的なコンシューマー向けハードウェアで動作するように作られました。現在はGitHubのggml-org組織がメンテナンスしており、大規模なオープンソースコミュニティの貢献を受け、テキストのみのLLMに加えてビジョン言語モデルにも対応するまで成長しています。
- Georgi Gerganov氏が開発し、現在はGitHubのggml-org組織がメンテナンス
- C/C++で書かれ、同じチームがメンテナンスするテンソルライブラリggmlの上に構築
- MITライセンス:ライセンス条件のもとでソースコードが公開され、利用・改変・再配布が可能
- CUDA対応GPUを必須とするエンジンとは異なり、CPUのみのハードウェアとGPUの両方で動作
- モデルの重み、量子化データ、メタデータをまとめて保存する単一ファイル形式、GGUFを定義
- 10万を大きく超えるGitHubスターを持つ、最も広く参照されているオープンソースLLM推論プロジェクトの一つ
llama.cppはどのようなハードウェアアクセラレーションに対応していますか?
llama.cppは幅広いハードウェアアクセラレーションバックエンドに対応しており、これがCPUのみのノートPCからマルチGPUワークステーションまで動作する理由の一つです。
CUDA
- 詳細:
- NVIDIA GPU向け。モデルのレイヤーをGPUメモリにオフロードし、CPUのみでの実行より高速な推論を実現し、マルチGPU構成にも対応します。
Metal
- 詳細:
- Apple Silicon Mac(M1以降)向け。AppleのMetal APIを使い、Mシリーズチップのコアで推論を実行します。
Vulkan
- 詳細:
- WindowsとLinuxに対応するベンダー横断のGPU API。ベンダー固有のSDKなしで複数メーカーのGPUで利用できます。
ROCm / HIP
- 詳細:
- AMD GPU向け。AMDのROCm計算スタック経由で、CUDA限定のアクセラレーションに代わる選択肢を提供します。
SYCL
- 詳細:
- Intel GPU向け。一部のIntel CPU内蔵グラフィックスを含め、IntelのoneAPI SYCL実装経由で利用します。
CPU(AVX / AVX2 / AVX512)
- 詳細:
- 最新のx86プロセッサ上でベクトル化命令を用いた最適化されたCPUのみの実行——GPUがまったくなくてもllama.cppを動かせるフォールバック経路です。
プロジェクトはGitHubのビルドドキュメントで、BLAS、CANN、WebGPUなどの追加・実験的バックエンドも記載しています。ここではローカルLLMユーザーが実際に選択することの多いバックエンドに絞って解説しています。
GGUFとは何で、どの量子化形式を選ぶべきですか?
GGUFは、llama.cppが定義したモデルファイル形式で、量子化されたモデルの重みと、実行に必要なメタデータ(トークナイザー、アーキテクチャ、コンテキスト長)をまとめて保存します。プロジェクトの以前のGGML形式を置き換えるものです。量子化は、モデルの重みを元の学習フォーマットより低い数値精度で保存することでメモリ使用量を削減し、出力品質の一部とVRAM/RAM使用量の削減・推論速度の向上を引き換えにします。
Q8_0
- 詳細:
- 8ビット量子化。llama.cppの一般的な形式の中で、量子化前の元モデルに最も近く、ファイルサイズはグループ内で最大です。
Q5_K_M
- 詳細:
- モデルのレイヤーに不均等に精度を割り当てる5ビットの「Kクアント」形式で、最小のファイルサイズよりも品質を優先します。
Q4_K_M
- 詳細:
- ファイルサイズと出力品質のバランスとしてよく使われる4ビットKクアント形式——VRAMが限られている場合の一般的なデフォルト推奨です。
4ビット未満(Q3、Q2、約1.5ビット形式)
- 詳細:
- 非常に限られたメモリに大きなモデルを収めるための形式です。ビット幅が下がるほど品質低下が目立ちやすくなるため、通常はデフォルトの選択肢というより最後の手段です。
適切な形式はハードウェアと具体的なモデルによって異なります——本記事には、特定の形式の品質低下率について独自に測定した数値は含まれていません。これはモデルアーキテクチャやタスクによって変動するためです。同じモデルを複数の量子化形式でダウンロードし、自分のプロンプトで出力を比較することが、自分のユースケースにおけるトレードオフを判断する最も確実な方法です。
llama-serverは何を提供しますか?
llama-serverはllama.cppに同梱されるHTTPサーバーバイナリです。単一のバイナリで、llama.cpp独自のネイティブAPI、OpenAI互換API、Ollama互換のAPIシム、そして内蔵のブラウザベースチャットUIを提供し、いずれも同じロード済みモデルとKVキャッシュを共有します。
- /v1配下のOpenAI互換エンドポイント。すでにOpenAI API向けに作られたツールは、ベースURLを変更するだけでローカルのllama-serverインスタンスを指せることが多い
- バイナリが直接提供する内蔵ウェブUI。別途フロントエンドをインストールせずに利用可能
- Ollama互換のAPIシムにより、一部のOllama向けクライアントツールが代わりにllama-serverに接続可能
- サーバーとリクエストの状態を確認できる/propsや/slotsなどのイントロスペクション用エンドポイント
- 1つのモデルに対して複数の同時リクエスト「スロット」をサポートし、1リクエストずつではなく並行処理が可能
llama.cppをどうやってビルド・実行しますか?
llama.cppは通常CMakeでソースからビルドしますが、自分でコンパイルしたくない場合のために、プロジェクトはGitHubのリリースページで複数プラットフォーム向けのビルド済みバイナリも公開しています。
- 1まだ導入していない場合は、お使いのOS向けにC++ツールチェーンとCMakeをインストールします。
- 2リポジトリをクローンします:
git clone https://github.com/ggml-org/llama.cpp。 - 3使用するハードウェアバックエンド向けにビルドを設定します——例えばCUDA、Metal、Vulkanのサポートを CMakeオプションとして有効にするか、CPUのみのままにします。
- 4CMakeでプロジェクトをビルドします:
cmake -B buildに続けてcmake --build build --config Release。 - 5Hugging FaceなどからGGUF形式のモデルをダウンロードし、利用可能なVRAMやRAMに合った量子化形式を選びます。
- 6コマンドラインから
llama-cliバイナリで直接ターミナルチャットを実行するか、llama-serverを起動してOpenAI互換HTTP APIとウェブUIを公開します。 - 7llama-serverを使う場合は、ブラウザからそのローカルアドレスに接続するか、任意のOpenAI API互換クライアントをその
/v1エンドポイントに向けます。
llama.cppは必ずソースからビルドしなければなりませんか?
いいえ——プロジェクトは複数プラットフォーム向けのビルド済みバイナリもGitHubのリリースページで公開しています。ただしソースからビルドすると、自分のマシンに合ったハードウェアバックエンド(CUDA、Metal、Vulkanなど)を正確に有効化できます。
実行するGGUFモデルはどこで入手できますか?
GGUF形式の多くのモデルがHugging Faceなどのモデル共有サイトで公開されており、通常はモデルごとに複数の量子化形式が用意されているため、利用可能なメモリに合ったものを選べます。
llama.cppとOllamaはどう関係していますか?
Ollamaは、ビルドシステムに触れずにローカルLLMを実行する最も広く使われている方法の一つであり、コミュニティやサードパーティの技術記事では、ほとんどのプラットフォームでllama.cppを基盤の推論エンジンとして利用していると一般的に説明されています。Ollama自体はこの依存関係を詳しく公表していないため、公式仕様ではなく広く報告されているアーキテクチャとして扱うべきですが、これはOllama自身のオープンソースコードとも矛盾しません。
- llama.cppは低レベルの推論エンジンであり、Ollamaはモデルレジストリ、ワンコマンドでのダウンロード、簡素化されたCLI、独自のModelfile設定システムを追加するパッケージング層です
- llama.cppを直接選ぶと、Ollamaの簡素化されたインターフェースでは見えない、正確なビルドフラグ、量子化形式、サーバー設定をコントロールできます
- Ollamaを選ぶと、その代わりに動作中のモデルへのより速い到達を得られますが、基盤エンジンの設定に関する柔軟性は一部犠牲になります
- どちらもOpenAI互換APIを提供できます——llama.cppはllama-server経由、Ollamaは独自のAPI層経由
llama.cppを直接使うべきなのはどんな人ですか?
llama.cppは、動作するチャット画面への最短ルートよりも、モデルの動かし方を直接コントロールしたい人に向いています。
llama.cpp vs. Ollama vs. LM Studio vs. vLLM
この4つのツールは、コントロールと利便性のスペクトラム上の異なる位置にあり、そのうち2つ(Ollama、そしてApple SiliconにおけるLM Studioを取り巻くエコシステムの一部)自体が、ゼロから作られた代替品ではなく推論エンジンの上に構築されています。
llama.cpp
- インターフェースとセットアップ:
- CLI、内蔵ウェブUI、llama-server経由のOpenAI互換API。CMakeでソースからビルドするか、ビルド済みリリースバイナリを使用。量子化形式は自分で選択。
- 向いている用途:
- 最大限のコントロール、組み込み・エッジデプロイ、エンジン上に直接構築するカスタムパイプライン。
Ollama
- インターフェースとセットアップ:
- CLIとREST API。ほとんどのプラットフォームでllama.cppをバックエンドとして動作すると一般に報告されている。1コマンドでインストールし、1コマンドでモデルをダウンロードして実行。
- 向いている用途:
- エンジンレベルの設定が不要な人にとって、ビルド手順なしでローカルモデルを最速で動かす方法。
LM Studio
- インターフェースとセットアップ:
- Mac、Windows、Linux向けのグラフィカルなデスクトップアプリ。ダウンロード、インストール後、アプリ内でモデルを閲覧・ダウンロード。
- 向いている用途:
- コマンドラインではなく、クリックだけのチャットアプリが欲しい非技術系ユーザー。
vLLM
- インターフェースとセットアップ:
- OpenAI互換APIを持つPythonサーバーで、Python/CUDA環境にpipでインストール。GGUFやllama.cppではなく独自のPagedAttentionサービングエンジンを使用。
- 向いている用途:
- シングルユーザーのローカルチャットではなく、本番環境での高スループット・マルチユーザーGPUサービング。
本記事はこの4つのツールの速度や出力品質を独自にベンチマークしておらず、どれかが技術的に優れていると主張するものではありません——上記の比較は、文書化されたアーキテクチャ、セットアップ、アクセス方式の事実のみを扱っています。ハードウェア別のスループット数値については、llama.cpp vs. Ollama vs. vLLM比較記事や、vLLMをより詳しく扱うエンタープライズ推論サーバーガイドをご覧ください。
本記事が扱っていない範囲
これはllama.cppの公開ドキュメントとリポジトリをもとにした解説記事であり、実機によるベンチマークレポートではありません。
- 独自に測定したトークン/秒やレイテンシの数値は掲載していません——スループットは具体的なハードウェア、モデル、量子化形式、ビルドフラグに大きく左右されます
- 特定の量子化形式について独自に検証した品質低下率は掲載していません——モデルアーキテクチャやタスクによって変動します
- llama.cppのコードベースの行単位でのセキュリティ監査は行っていません——オープンソースかつMITライセンスであり、コード自体がレビュー可能です
- llama.cppがサポートするすべてのバックエンドやビルドフラグは網羅していません——本記事はほとんどのローカルLLMユーザーが選択することの多いバックエンドと形式に焦点を当てています
- 商用サポート契約については扱っていません——llama.cppはベンダー製品ではなく、コミュニティによるオープンソースプロジェクトです
llama.cppを試す際によくある間違い
llama.cppをめぐる摩擦の多くは、自分でビルドするエンジンではなく、コンシューマー向けアプリのように扱うことから生じます。
よくある質問
llama.cppとは何ですか?
llama.cppは、Georgi Gerganov氏が開発した無料・MITライセンスのC/C++推論エンジンで、CPUまたはGPUで大規模言語モデルをローカル実行します。GitHubのggml-org組織がメンテナンスしています。
llama.cppは無料ですか?
はい。llama.cppはMITライセンスの下で公開された無料のオープンソースソフトウェアで、サブスクリプションやアカウントは不要です。
GGUFとは何ですか?
GGUFは、llama.cppが定義したモデルファイル形式で、量子化されたモデルの重みと、トークナイザーやアーキテクチャの詳細など実行に必要なメタデータを一緒に保存します。llama.cppだけでなく、ローカルAIエコシステムの多くで使われています。
Ollamaはllama.cppを使っていますか?
コミュニティやサードパーティの技術記事では、Ollamaはほとんどのプラットフォームでllama.cppを推論エンジンとして利用し、その上に独自のモデルレジストリ、CLI、Modelfileシステムを追加していると一般的に説明されています。Ollama自身はこの依存関係を詳しく公表していません。
llama.cppはどんなハードウェアに対応していますか?
llama.cppは(AVX/AVX2/AVX512最適化を用いた)CPUのみの実行に加え、CUDA(NVIDIA)、Metal(Apple Silicon)、Vulkan、ROCm/HIP(AMD)、SYCL(Intel)経由のGPUアクセラレーションにも対応しています。
llama.cppはどんな量子化形式に対応していますか?
llama.cppはQ8_0のような8ビット形式から約1.5ビット形式まで量子化に対応しており、ファイルサイズと出力品質のバランスを取るQ5_K_MやQ4_K_Mのような中間形式が広く使われています。
llama.cppを使うのにC++の知識は必要ですか?
いいえ——llama-cliやllama-serverのバイナリでモデルを実行するのにコードを書く必要はありません。プロジェクトをソースからビルドするにはC++ツールチェーンとCMakeが必要ですが、エンジン自体を改変したい場合を除き、自分でC++を書く必要はありません。
llama.cppにグラフィカルなユーザーインターフェースはありますか?
llama-serverにはブラウザベースの内蔵ウェブUIが含まれていますが、LM Studioに匹敵する独立したグラフィカルインストーラーやデスクトップアプリはありません。Ollama互換やOpenAI API互換のフロントエンドを含む複数のサードパーティアプリが、代わりにllama-serverに接続できます。
llama.cppはOllamaより優れていますか?
「優れている」かどうかは必要な用途によります。llama.cppはビルドフラグ、量子化、サーバー設定をより直接的にコントロールでき、Ollamaはより速く簡単に動作するモデルへ到達できます。本記事はどちらかが技術的に優れていると主張するものではありません。詳細は上記の比較表と専用のベンチマーク比較記事をご覧ください。
llama.cppはGPUなしで動作しますか?
はい。llama.cppはGPUアクセラレーションのサポートに加え、ベクトル化命令(AVX/AVX2/AVX512)を用いてCPUのみのハードウェアで動作するように設計されています。
