Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

5. llama.cppの設計思想と基礎

llama.cppとは何か(Georgi Gerganovによる開発)

llama.cpp は、ブルガリアのプログラマである Georgi Gerganov(ゲオルギ・ゲルガノフ)氏が 2023 年 3 月に開発・公開した、純粋な C/C++ による LLaMA モデルの推論エンジンです。 初代 LLaMA が公開されてからわずか数週間後、GitHub 上に突如として現れたこのプロジェクトは、AI 界隈に大きな衝撃を与えました。

これまで LLM を動かすには、Python 実行環境、巨大な PyTorch ライブラリ、そして高価な NVIDIA 製 GPU(VRAM 16GB 以上)が必須とされていました。 llama.cpp は、特別な GPU を持たない一般的な MacBook(Apple Silicon)や、普通のノート PC の CPU だけを使って、LLaMA 7B や 13B を実用的な速度で動作させて見せたのです。

Pythonや重厚な深層学習フレームワークへの依存脱却

従来の深層学習スタックは非常に複雑で重厚でした。 PyTorch や CUDA、cuDNN、数多くの Python パッケージが数ギガバイトものディスク容量を占有し、環境構築のトラブルが頻発していました。また、Python の実行オーバーヘッド(GIL やメモリ管理)も少なからず存在します。

llama.cpp の最大の特徴は、「Python や PyTorch などの外部ライブラリを一切使わず、プレーンな C/C++ だけでゼロから推論パイプラインを実装したこと」です。 コンパイラさえあれば単一の実行可能バイナリ(exeファイルなど)をビルドでき、数メガバイトの極小フットプリントで軽快に動作します。

C/C++によるゼロ依存とハードウェア最適化

llama.cpp は、ハードウェアの性能を限界まで引き出すために、CPU や GPU の低レベル命令を直接活用しています。

  • SIMD ベクトル命令の活用: x86_64 アーキテクチャの AVX, AVX2, AVX-512 命令や、ARM アーキテクチャの NEON 命令をフル活用し、行列積計算を CPU 上で並列実行します。

  • Apple Silicon(Metal)へのネイティブ対応: Mac の Apple M シリーズに搭載された統合メモリ(Unified Memory)と Metal API を活用し、GPU と CPU が同じ高速メモリを共有する特性を最大限に活かして爆速な推論を実現しました。

  • マルチバックエンド対応: NVIDIA GPU(CUDA)、AMD GPU(ROCm / HIP)、Intel GPU(SYCL / oneAPI)、Vulkan など、あらゆるグラフィックボードへのオフロードに対応しています。

ファイルフォーマットの歴史(GGMLからGGUFへ)

llama.cpp では、モデルの重みとメタデータを格納するために独自のバイナリフォーマットが開発・改良されてきました。

  • GGML (Georgi Gerganov Machine Learning): 初期に使用されていたバイナリフォーマットです。テンソルの重みデータをフラットに保存するシンプルな構造でしたが、メタデータ(トークナイザーの設定やアーキテクチャ情報)の拡張が難しく、互換性の破綻が課題でした。

  • GGJT / GGMF: アライメントやメタデータ追加のために一時的に使われた過渡的なフォーマットです。

  • GGUF (GPT-Generated Unified Format): 2023 年 8 月に導入された、現在デファクトスタンダードとなっている統一フォーマットです。 キー・バリュー形式の拡張可能なメタデータヘッダーを備えており、トークナイザー、モデルアーキテクチャ名、量子化方式、ハイパーパラメータなどを単一の .gguf ファイルに完全に自己完結して保持できます。 後方互換性と前方互換性に配慮されており、新しいモデルアーキテクチャが追加されてもフォーマット全体を壊さずに拡張できます。

クロスプラットフォーム対応とエコシステム

llama.cpp の成功は、ローカル AI アプリケーションの爆発的な増加をもたらしました。 Linux、macOS、Windows、Android、さらには Raspberry Pi のような小型シングルボードコンピュータまで、あらゆる環境で同一のモデルファイルを動作させることができます。

Ollama、LM Studio、Jan、LocalAI、text-generation-webui といった人気のローカル LLM アプリケーションの多くは、内部の推論バックエンドとして llama.cpp(またはそのライブラリ)を採用しています。 次章では、llama.cpp を支える核心技術である「量子化(Quantization)」について掘り下げます。