量化者:ubergarm
流水线标签:文本生成
基础模型:Qwen/Qwen3-235B-A22B
许可证:MIT
基础模型关系:量化
标签:
- imatrix
- qwen3_moe
- 对话式
- ik_llama.cpp
ik_llama.cpp
对 Qwen/Qwen3-235B-A22B 的 imatrix 量化
此量化集合必须使用 ik_llama.cpp 分支以支持先进的非线性 SotA 量化。不要下载这些大文件并期望它们能在主线的普通 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 游戏主机以获得最佳性能)下以最高速度运行。这将允许使用 -rtr
运行时重新打包以实现最大 CPU 吞吐量。您仍然可以省略 -rtr
并使用默认的 mmap()
行为在较少 RAM 下运行,但速度会有所下降。或者,您也可以进行“离线重新打包”以适应您的具体设置,从而在 mmap()
快速启动和最大 CPU 吞吐量之间取得最佳平衡。不过,根据透明大页(THPs)的配置及其对您主机性能的影响,您可能仍需使用 --no-mmap
。
106.830 GiB (3.903 BPW)
f32: 471 张量
q8_0: 2 张量
iq3_k: 188 张量
iq4_k: 94 张量
iq6_k: 376 张量
最终估计:PPL = 5.4403 +/- 0.03421(wiki.test.raw,与 Q8_0 的 5.3141 +/- 0.03321 对比)(*待办*:更多基准测试)
快速开始
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 |
待办:比较此量化与其他流行量化的张量选择。
量化
👈秘密配方
#!/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)
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
讨论
待办:讨论一些关于比较量化(如 bartowski、unsloth 和 mradermacher)的内容,包括“质量”和“速度”。
基准测试
在 llama-sweep-bench
的初步测试中,我的 3090TI FE 24GB VRAM + AMD 9950X 2x48GB DDR5-6400 96GB RAM(超频无限总线)上获得了高达 140 tok/sec PP 和 10 tok/sec TG 的性能。当然,随着深入完整的 32k 上下文,速度会有所下降。请查看链接的基准测试讨论以获取更新,因为目前这一切都非常新鲜。不过,对于高端游戏主机上的高质量 LLM 来说,性能已经非常惊人了!
参考