llama.cppでGGUF形式のモデルファイルを読み込み、チャットする
はじめに
この記事では、llama.cppを使ってGGUF形式のモデルファイルを読み込み、チャットする方法を簡単に説明します。
GGUFは、モデルファイルの保存形式のひとつです。GGUFに限らず、llama.cppが対応しているモデル形式なら、同様に使えると思います。
環境
OSはWindows 10/11、CUDAがインストールされていることを前提とします。
llama.cppのインストール
まず、llama.cppのリリースページから、最新のリリース中の llama-b????-bin-win-cuda-cu12.4-x64.zip をダウンロードします。????はリリース番号です。インストールされているCUDAが12.xの場合は12.xを、11.xの場合は11.xを選択します。
ダウンロードしたzipファイルを解凍し、適当な場所に配置します。例えば、C:\llama に配置した場合、C:\llama\llama-server.exe が存在することを確認します。
起動時にCUDA関連のエラーが出た場合、同じページの cudart-llama-bin-win-cu12.x-x64.zip (または 11.x)をダウンロードし、解凍したファイルを、llama.cppの配置先と同じディレクトリにコピーすると動くと思います。
GGUF形式のモデルファイルの準備
HuggingFace等からGGUF形式のモデルファイルをダウンロードします。
ファイル名にはIQ3やQ4などの文字列が含まれている場合、それが量子化のビット数を表しています。IQ3は3ビット、Q4は4ビットの意味です。また Iが含まれていると、iMatrix量子化を示します。
ざっくりいうと、数字が大きい方が性能が良く、同じ数字ならIが付いている方が性能が良いようです。個人的な印象では、Q4_K_Mくらいまではそれなりの性能が期待できますが、それより小さくなるとだんだんと性能が落ちていきます。
GPUのVRAMサイズに収まらないサイズのモデルでは推論速度が遅くなるため、基本的には合計のファイルサイズが「VRAMサイズ x 0.9 - 1.0」GBくらいのものを選ぶと良いでしょう。
モデルファイルが複数に分割されている場合、00001-of-00002などのように番号が付いていることがあります。その場合は、すべてのファイルをダウンロードしてください。
モデルファイルの例
たとえば話題のDeepSeek-R1-Distillの場合、momongaさんの量子化されたバージョンを使わせていただきます。
VRAMサイズに応じたお勧めは、たとえば以下のようになります。
(コンテキスト長を長めに設定できるようやや小さめにしています。コンテキスト長を短くするか、一部をCPUで処理すると、もう少し大きめのモデルが使えます。)
| VRAMサイズ | お勧めのモデル | お勧めの量子化 |
| --- | --- | --- |
| 8GB | DeepSeek-R1-Distill-Qwen-7B-gguf | Q6_K |
| 12GB | DeepSeek-R1-Distill-Qwen-14B-gguf | Q4_K_M |
| 16GB | DeepSeek-R1-Distill-Qwen-14B-gguf | Q6_K |
| 24GB | DeepSeek-R1-Distill-Qwen-32B-gguf | Q4_K_M |
任意のモデルファイルをダウンロードし、適当な場所に配置します。
DeepSeek-R1-Distill に限らず、他のモデルも基本的には同様に使用できます。
llama.cppのサーバの起動
コマンドプロンプトを開き、たとえば以下のコマンドを実行します。
C:\llama\llama-server -m GGUFファイルのパス-00001-of-00002.gguf -c 16384 -ngl 100 --no-mmap --cache-type-k q8_0 --cache-type-v q8_0 --flash-attn
起動時にファイヤーウォールの許可を求められる場合がありますので、確認のうえ、適切に許可してください。
オプションについては以下の通りです。
-m : GGUFファイルのパスを指定します。複数のファイルがある場合は、00001のファイルを指定します。00002以降は自動的に読み込まれます。
-c : コンテキスト長を指定します。16384は16KBです。コンテキスト長を長くすると、より長い文章を生成できますが、VRAM使用量が増えます。後述の -ngl を減らしても、コンテキストだけはVRAMに確保されますので注意してください。
-ngl : LLMのモデルの層のうち、GPUに転送する層の数を指定します。100は100層です。起動時に load_tensors: offloaded 49/49 layers to GPU のように、GPUに転送された層の数と、モデルの層数が表示されますので、転送する層を減らす場合にはモデルの層数を参考にしてください。
--no-mmap : メモリマップを無効にします。メモリマップを無効にすると、メインメモリの使用量が減ります。(詳細は不明なのでllama.cppのドキュメントを参照してください。)
--cache-type-k : コンテキストを量子化してコンテキスト長を長くしたときのメモリ使用量を抑えます。q8_0は8ビットの量子化されたキャッシュです。q8程度の量子化なら、ほとんど性能は落ちないようです。
--cache-type-v : 同上。
--flash-attn : Flash Attentionを有効にして高速化します。キャッシュの量子化には必須です。モデルによってはFlash Attentionに対応していない場合があります。
その他、以下のオプションを必要に応じて指定してください。
--host : listenするホストを指定します。デフォルトは127.0.0.1です。この場合はブラウザから http://127.0.0.1:8080 または http://localhost:8080 でアクセスできます。0.0.0.0を指定すると、LAN内の他のPCからアクセスできます。
--port : listenするポートを指定します。デフォルトは8080です。
ブラウザでチャットする
ブラウザを開き、http://127.0.0.1:8080 または--hostと--portで指定したURLにアクセスします。
右上の歯車アイコンから設定が開けます。DeepSeek-R1-Distillの場合、公式のモデルページによるとtemperatureは0.5~0.7が推奨とのことですので、それに合わせて設定してください(デフォルトは0.8になっています)。
