llama.cppは、MetaのLlamaモデルのような様々な大規模言語モデルの推論を実行する、オープンソースのソフトウェアライブラリである。汎用的なテンソルライブラリであるプロジェクトと並行して共同開発されている。
ライブラリにはコマンドラインツールが含まれており、シンプルなWebインタフェースを持つサーバも付属している。
llama.cppは、OllamaやLM Studioを含むほぼすべてのローカル推論ツールのコアとして、事実上の標準と見なされている。
背景 2022年9月末にかけて、Georgi Gerganovはテンソル代数を実装するCライブラリであるGGMLライブラリの開発を開始した。Gerganovは、厳密なメモリ管理とマルチスレッド化を意図してこのライブラリを開発した。GGMLの作成は、ファブリス・ベラールのLibNCにおける取り組みに触発されたものである。
llama.cppの前に、GerganovはOpenAIによる音声認識モデルであるWhisperを実装したwhisper.cppと呼ばれる同様のライブラリに取り組んでいた。
開発 llama.cppは2023年3月にGeorgi Gerganovによって、依存関係のない純粋なC/C++によるLLaMA推論コードの実装として開発が開始された。これにより、プロジェクトの目標であったGPUやその他の専用ハードウェアを搭載していないコンピュータでのパフォーマンスが向上した。llama.cppはCPUだけで実行できたため、専用ハードウェアを持たないユーザーの関心を集めた。当初はCPU向けに設計されていたが、後にGPUおよびNPUバックエンドのサポートが追加された。2026年5月現在、GitHubで10万9000以上のスターを獲得している。
2024年4月30日には、FlashAttentionが導入された。
2025年4月10日にはlibmtmdが導入され、これまで停滞していたマルチモーダルモデルのサポートが再活性化された。
2025年12月17日、新しいGUIバインディングを通じてAndroidおよびChromeOSデバイスでの完全なアクセラレーションが導入され、クロスコンパイルしてadbシェルでCLIを実行するというこれまでのアプローチを超えた、ネイティブアプリ開発への道が開かれた。
アーキテクチャ llama.cppは、x86、ARM、Metal、BLAS、BLIS、zDNN、ZenDNN、SYCL、MUSA、CUDA、HIP、CANN、OpenCL、RPC、およびVulkan(バージョン1.2以降)を含む多数のハードウェアターゲットをサポートしている。これらのバックエンドはGGMLテンソルライブラリを構成し、フロントエンドのモデル固有のllama.cppコードによって使用される。llama.cppは、最適化のためにいくつかのCPU拡張命令を利用している。
x86-64向けのAVX、AVX2、AVX-512、AVX-VNNI、およびAMX。 AArch64(ARM64)向けのNeon、i8MM、SVE、SVE2、SMEおよびSME2。 S390x向けのVXE2(Vector Enhancement Facility 2)。 Appleシリコンは、プロジェクトにとって重要なターゲットである。
llama.cppは、エッジデバイスでの推論を目的とした様々な機能をサポートしている。 事前モデル量子化およびオンザフライのKVキャッシュ量子化。 投機的デコード。 システムRAMへのモデルレイヤーの部分的なオフロード。これにより、デバイスはVRAMに単独で収まりきらないほど大きなモデルをロードできるようになる。
さらに、llama.cppはフロントエンド通信のための様々な機能とAPIをサポートしている。 v1/chat/completionsなどのOpenAI互換エンドポイント。 JSONとしての文法ベースの出力フォーマット。
GGUFファイルフォーマット
GGUF( Universal File)ファイルフォーマットは、テンソルとメタデータの両方を単一のファイルに格納するバイナリフォーマットであり、モデルデータの高速な保存と読み込みのために設計されている。他のモデルアーキテクチャへのサポートが追加される中で、後方互換性をより良く維持するために、llama.cppプロジェクトによって2023年8月に導入された。これはGGMLのようなプロジェクトで使用されていた以前のフォーマットに取って代わるものであり、通常はPyTorchなどの異なる機械学習ライブラリで開発されたモデルを変換することによって生成される。
設計 GGUFは量子化、つまりモデルの重みの精度を下げる行為に焦点を当てている。これにより、モデルの精度が低下する代償として、メモリ使用量の削減と速度の向上がもたらされる。
GGUFは、2ビットから8ビットの量子化整数型、float32、float16、bfloat16などの一般的な浮動小数点データフォーマット、および1.58ビット量子化をサポートしている。
GGUFには、トークナイザーの語彙、コンテキスト長、テンソル情報、その他の属性など、GPTのような言語モデルを実行するために必要な情報が含まれている。
バイトレベル構造(リトルエンディアン) バイト数 説明 4 GGUFマジックナンバー、現在は0x47 0x47 0x55 0x46に設定 4 GGUFバージョン、現在は3に設定 8 UINT64 tensor_count: テンソルの数 8 UINT64 metadata_kv_count: メタデータのキーと値のペアの数 可変 メタデータブロック、metadata_kv_count個のキーと値のペアを含む 可変 テンソル情報ブロック、tensor_count個の値を含む 可変 uint8_t tensor_data[]、重みビットブロック
メタデータブロック // メタデータの例 general.architecture: 'llama', general.name: 'LLaMA v2', llama.context_length: 4096, ... , general.file_type: 10, // (通常は量子化レベルを示す。ここでは "MOSTLY_Q2_K") tokenizer.ggml.model: 'llama', tokenizer.ggml.tokens: [ '<unk>', '<s>', '</s>', '<0x00>', '<0x01>', '<0x02>', '<0x03>', '<0x04>', '<0x05>', '<0x06>', '<0x07>', '<0x08>', ... ], ...
テンソル情報ブロック // n番目のテンソル name: GGUF string, // 例: "blk.0.ffn_gate.weight" n_dimensions: UINT32, // 例: 2 dimensions: UINT64[], // 例: [ 4096, 32000 ] type: UINT32, // 例: 10 (通常は量子化レベルを示す。ここでは "GGML_TYPE_Q2_K") offset: UINT64 // tensor_dataブロックの開始位置からの相対的な開始位置 // (n+1)番目のテンソル ...
モデル Llama.cppは、Llama、Mistral、Gemma、DeepSeek、gpt-oss、Phi、Qwenなど、多くの大規模言語モデルをサポートしている。
脚注
関連項目 LM Studio — LLMをローカルで実行し対話するためのデスクトップアプリケーション Ollama – 大規模言語モデルを実行するためのオープンソースソフトウェアプラットフォーム SGLang – 構造化生成と高性能な大規模言語モデルの推論およびサービングのためのフレームワーク vLLM – 大規模言語モデルの推論およびサービングエンジン
外部リンク