Deepseek V3 0324 GGUF
モデル概要
モデル特徴
モデル能力
使用事例
---
quantized_by: ubergarm
pipeline_tag: text-generation
base_model: deepseek-ai/DeepSeek-V3-0324
license: mit
base_model_relation: quantized
tags:
- mla
- imatrix
- deepseek_v3
- conversational
- ik_llama.cpp
---
## `ik_llama.cpp` imatrix MLA Quantizations of DeepSeek-V3-0324
この量子化コレクションは、高度な非線形SotA量子化とMulti-Head Latent Attention(MLA)をサポートする[ik_llama.cpp](https://github.com/ikawrakow/ik_llama.cpp/)フォークを**必要とします**。これらの大きなファイルをダウンロードしても、メインラインのバニラllama.cpp、ollama、LM Studio、KoboldCppなどでは動作しないので注意してください!
これらの量子化は、与えられたメモリフットプリントに対してクラス最高のパープレキシティを提供します。MLAサポートにより、`R1`と`V3`で24GB未満のGPU VRAMで32k以上のコンテキスト長が可能になり、MoEレイヤーをRAMにオフロードできます。
これらの量子化は、24-48GBのVRAMを持つCPU+GPUシステム、および動的量子化再パッキングを使用したCPU*のみ*のシステム(最大メモリスループットのため)に特に設計されています。より多くのVRAMがある場合は、GPUオフロード用に最適化されたルーティングされたエキスパートレイヤーを持つ少なくともいくつかの量子化を検討することをお勧めします。
既存の量子化で`ik_llama.cpp`をすぐに試すことができます。起動時にMLAテンソルを計算し、量子化を動的に再パックします(モデル全体を収容するのに十分なRAM+VRAMがある場合)。違いを確認したら、ここにあるこれらの高品質な量子化をチェックしてください。
## 謝辞
Wendellと**Level1Techs**クルー、コミュニティ[フォーラム](https://forum.level1techs.com/t/deepseek-deep-dive-r1-at-home/225826)、[YouTubeチャンネル](https://www.youtube.com/@Level1Techs)に感謝します!これらの実験を実行し、これらの素晴らしい量子化をコミュニティに提供するための**大きなハードウェア**の専門知識とアクセスを提供してくれたことに**大感謝**です!!!
また、`r/LocalLLaMA`の量子化と推論コミュニティの皆さんにも感謝します。皆さんが互いに助け合い、新しいモデルを実行するためのヒントやトリックを共有してくれました。
一緒に学び、共有できることを楽しみにしています。ありがとうございます!
## 量子化コレクション
これまでに、さまざまなCPU+GPUまたはCPU*のみ*のシステムに適した、GiBモデルあたりの最低パープレキシティを提供する最良のレシピです。
#### `IQ4_K_R4` 4.936 BPW
特別なミックス`IQ5_K_R4`/`IQ4_K_R4`ルーティングエキスパートと、他のすべてのレイヤーはCPU+GPUオフロード用の完全な`q8_0`、または最大速度のCPU*のみ*システム用の`--run-time-repack`。
384+ GB RAMと24GB+ GPUを搭載した大きなシステムに最適です。
#### `IQ2_K_R4` 2.889 BPW
特別なミックス`IQ3_K_R4`/`IQ2_K_R4`ルーティングエキスパートと、他のすべてのレイヤーはCPU+GPUオフロード用の完全な`q8_0`、または最大速度のCPU*のみ*システム用の`--run-time-repack`。
CPU+GPU「トロールリグ」ハイエンドゲーマーシステム(例:9950X 96 GB RAM + 3090TI 24 GB VRAM + Gen 5 NVMe SSD)に最適です。
#### カスタムミックス
複数のGPUで48GB以上のVRAMがある場合は、カスタム`-ot`式を使用して、ハードウェアに合わせてサイズとパフォーマンスを最適化する独自のカスタム量子化を作成することを検討してください。VRAMが少ない場合は、非ルーティングエキスパートレイヤーをより軽量化するか、24GB VRAMで64k以上のコンテキストを取得できます。また、`mmap()`を有効にしたままCPUのみで実行したい場合は、オフライン再パックツールを使用できます。
## クイックスタート
#### GPU+CPU用の`ik_llama.cpp` APIサーバー
```bash
# 24GB未満のVRAMで32kコンテキストを収容
# オプションの`-ser 6,1`は品質に最小限のコストで速度を向上させます
CUDA_VISIBLE_DEVICES="0," \
./build/bin/llama-server \
--model /mnt/raid/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324-IQ2_K_R4.gguf \
--alias ubergarm/DeepSeek-R1-V3-0324-IQ2_K_R4 \
--ctx-size 32768 \
-ctk q8_0 \
-mla 2 -fa \
-amb 512 \
-fmoe \
--temp 0.3 \
--min-p 0.05 \
--n-gpu-layers 63 \
--override-tensor exps=CPU \
--parallel 1 \
--threads 16 \
--host 127.0.0.1 \
--port 8080
CPUのみ用のik_llama.cpp
APIサーバー
# 現在の目標は、単一のNUMAノードで可能な限り多くのRAM帯域幅を使用することです(例:AMD EpycでBIOS `NPS0`またはIntel Xeonの単一ソケットでBIOS `SNC=Disable`)
# トークン生成用に`--threads`、プロンプト処理(プリフィル)用に`--threads-batch`を調整します
# `--run-time-repack`は、モデル重み用に十分なRAMを事前に割り当て、ディスクから`mmap()`しません
# [gitリポジトリ](https://github.com/ikawrakow/ik_llama.cpp/pull/278#issuecomment-2746381515)で、明示的および透過的なHuge Pagesのオプションとチューニングの議論があります
numactl -N 0 -m 0 \
./build/bin/llama-server \
--model /mnt/ai/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324-IQ4_K_R4.gguf \
--alias ubergarm/DeepSeek-V3-0324-IQ4_K_R4 \
--run-time-repack \
--ctx-size 65536 \
-ctk q8_0 \
-mla 3 -fa \
-amb 512 \
-fmoe \
--temp 0.3 \
--min-p 0.05 \
--parallel 1 \
--threads 88 \
--threads-batch 128 \
--numa numactl \
--host 127.0.0.1 \
--port 8080
量子化比較
これらの量子化は、V3-0324
のこのサイズクラスで利用可能な最良の量子化の一つです!
ubergarmは、トークン埋め込み、注意、密なレイヤー、または共有エキスパートの品質を犠牲にしていません。これは、ik_llama.cpp
のMLA実装がGPU VRAMを大幅に節約し、24GB未満のVRAMで32kコンテキストを可能にしたためです。また、これらの量子化は、さまざまなコーディングサンプルと複数の言語を含む新しい高品質のimatrixを使用しています。ルーティングされたエキスパートレイヤーは、GiBあたりの最良のパープレキシティを提供するために、SotA CPU IQx_K_R4
非線形量子化も利用しています。IQ2_K_R4
とIQ4_K_R4
はどちらも、GPU VRAMにオフロードされる約17.33GiBの重みと、コンテキスト用の残りのVRAMを利用するように設計されています。
bartowskiは、完全なトークン埋め込み品質を使用していますが、注意、密なレイヤー、および共有エキスパートの量子化は低くなっています。彼は、この量子化と測定誤差の範囲内でパープレキシティ性能を提供する良い品質のimatrixを使用しています。更新:また、サイズに対して改善されたパープレキシティを持つbartowskiの新しいカスタマイズされた"V2"フレーバーレシピもチェックしてください!以下の表は彼のオリジナルフレーバーの量子化です。
unslothは、トークン埋め込みを犠牲にし、中品質の注意と密なレイヤーを使用していますが、重要性マトリックスはありません。
mradermacherのモデルカードサイドバーは表示されていないため、正確なレシピを比較するのがより困難でした。彼らのチームは、ここで詳細を提供するためにいくつかのコマンドを実行してくれました。
比較の詳細
~Q2クラスの量子化の詳細な比較
ubergarm/DeepSeek-V3-0324-IQ2_K_R4 | bartowski/DeepSeek-V3-0324-Q2_K_L | unsloth/DeepSeek-V3-0324-UD-Q2_K_XL | mradermacher/DeepSeek-V3-0324-i1-GGUF-Q2_K | |
---|---|---|---|---|
概要 | "V1" | |||
split.tensors.count |
1147 | 1025 | 1025 | |
token_embd.weight |
Q8_0 |
Q8_0 |
Q4_K |
IQ3_S |
output.weight |
Q5_K |
|||
ファイルサイズ (GiB) | 227 | 228 | 231 | |
Multi-Head Latent Attention | ||||
blk.*.attn_kv_b.weight |
Q8_0 |
n/a | n/a | n/a |
blk.*.attn_k_b.weight |
Q8_0 |
n/a | n/a | n/a |
blk.*.attn_v_b.weight |
Q8_0 |
n/a | n/a | n/a |
密なレイヤー | ||||
blk.[0-2].attn_kv_a_mqa.weight |
Q8_0 |
Q2_K |
Q6_K |
IQ2_XS |
blk.[0-2].attn_kv_a_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[0-2].attn_kv_b.weight |
Q8_0 |
Q2_K |
Q6_K |
IQ2_XS |
blk.[0-2].attn_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[0-2].attn_q_a.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[0-2].attn_q_a_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[0-2].attn_q_b.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[0-2].ffn_down.weight |
Q8_0 |
Q3_K |
Q6_K |
IQ3_S |
blk.[0-2].ffn_gate.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[0-2].ffn_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[0-2].ffn_up.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[0-2].attn_output.weight |
Q8_0 |
Q3_K |
Q4_K |
IQ3_S |
共有およびルーティングされたMoEレイヤー | ||||
blk.[3-60].attn_kv_a_mqa.weight |
Q8_0 |
Q2_K |
Q6_K |
IQ2_XS |
blk.[3-60].attn_kv_a_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[3-60].attn_kv_b.weight |
Q8_0 |
Q2_K |
Q6_K |
IQ2_XS |
blk.[3-60].attn_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[3-60].attn_q_a.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[3-60].attn_q_a_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[3-60].attn_q_b.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[3-60].exp_probs_b.bias |
F32 |
F32 |
F32 |
F32 |
blk.[3-60].ffn_down_exps.weight |
IQ3_K_R4 |
Q3_K |
Q3_K |
IQ3_S |
blk.[3-60].ffn_down_shexp.weight |
Q8_0 |
Q3_K |
Q6_K |
IQ3_S |
blk.[3-60].ffn_gate_exps.weight |
IQ2_K_R4 |
Q2_K |
Q2_K |
IQ2_XS |
blk.[3-60].ffn_gate_inp.weight |
F32 |
F32 |
F32 |
F32 |
blk.[3-60].ffn_gate_shexp.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[3-60].ffn_norm.weight |
F32 |
F32 |
F32 |
F32 |
blk.[3-60].ffn_up_exps.weight |
IQ2_K_R4 |
Q2_K |
Q2_K |
IQ2_XS |
blk.[3-60].ffn_up_shexp.weight |
Q8_0 |
Q2_K |
Q4_K |
IQ2_XS |
blk.[3-60].attn_output.weight |
Q8_0 |
Q3_K |
Q4_K |
IQ3_S |
重要性マトリックスとパープレキシティ | ||||
imatrix.dataset |
calibration_data_v5_rc.txt |
calibration_datav3.txt |
none | imatrix-training-full-3 |
最終PPL (wiki.test.raw) | 3.5614 +/- 0.02001 | 3.9012 (V1) | ? | ? |
参考までに、Q8_0
は同じwiki.test.raw
ファイルでPPL = 3.3482 +/- 0.01847
を達成しています。
imatrix
重要性マトリックスの詳細はこちら
# デュアルIntel Xeon 6980Pの単一ソケットでCPU*のみ*で実行
numactl -N 0 -m 0 \
./build/bin/llama-imatrix \
--verbosity 1 \
-m /mnt/ai/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324-Q8_0.gguf \
-f calibration_data_v5_rc.txt \
-o DeepSeek-V3-0324.imatrix \
--ctx-size 512 \
--numa numactl \
--threads 128
.
.
.
compute_imatrix: バッチサイズ512で213チャンクを計算中
compute_imatrix: パスあたり41.77秒 - ETA 2時間28.28分
[1]60.9029,[2]10.8011,[3]5.8709,[4]3.7872,[5]2.9688,[6]2.5088,[7]2.2214,[8]2.0224,[9]1.9110,
save_imatrix: エントリ ' blk.60.ffn_down_exps.weight' には部分的なデータ(99.61%)があります。256エキスパートのうち1つがデータを欠いています。保存しますが注意してください
save_imatrix: エントリ ' blk.60.ffn_gate_exps.weight' には部分的なデータ(99.61%)があります。256エキスパートのうち1つがデータを欠いています。保存しますが注意してください
save_imatrix: エントリ ' blk.60.ffn_up_exps.weight' には部分的なデータ(99.61%)があります。256エキスパートのうち1つがデータを欠いています。保存しますが注意してください
save_imatrix: 10チャンク後に収集されたデータを/mnt/ai/models/ubergarm/DeepSeek-V3-0324-GGUF/imatrix-ubergarm-DeepSeek-V3-0324-ik_llamacpp-2089147a.datに保存しました
.
.
.
llama_print_timings: ロード時間 = 42726.11 ms
llama_print_timings: サンプル時間 = 0.00 ms / 1 実行 ( 0.00 ms トークンあたり, inf トークン/秒)
llama_print_timings: プロンプト評価時間 = 7125661.28 ms / 109056 トークン ( 65.34 ms トークンあたり, 15.30 トークン/秒)
llama_print_timings: 評価時間 = 0.00 ms / 1 実行 ( 0.00 ms トークンあたり, inf トークン/秒)
llama_print_timings: 合計時間 = 7201368.59 ms / 109057 トークン
最終推定: PPL = 3.4755 +/- 0.03305
量子化クッカーの秘密のレシピ
秘密のレシピ
#!/usr/bin/env bash
custom="
# トークン埋め込み(GPU)
# 注意:テンソルサイズのため、再パックタイプにできません
token_embd\.weight=q8_0
# 出力テンソル(GPU)
output\.weight=q8_0
output_norm\.weight=q8_0
# 最初の3つの密なレイヤー(0-3)(GPU)
blk\.[0-2]\..*=q8_0
# MoEレイヤー(3-60)のすべての注意、重み、バイアステンソル(GPU)
# 注意:attn_k_b.weightはk-、i-、またはiqk-量子化にできません。行サイズが128です
blk\.[3-9]\.attn_.*=q8_0
blk\.[1-5][0-9]\.attn_.*=q8_0
blk\.60\.attn_.*=q8_0
blk\.[3-9]\.ffn_norm\.weight=q8_0
blk\.[1-5][0-9]\.ffn_norm\.weight=q8_0
blk\.60\.ffn_norm\.weight=q8_0
blk\.[3-9]\.exp_probs_b\.bias=q8_0
blk\.[1-5][0-9]\.exp_probs_b\.bias=q8_0
blk\.60\.exp_probs_b\.bias=q8_0
# 共有エキスパート(3-60)(GPU)
blk\.[3-9]\.ffn_down_shexp\.weight=q8_0
blk\.[1-5][0-9]\.ffn_down_shexp\.weight=q8_0
blk\.60\.ffn_down_shexp\.weight=q8_0
blk\.[3-9]\.ffn_(gate|up)_shexp\.weight=q8_0
blk\.[1-5][0-9]\.ffn_(gate|up)_shexp\.weight=q8_0
blk\.60\.ffn_(gate|up)_shexp\.weight=q8_0
# ルーティングされたエキスパート(3-60)(CPU)
# 注意:従来の知恵では、初期のレイヤーはより高い量子化を使用することを示唆しています
blk\.[3-9]\.ffn_down_exps\.weight=iq3_k_r4
blk\.[1-5][0-9]\.ffn_down_exps\.weight=iq3_k_r4
blk\.60\.ffn_down_exps\.weight=iq3_k_r4
blk\.[3-9]\.ffn_(gate|up)_exps\.weight=iq2_k_r4
blk\.[1-5][0-9]\.ffn_(gate|up)_exps\.weight=iq2_k_r4
blk\.60\.ffn_(gate|up)_exps\.weight=iq2_k_r4
"
custom=$(
echo "$custom" | grep -v '^#' | \
sed -Ez 's:\n+:,:g;s:,$::;s:^,::'
)
./build/bin/llama-quantize \
--imatrix /mnt/raid/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324.imatrix \
--token-embedding-type q8_0 \
--output-tensor-type q8_0 \
--custom-q "$custom" \
/mnt/raid/models/deepseek-ai/DeepSeek-V3-0324-bf16-GGUF/DeepSeek-256x21B-V3-0324-BF16-00001-of-00030.gguf \
/mnt/raid/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324-IQ2_K_R4.gguf \
IQ2_K_R4 \
24
パープレキシティ
パープレキシティログ
$ CUDA_VISIBLE_DEVICES="0," \
./build/bin/llama-perplexity \
--model /mnt/raid/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324-IQ2_K_R4.gguf \
-ctk q8_0 \
-mla 2 -fa \
-amb 512 \
-fmoe \
--ctx-size 512 \
--ubatch-size 512 \
-f wiki.test.raw \
--seed 1337 \
--n-gpu-layers 63 \
--override-tensor exps=CPU \
--threads 24
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no
ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
ggml_cuda_init: found 1 CUDA devices:
Device 0: NVIDIA RTX A6000, compute capability 8.6, VMM: yes
main: build = 3614 (b9c25fe7)
main: built with cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 for x86_64-linux-gnu
main: seed = 1337
llama_model_loader: loaded meta data with 50 key-value pairs and 1147 tensors from /mnt/raid/models/ubergarm/DeepSeek-V3-0324-GGUF/DeepSeek-V3-0324-IQ2_K_R4.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv 0: general.architecture str = deepseek2
llama_model_loader: - kv 1: general.type str = model
llama_model_loader: - kv 2: general.name str = DeepSeek V3 0324
llama_model_loader: - kv 3: general.version str = V3-0324
llama_model_loader: - kv 4: general.basename str = DeepSeek
llama_model_loader: - kv 5: general.size_label str = 256x21B
llama_model_loader: - kv 6: general.license str = mit
llama_model_loader: - kv 7: deepseek2.block_count u32 = 61
llama_model_loader: - kv 8: deepseek2.context_length u32 = 163840
llama_model_loader: - kv 9: deepseek2.embedding_length u32 = 7168
llama_model_loader: - kv 10: deepseek2.feed_forward_length u32 = 18432
llama_model_loader: - kv 11: deepseek2.attention.head_count u32 = 128
llama_model_loader: - kv 12: deepseek2.attention.head_count_kv u32 = 128
llama_model_loader: - kv 13: deepseek2.rope.freq_base f32 = 10000.000000
llama_model_loader: - kv 14: deepseek2.attention.layer_norm_rms_epsilon f32 = 0.000001
llama_model_loader: - kv 15: deepseek2.expert_used_count u32 = 8
llama_model_loader: - kv 16: general.file_type u32 = 338
llama_model_loader: - kv 17: deepseek2.leading_dense_block_count u32 = 3
llama_model_loader: - kv 18: deepseek2.vocab_size u32 = 129280
llama_model_loader: - kv 19: deepseek2.attention.q_lora_rank u32 = 1536
llama_model_loader: - kv 20: deepseek2.attention.kv_lora_rank u32 = 512
llama_model_loader: - kv 21: deepseek2.attention.key_length u32 = 192
llama_model_loader: - kv 22: deepseek2.attention.value_length u32 = 128
llama_model_loader: - kv 23: deepseek2.expert_feed_forward_length u32 = 2048
llama_model_loader: - kv 24: deepseek2.expert_count u32 = 256
llama_model_loader: - kv 25: deepseek2.expert_shared_count u32 = 1
llama_model_loader: - kv 26: deepseek2.expert_weights_scale f32 = 2.500000
llama_model_loader: - kv 27: deepseek2.expert_weights_norm bool = true
llama_model_loader: - kv 28: deepseek2.expert_gating_func u32 = 2
llama_model_loader: - kv 29: deepseek2.rope.dimension_count u32 = 64
llama_model_loader: - kv 30: deepseek2.rope.scaling.type str = yarn
llama_model_loader: - kv 31: deepseek2.rope.scaling.factor f32 = 40.000000
llama_model_loader: - kv 32: deepseek2.rope.scaling.original_context_length u32 = 4096
llama_model_loader: - kv 33: deepseek2.rope.scaling.yarn_log_multiplier f32 = 0.100000
llama_model_loader: - kv 34: tokenizer.ggml.model str = gpt2
llama_model_loader: - kv 35: tokenizer.ggml.pre str = deepseek-v3
llama_model_loader: - kv 36: tokenizer.ggml.tokens arr[str,129280] = ["
llama_model_loader: - kv 37: tokenizer.ggml.token_type arr[i32,129280] = [3
llama_model_loader: - kv 38: tokenizer.ggml.merges arr[str,127741] = ["
llama_model_loader: - kv 39: tokenizer.ggml.bos_token_id u32 = 0
llama_model_loader: - kv 40: tokenizer.ggml.eos_token_id u32 = 1
llama_model_loader: - kv 41: tokenizer.ggml.padding_token_id u32 = 1
llama_model_loader: - kv 42: tokenizer.ggml.add_bos_token bool = true
llama_model_loader: - kv 43: tokenizer.ggml.add_eos_token bool = false
llama_model_loader: - kv 44: tokenizer.chat_template str = {% if not add_generation_prompt is de...
llama_model_loader: - kv 45: general.quantization_version u32 = 2
llama_model_loader: - kv 46: quantize.imatrix.file str = /mnt/raid/models/ubergarm/DeepSeek-V3...
llama_model_loader: - kv 47: quantize.imatrix.dataset str = calibration_data_v5_rc.txt
llama_model_loader: - kv 48: quantize.imatrix.entries_count i32 = 720
llama_model_loader: - kv 49: quantize.imatrix.chunks_count i32 = 213
llama_model_loader: - type f32: 361 tensors
llama_model_loader: - type q8_0: 612 tensors
llama_model_loader: - type iq2_k_r4: 116 tensors
llama_model_loader: - type iq3_k_r4: 58 tensors
llm_load_vocab: special tokens cache size = 818
llm_load_vocab: token to piece cache size = 0.8223 MB
llm_load_print_meta: format = GGUF V3 (latest)
llm_load_print_meta: arch = deepseek2
llm_load_print_meta:



