🐳DeepSeek-V3-0324:如何在本地运行

如何使用我们的动态量化在本地运行 DeepSeek-V3-0324 以恢复精度

circle-info

请参阅 https://docs.unsloth.ai/basics/deepseek-r1-0528-how-to-run-locallyarrow-up-right (2025年5月28日更新)了解如何更快更高效地运行 DeepSeek!

DeepSeek 又更新了!在 2024 年 12 月和 2025 年 1 月发布 V3、R1 Zero 和 R1 之后,DeepSeek 更新了 V3 的检查点/模型,并发布了三月更新!

据 DeepSeek 称,MMLU-Pro 提升了 5.3%,达到 81.2%。 GPQA 提升了 9.3 个百分点。AIME 提升 19.8%,LiveCodeBench 提升 10.0%!他们提供了一张图表,展示了与之前的 V3 检查点以及 GPT 4.5、Claude Sonnet 3.7 等模型的比较情况。 但我们如何在本地运行一个 6710 亿参数的模型?

MoE 位数
类型
磁盘大小
准确度
链接
详情

1.78 位

IQ1_S

173GB

好的

2.06/1.56 位

1.93 位

IQ1_M

183GB

一般

2.5/2.06/1.56

2.42 位

IQ2_XXS

203GB

建议

2.5/2.06 位

2.71 位

Q2_K_XL

231GB

建议

3.5/2.5 位

3.5 位

Q3_K_XL

320GB

很棒

4.5/3.5 位

4.5 位

Q4_K_XL

406GB

最佳

5.5/4.5 位

circle-check

⚙️ 官方推荐设置

根据 DeepSeekarrow-up-right,以下是推理的推荐设置:

  • 温度设置为 0.3 (对于编码可能设为 0.0, 见此处arrow-up-right)

  • Min_P 为 0.00(可选,但 0.01 效果很好,llama.cpp 的默认值是 0.1)

  • 聊天模板: <|用户|>用 Python 创建一个可玩的简易 Flappy Bird 游戏。将最终游戏放在一个 markdown 区块内。<|助手|>

  • 一个 BOS 标记为 <|begin▁of▁sentence|> 在分词时会自动添加(不要手动添加!)

  • DeepSeek 提到也使用了一个 系统提示语 (可选)— 它是中文的: 该助手为DeepSeek Chat,由深度求索公司创造。\n今天是3月24日,星期一。 其翻译为: 该助手是 DeepSeek Chat,由 DeepSeek 创建。\n今天是 3 月 24 日,星期一。

  • 对于 KV 缓存量化,请使用 8bit,而不是 4bit——我们发现 4bit 明显更差。

📖 教程:如何在 llama.cpp 中运行 DeepSeek-V3

  1. 获取最新的 llama.cpp此处 GitHubarrow-up-right。您也可以按下面的构建说明进行。若要更改 -DGGML_CUDA=ON-DGGML_CUDA=OFF 若您没有 GPU 或仅想要 CPU 推理,请这样设置。

circle-exclamation
  1. 通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。您可以选择 UD-IQ1_S(动态 1.78bit 量化)或其他量化版本如 Q4_K_M . 我推荐使用我们的 2.7bit 动态量化 UD-Q2_K_XL 以在大小和精度之间取得平衡。更多版本见: https://huggingface.co/unsloth/DeepSeek-V3-0324-GGUFarrow-up-right

  1. 按我们在 DeepSeek R1 的 1.58bit 动态量化中描述的运行 Unsloth 的 Flappy Bird 测试。

  2. 编辑 --threads 32 为 CPU 线程数, --ctx-size 16384 以设置上下文长度, --n-gpu-layers 2 用于指定有多少层进行 GPU 卸载。如果你的 GPU 出现内存不足,尝试调整它。如果只用 CPU 推理,也请移除此参数。

chevron-right如果我们运行上述命令,会得到两个非常不同的结果。 标准 2-bit 版本: 点击查看结果 (癫痫警告!) 动态 2-bit 版本: 见下面结果:hashtag

标准 2-bit。在背景和碰撞上失败

动态 2-bit。成功创建了一个可玩的游戏。
  1. 像 DeepSeek-R1 一样,V3 有 61 层。例如在 24GB 或 80GB GPU 上,你可以在向下取整后进行卸载(若出现内存不足则再减少 1 层):

量化
文件大小
24GB GPU
80GB GPU
2x80GB GPU

1.73 位

173GB

5

25

56

2.22 位

183GB

4

22

49

2.51 位

212GB

2

19

32

在 Mac / Apple 设备上运行

对于 Apple Metal 设备,请注意 --n-gpu-layers。如果发现机器出现内存不足,请减少该值。对于 128GB 统一内存的机器,你应该能够卸载大约 59 层左右。

🎱 七边形测试

我们还通过测试我们的动态量化 r/Localllamaarrow-up-right 通过 Heptagon 测试来测试动态量化,该测试要求模型创建一个基本物理引擎来模拟在移动的封闭七边形中旋转的球体。

目标是让七边形旋转,且七边形内的球应当移动。
Cover

非动态 2bit。失败 - 癫痫警告 又来了!

Cover

动态 2bit。实际上正确地解决了七边形难题!!

动态 2.7 bit 量化仅 230GB 的版本实际上成功解决了七边形难题!下面列出了所有 3 个版本(包括完整 fp8)的完整输出:

chevron-right动态 2bit 七边形 代码hashtag
chevron-right非动态 2bit 七边形 代码hashtag
chevron-rightFloat8 七边形 代码hashtag

🕵️ 额外发现与提示

  1. 我们的经验测试发现使用更低的 KV 缓存量化(4bit)似乎会降低生成质量——需要更多测试,但我们建议使用 q8_0 缓存量化。量化的目标是支持更长的上下文长度,因为 KV 缓存占用相当多的内存。

  2. 我们发现 down_proj 在此模型中对量化非常敏感。我们不得不重做一些使用 2 位的动态量化,现在我们对所有这些矩阵至少使用 3 位。 down_proj 并且现在我们对所有这些矩阵至少使用 3bits 作为最低值。

  3. 使用 llama.cpp 的 Flash Attention 后端确实会带来更快的解码速度。编译时使用 -DGGML_CUDA_FA_ALL_QUANTS=ON 。注意最好也将你的 CUDA 架构设置为在 https://developer.nvidia.com/cuda-gpusarrow-up-right 中找到的值,以减少编译时间,然后通过以下方式设置它 -DCMAKE_CUDA_ARCHITECTURES="80"

  4. 使用一个 min_p=0.01可能就足够了。 llama.cpp的默认值是 0.1,这可能不是必要的。既然温度设为 0.3,我们很可能不会抽样到低概率的标记,因此删除极不可能的标记是个好主意。DeepSeek 建议对编码任务使用 0.0 的温度。

最后更新于

这有帮助吗?