結局 llama.cpp とは何者なのか?
裏側を知らずとも README 通りにやれば Mac でも LLM 動かせる優れモノだが改めて llama.cpp とは何者なのか。
GGML は C/C++ における PyTorch
llama.cpp を理解する上で、まず GGML を知る必要がある。
GGML は llama.cpp 作者ジョージ・ゲルガノフが作った機械学習ライブラリで C/C++ における PyTorch に対応するライブラリと言って良いはず。C/C++ でモデルを組むことができる。llama.cpp は GGML で書かれている。
この「GGML = PyTorch」のざっくりとしたイメージが llama.cpp 理解に役立つ。
① llama.cpp の始まり
llama.cpp の 説明文:
から分かる通り、llama.cpp は Python で書かれた LLaMA を GGML(C/C++)で「書き直す」プロジェクトとして始まった(ref)。
Port of … の「Port」すなわちポーティングは「別の言語で書き直す」ことを表す。
PyTorch で書かれた LLaMA を GGML(C/C++)で書き直すため、オリジナル実装では未対応の機能、例えば Mac の GPU 対応(Metal)や CPU の最適化が可能となる。
コチラに llama.cpp の初期段階に書かれた実装があるが、イメージとして:
オリジナル実装の重みを GGML のファイルフォーマットに変換
重みを割り当てるモデルを GGML ライブラリで実装
斜め読みした感じ、ざっくりと上記のような構成になっている様子。
GGML を使って様々な LLaMA アーキテクチャのポーティングが実装されていった。
② GGUF の登場
GGUF は GGML ライブラリにおけるモデルの出力ファイル形式である(.pth 等がイメージとして近い)。
当初はライブラリ名と同じ GGML がファイル形式の名称だったが、GGML ライブラリの進化に合わせ 2023 年 8 月に生まれたのが GGUF。
ファイルフォーマットとしての表現力が向上した他 LLaMA 以外のモデルもサポート可能に。
③ LLM のランタイムとして
(PyTorch が torch.load() でモデルを読み込み実行できるのと似たイメージで)HuggingFace 等にアップされた学習済みモデルを GGUF に変換し 、llama.cpp で読み込み動かすことが可能になった。
GGUF への変換ツール自体も当初から公式が用意している。
つまり(GGUF 化した)LLM のランタイムとしての利用も増えている。
ONNXランタイムみたいな役割。
しかも Mac を始め様々なアーキテクチャ上で動くのでとても良い。
まとめ
ジョージ・ゲルガノフが GGML を作った(ggml.ai)
GGML の応用アプリとして llama.cpp を作った
当初は LLaMA のポーティングに過ぎなかった
様々な LLM を様々なアーキテクチャで動かすプロジェクトに発展した
みたいなのが歴史観だろうか。ジョージ・ゲルガノフすごい。
(調べつつまとめたので詳しい方マサカリお待ちしております)
余談:「GG」とは?
GGML や GGUF のプレフィクス「GG」は作者(ジョージ・ゲルガノフ)のイニシャル。
余談:llama.cpp の実装に踏み込む
GGML で llama.cpp がどのように実装されているか、コード詳細は下記のブログに詳しい。