速度约 10 token/s ,功率约 75W
unsloth 的逆天量化版本 [Run DeepSeek-R1 Dynamic 1.58-bit](https://unsloth.ai/blog/deepseekr1-dynamic) DIY了一些量化技巧,让它的效果比“传统”的1bit和2bit好很多(虽然具体有多好,特别是跟满血 R1 以及 Distill-Qwen-32B 相比究竟如何,仍有待有缘人去跑一轮正经的测试,比如 MATH-500、GPQA 这些)
llama.cpp 的指令:
llama-cli \
-m DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
--prompt "两个八面骰子,每个骰子的面分别标有数字1至8。当骰子被掷出时,每个面朝上的概率相等。求两个骰子朝上的数字之积大于它们的和的概率。答案用最简分数表示。请一步一步推理(reason),并把你的最终答案放进 boxed{} 里面" \
--temp 0.6 \
--cache-type-k q4_0 \
--ubatch-size 256 \
--ctx-size 8192 \
--flash-attn \
--no-conversation
ubatch-size 非常关键,不更改这个的话,默认值 512 超大概率爆显存;理论上用 128 会更稳。flash attention 则是锦上添花。
llama.cpp 作者 ggerganov 在一条帖子下回复自己的 Mac Studio M2 Ultra 192GB 测试情况,并分享自己的心得:https://github.com/ggerganov/llama.cpp/issues/11474#issuecomment-2620808528
ubatch size:
> You might have to lower the physical batch size to -ub 128 or -ub 256 to reduce compute buffer sizes and *maybe* improve the pipeline parallelism with 2 GPUs.
flash attention:
> It will:
>
> * Reduce compute memory usage
> * Enable V quantization that reduces the KV cache memory
> * Improve performance at longer contexts
好消息是目前 MoE 架构在 Metal 上仍有优化空间:"the Metal backend is very poorly optimized for MoE, so maybe it can be improved a bit."
====== 2025.2.9 更新 ======
看到越来越多人用M1U/M2U 128GB跑通R1-671B-1.58bit了(虽然不同llama.cpp参数的情况下只有2到4token/s),我又捣鼓了一下发现1.73bit的也能跑了。主要是把 --n-gpu-layers 设成 60 。
内存直接干到 190GB 了,然后也启用了2到3GB的虚拟内存,并且有20到30GB进程是在CPU上跑的(3到6个核心;P-CPU占用在30%到35%),总功耗还是大约70W,速度还是10token/s。
上上周没怎么睡好也没怎么充分消化unsloth帖子的信息,阅读理解不到位,不少一下子没get到意思的信息点直接选择视而不见了。。。
信息源:
* https://unsloth.ai/blog/deepseekr1-dynamic
* https://github.com/ggerganov/llama.cpp/issues/11474 仍然是这条帖子不断有人分享自己的情况
* https://zenn.dev/robustonian/articles/deepseek_r1-ud-iq1_s 这位日本博主的测试相对多一点