Whisper.cpp や LLaMA.cpp を動かした経験があるなら、必ず目にする二つの名前がある。ggml と gguf である。これらは似たように見えるが、実際にはまったく異なる役割を持つ。どちらも開発者 Georgi Gerganov 氏によって設計されたものであり、ローカル環境でAIモデルを動かす基盤を支えている。本稿では、両者の設計思想・役割・関係を明確に整理し、その理解を深める。
Georgi Gerganov氏という開発者
Gerganov氏はブルガリア出身のソフトウェアエンジニアであり、独立した個人開発者である。
彼はC/C++を用いた軽量な機械学習実装を数多く公開しており、代表作には以下がある。
- ggml:機械学習向け数値演算ライブラリ
- whisper.cpp:OpenAI WhisperのC++実装
- llama.cpp:Meta LLaMAのC++実装
- stable-diffusion.cpp:画像生成モデルの軽量実装
いずれのプロジェクトも共通して、Pythonや外部依存を極力排し、純粋なC/C++のみで構成されている。この一貫した思想が、組み込み端末からハイエンドGPUまで幅広い環境でAIを実行できる柔軟さを生んでいる。
ggmlとは何か
ggml は「Gerganov’s Machine Learning library」の略称であり、機械学習モデルを動作させるための数値計算エンジンである。テンソル(多次元配列)の演算、量子化、メモリ管理、GPU転送など、モデル推論に必要な低水準処理を担当している。
内部では、行列積や畳み込みなどの基本演算をC言語レベルで直接実装し、各CPU命令セット(AVX、NEONなど)やGPUバックエンド(CUDA、Vulkan、Metalなど)を利用して最適化している。また、実行時に動的なメモリ確保を行わない設計を採用しており、モバイル端末でも安定して動作する。
要するに、**ggmlはAIモデルを「計算するためのエンジン」**である。
Whisper.cppで言えば、音声データをテンソルに変換してエンコーダ・デコーダを通す際のすべての数値処理を、ggmlが実際に行っている。
ggufとは何か
一方の gguf は、「Gerganov’s Unified Format(統一フォーマット)」の略称であり、モデルファイルの保存形式である。
Whisper.cppやLLaMA.cppなどで利用されるモデルデータは、かつてはそれぞれ独自の.bin形式(いわゆるggmlフォーマット)で保存されていた。しかしこの形式はメタデータの欠落や互換性の問題を抱えていた。
その問題を解決するために導入されたのが.gguf形式である。
この新しいフォーマットは、モデルの重みだけでなく、トークナイザー、アーキテクチャ設定、量子化情報、語彙、メタデータなどを一括で保持できる。これにより、異なるggml系プロジェクト間でも同一のモデルファイルを共有しやすくなった。
つまり、**ggufはAIモデルの「記憶装置」**であり、ggmlがその記憶を読み取って実際に推論を行う。
両者の関係
両者の関係を一言で表すならば、**ggmlは「実行エンジン」、ggufは「燃料タンク」**である。
モデルを動かす際の典型的な流れは次のとおりである。
- ユーザーが
.ggufファイル(例:ggml-large-v3.gguf)を指定してプログラムを実行する。 - Whisper.cpp などのアプリケーションが ggml を介してこのファイルを読み込み、重みをメモリ上に展開する。
- ggml がバックエンド(CPU、Vulkanなど)を選択して演算を行う。
- 出力結果がテキストや確率分布として返る。
このように、ggufはデータの形式であり、ggmlはそのデータを処理する実体である。
実装思想と影響
Gerganov氏がこれらを分離した理由は、拡張性と移植性の確保にある。
もし計算ロジックとモデルデータ形式が一体化していれば、新しいバックエンド(例:VulkanやOpenVINO)を追加するたびに、モデルファイルの構造まで変更する必要があっただろう。
しかし、ggmlとggufを明確に分けたことで、モデルの互換性を維持したまま最適化や拡張が可能となった。
この設計思想は、ローカルAIコミュニティ全体に大きな影響を与えた。現在では多くのプロジェクトがggmlベースで開発され、gguf形式のモデルが事実上の標準となりつつある。
まとめ
| 項目 | ggml | gguf |
|---|---|---|
| 名称の由来 | Georgi Gerganov’s Machine Learning library | Georgi Gerganov’s Unified Format |
| 種別 | ライブラリ(実行エンジン) | モデルファイル形式 |
| 主な役割 | 計算・推論を実行する | モデルを保存・配布する |
| 関係性 | モデルを動かす側 | モデルを格納する側 |
| 拡張子 | なし(動的ライブラリや実行バイナリ) | .gguf |
| 主な利用例 | whisper.cpp / llama.cpp / stable-diffusion.cpp | 各モデルの配布ファイル |
終わりに
ggmlとggufは単なるツールではなく、ローカルAI時代の基盤的概念である。
それらを設計したGerganov氏の思想は、「シンプルで移植性が高く、誰でも動かせるAI」という方向へオープンソースの潮流を導いた。
WhisperやLLaMAを自分の手元で動かすとき、画面の裏で静かに働いているのが、この二つの仕組みである。