|
| |
|
| |
| 作者 | Georgi Gerganov |
|---|---|
| 開発元 | Georgi Gerganov とコミュニティ |
| 初版 | 2023年3月10日 |
| 最新版 |
v0.5.0
/ 2026年9月23日 |
| リポジトリ |
github |
| プログラミング 言語 | C++、C |
| 種別 | 大規模言語モデル用ライブラリ |
| ライセンス | MIT License |
llama.cppは、MetaのLLaMAモデルのような様々な大規模言語モデルの推論を実行する、オープンソースのソフトウェアライブラリである。汎用的なテンソルライブラリであるGGMLプロジェクトと並行して共同開発されている。
ライブラリにはコマンドラインツールが含まれており、シンプルな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拡張命令を利用している。
llama.cppは、エッジデバイスでの推論を目的とした様々な機能をサポートしている。
さらに、llama.cppはフロントエンド通信のための様々な機能とAPIをサポートしている。
v1/chat/completionsなどのOpenAI互換エンドポイント。|
| |
| 拡張子 |
.gguf |
|---|---|
| マジック ナンバー |
0x46 0x47 0x55 |
| 開発者 | Georgi Gerganov とコミュニティ |
| 初版 | 2023年8月22日 |
| 最新版 |
v3 |
| 種別 | 機械学習テンソル |
GGUF(GGML 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など、多くの大規模言語モデルをサポートしている。