GGMLって?

LLM関連の話題は新しいものが次々出てくるので、キャッチアップしていくのも大変なのだが、llama.cppを試していて、GGMLを使っているけど、これってなんだろう、みたいな…。

GGML自体は機械学習向けCライブラリという感じ。とはいえ、llama.cppとか見ていると、モデルのファイル名に書いていたりもするから、ファイルフォーマット的な雰囲気も感じる。もう少し直感的にわかりやすい説明がないかなと思っていたら、わかりやすい感じでまとめてあった。ChatGPTにまとめてもらうと、

GGMLは、大規模な言語モデルを扱うためのCライブラリで、その名前は開発者Georgi Gerganovのイニシャルから取られています。このライブラリは、低レベルの機械学習プリミティブ(テンソル型など)を定義するとともに、大規模言語モデル(LLM)を配布するためのバイナリ形式も定義しています。このバイナリ形式は、消費者ハードウェア上で大規模言語モデルを実行可能にする「量子化」という技術を利用しています。

GGMLファイルは、指定された形式に従ってレイアウトされたバイナリエンコードデータで構成されています。この形式は、ファイル内に存在するデータの種類、その表現方法、およびその出現順序を指定します。有効なGGMLファイルには最初にGGMLのバージョン番号が存在し、その後に大規模言語モデルを定義する三つのコンポーネント、すなわちモデルのハイパーパラメータ、語彙、および重みが続きます。

GGMLは最先端の技術であり、頻繁に変更が行われます。後方互換性を犠牲にすることなく迅速な開発を支援するため、GGMLはエンコーディングの形式を変更する可能性のある改善を導入するためにバージョニングを使用します。

ハイパーパラメータは、大規模言語モデルの振る舞いを設定するために使用される値を指します。これは、モデルを作成するために使用された訓練プロセスで導出された重みであるモデルのパラメータとは対照的です。各モデルは、そのモデルが受け入れるハイパーパラメータ値を定義する独自のハイパーパラメータ構造を定義します。

モデルの語彙は、モデルが言語(テキスト)を生成するために使用するコンポーネントを含みます。しかし、人間の語彙が単語で構成されているのとは異なり、大規模言語モデルの語彙は「トークン」で構成されています。トークンは一つの単語全体であることもありますが、多くの場合、それらは単語の断片です。

最後に、GGMLファイルの最大のコンポーネントは、ファイルが表現するLLMの重みです。大規模言語モデルは、言語を生成するために使用されるソフトウェアであり、画像を生成するために使用されるソフトウェアがレンダリングできる色の数を増やすことで改善できるのと同様に、大規模言語モデルはモデル内の重みの数を増やすことで改善できます。

量子化とは、モデルを使用するために必要なリソースを減らすために、重みが表現される精度を減らすプロセスを指します。GGMLは、効率とパフォーマンスの間のトレードオフを提供するいくつかの異なる量子化戦略(例えば、4ビット、5ビット、8ビットの量子化)をサポートしています。

GGML – Large Language Models for Everyone の要約

という感じで、GGは人の名前で、Cのライブラリなのだが、このライブラリがハイバーパラメーター、辞書、ウェイトを保持していて、量子化もできる、という感じみたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です