# llama.cpp

[llama.cpp](https://github.com/ggml-org/llama.cpp)は、大規模言語モデルをローカルにデプロイするためのC/C++製推論エンジンです。軽量であり、Python、CUDA、その他の重いサーバーインフラストラクチャを必要としません。llama.cppは[GGUF](https://huggingface.co/blog/ngxson/common-ai-model-formats#gguf)ファイル形式を使用しています。GGUFは、量子化されたモデルの重みとメモリマッピングをサポートしており、デバイスのメモリ帯域幅を削減できます。

> [!TIP]
> GGUF形式で利用可能なモデルを[Hub](https://huggingface.co/models?apps=llama.cpp&sort=trending)で検索できます。

[convert_hf_to_gguf.py](https://github.com/ggml-org/llama.cpp/blob/master/convert_hf_to_gguf.py) スクリプトを使用して、任意の Transformers モデルを GGUF 形式に変換できます。

```bash
python3 convert_hf_to_gguf.py ./models/openai/gpt-oss-20b \
  --outfile gpt-oss-20b.gguf \
```

[llama-cli](https://github.com/ggml-org/llama.cpp/tree/master#llama-cli) を使用してコマンドラインからモデルをローカルにデプロイするか、[llama-server](https://github.com/ggml-org/llama.cpp/tree/master#llama-server) を使用して Web UI を起動します。モデルが Hub からのものであることを示すために、`-hf` フラグを追加します。

```bash
llama-cli -hf ggml-org/gpt-oss-20b-GGUF
```

```bash
llama-server -hf ggml-org/gpt-oss-20b-GGUF
```

## Transformers の統合

1. [AutoConfig.from_pretrained()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoConfig.from_pretrained) は、モデルの `config.json` ファイルを読み込み、メタデータを抽出します。
2. [AutoTokenizer.from_pretrained()](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer.from_pretrained) は、語彙とトークナイザーの設定を抽出します。
3. 設定内の`architectures`フィールドに基づいて、スクリプトは内部レジストリからコンバータークラスを選択します。このレジストリは、Transformersのアーキテクチャ名（[LlamaForCausalLM](/docs/transformers/main/ja/model_doc/llama2#transformers.LlamaForCausalLM)など）を、対応するコンバータークラスにマッピングします。
4. コンバーターは、Transformers のテンソル名（例: `model.layers.0.self_attn.q_proj.weight`）を GGUF のテンソル名にマッピングし、テンソルの変換と語彙のパッケージングを行います。
5. 出力は、モデルの重み、トークナイザー、メタデータを含む単一のGGUFファイルです。

## リソース

- [llama.cpp](https://github.com/ggml-org/llama.cpp)のドキュメント
- [ggml 入門](https://huggingface.co/blog/introduction-to-ggml)ブログ記事

