🚀 ik_llama.cpp
によるQwen/Qwen3-235B-A22Bのimatrix量子化
この量子化コレクションは、高度な非線形の最先端量子化をサポートするために、ik_llama.cppのフォークが必須です。これらの大きなファイルをダウンロードして、メインラインのバニラllama.cpp、ollama、LM Studio、KoboldCppなどで実行できると期待しないでください!
これらの量子化は、与えられたメモリ使用量で最高の品質を提供します。
大きな感謝
WendellとLevel1Techsのチーム、コミュニティのフォーラム、YouTubeチャンネルに感謝します! これらの実験を実行し、これらの素晴らしい量子化をコミュニティに提供するための大規模なハードウェアの専門知識とアクセスを提供してくれたことに大きな感謝です!
また、こことr/LocalLLaMA
の量子化と推論のコミュニティの皆さんにも、新しい面白いモデルを実行するためのアドバイスを共有し合ってくれたことに感謝します!
一緒に共有し、学ぶことを楽しみにしています。ありがとう!
📦 インストール
このセクションでは、量子化モデルのインストールに関する情報は提供されていません。
量子化コレクション
これまでのところ、これらは良好なメモリ使用量のブレークポイントで高品質を提供する私の最良のレシピです。
ubergarm/Qwen3-235B-A22B-mix-IQ3_K.gguf
この量子化は、約110GiB (V)RAMの組み合わせで最大速度で実行するように設計されています。例えば、24GB VRAM + 96GB RAM(2x48GiB DDR5 DIMMを搭載したAM5またはLGA 1700のゲーマーPCで最高のパフォーマンスを発揮)。これにより、最大のCPUスループットを得るための-rtr
ランタイム再パッキングが可能になります。-rtr
を省略して、デフォルトのmmap()
動作を使用して、速度を犠牲にして少ないRAMで実行することもできます。また、「オフライン再パッキング」を行って、正確な設定に合わせることができ、mmap()
による迅速な起動と最大のCPUスループットの両方の恩恵を受けることができます。ただし、トランスペアレントヒュージページ(THP)の設定方法とPCのパフォーマンスによっては、--no-mmap
を使用する必要がある場合もあります。
106.830 GiB (3.903 BPW)
f32: 471 tensors
q8_0: 2 tensors
iq3_k: 188 tensors
iq4_k: 94 tensors
iq6_k: 376 tensors
最終推定値: PPL = 5.4403 +/- 0.03421 (wiki.test.raw, Q8_0の5.3141 +/- 0.03321と比較) (*TODO*: さらなるベンチマーク)
🚀 クイックスタート
ik_llama.cpp
APIサーバーによるハイブリッドGPU+CPU推論
./build/bin/llama-server
--model ubergarm/Qwen3-235B-A22B-GGUF/Qwen3-235B-A22B-mix-IQ3_K-00001-of-00003.gguf \
--alias ubergarm/Qwen3-235B-A22B-mix-IQ3_K \
-fa \
-ctk q8_0 -ctv q8_0 \
-c 32768 \
-fmoe \
-amb 512 \
-rtr \
-ot blk\.1[2-9]\.ffn.*=CPU \
-ot blk\.[2-8][0-9]\.ffn.*=CPU \
-ot blk\.9[0-3]\.ffn.*=CPU \
-ngl 99 \
--threads 16
--host 127.0.0.1 \
--port 8080
もっと多くのコンテキストを使用したい場合や、VRAM使用量を減らしたい場合は、以下を試すことができます。
- より小さなKVキャッシュ量子化
-ctk q4_0 -ctv q4_0
モデルアーキテクチャ
元のモデルアーキテクチャは、94の繰り返しレイヤー/ブロックを持ち、量子化されていないbf16
バージョンの合計サイズは448501.04 MB
です。
テンソル |
次元 |
データ型 |
サイズ |
token_embd.weight |
[ 4096, 151936, 1, 1] |
bf16 |
1187.00 MiB |
|
|
|
|
blk.1.attn_k_norm.weight |
[ 128, 1, 1, 1] |
f32 |
0.000 MiB |
blk.1.attn_q_norm.weight |
[ 128, 1, 1, 1] |
f32 |
0.000 MiB |
blk.1.attn_norm.weight |
[ 4096, 1, 1, 1] |
f32 |
0.016 MiB |
blk.1.ffn_gate_inp.weight |
[ 4096, 128, 1, 1] |
f32 |
2.000 MiB |
blk.1.ffn_norm.weight |
[ 4096, 1, 1, 1] |
f32 |
0.016 MiB |
|
|
|
|
blk.1.attn_k.weight |
[ 4096, 512, 1, 1] |
bf16 |
4.00 MiB |
blk.1.attn_q.weight |
[ 4096, 8192, 1, 1] |
bf16 |
64.00 MiB |
blk.1.attn_v.weight |
[ 4096, 512, 1, 1] |
bf16 |
4.00 MiB |
blk.1.attn_output.weight |
[ 8192, 4096, 1, 1] |
bf16 |
64.00 MiB |
|
|
|
|
blk.1.ffn_down_exps.weight |
[ 1536, 4096, 128, 1] |
bf16 |
1536.00 MiB |
blk.1.ffn_gate_exps.weight |
[ 4096, 1536, 128, 1] |
bf16 |
1536.00 MiB |
blk.1.ffn_up_exps.weight |
[ 4096, 1536, 128, 1] |
bf16 |
1536.00 MiB |
|
|
|
|
output.weight |
[ 4096, 151936, 1, 1] |
bf16 |
1187.00 MiB |
output.norm_weight |
[ 4096, 1, 1, 1] |
f32 |
0.016MiB |
TODO: これと他の人気の量子化のテンソル選択を比較する。
量子化
👆秘密のレシピ
#!/usr/bin/env bash
custom="
# アテンション
blk\..*\.attn_k.*=iq6_k
blk\..*\.attn_q.*=iq6_k
blk\..*\.attn_v.*=iq6_k
blk\..*\.attn_output.*=iq6_k
# トークン埋め込み (attn_outputの正規表現がq8_0にならないように2番目に配置)
token_embd\.weight=q8_0
output\.weight=q8_0
# エキスパート
blk\..*\.ffn_down_exps\.weight=iq4_k
blk\..*\.ffn_(gate|up)_exps\.weight=iq3_k
"
custom=$(
echo "$custom" | grep -v '^#' | \
sed -Ez 's:\n+:,:g;s:,$::;s:^,::'
)
#--token-embedding-type q8_0 \
#--output-tensor-type q8_0 \
./build/bin/llama-quantize \
--custom-q "$custom" \
--imatrix /mnt/raid/models/ubergarm/Qwen3-235B-A22B-GGUF/imatrix-Qwen3-235B-A22B.dat \
/mnt/raid/models/Qwen/Qwen3-235B-A22B/Qwen3-235B-A22B-BF16-00001-of-00011.gguf \
/mnt/raid/models/ubergarm/Qwen3-235B-A22B-GGUF/Qwen3-235B-A22B-mix-IQ3_K.gguf \
IQ3_K \
24
議論
TODO: 量子化の比較について、例えばbartowski、unsloth、mradermacherなどを含め、「品質」と「速度」について議論する。
ベンチマーク
llama-sweep-bench
を使用した最初のテストでは、3090TI FE 24GB VRAM + AMD 9950X 2x48GB DDR5-6400 96GB RAMでOCインフィニティファブリックを使用して、最大140 tok/sec PPと10 tok/sec TGが得られました。もちろん、32kの完全なコンテキストに深く入るにつれて速度は低下します。これは現在非常に新しい情報なので、更新についてはリンクされたベンチマーク議論を確認してください。高エンドのゲーミングPCで高品質のLLMを使用する場合、非常に素晴らしいパフォーマンスです!
参考資料
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。