For the complete documentation index, see llms.txt. This page is also available as Markdown.

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

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

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

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

据 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.78bit

IQ1_S

173GB

可以

2.06/1.56bit

1.93bit

IQ1_M

183GB

一般

2.5/2.06/1.56

2.42bit

IQ2_XXS

203GB

建议

2.5/2.06bit

2.71bit

Q2_K_XL

231GB

建议

3.5/2.5bit

3.5bit

Q3_K_XL

320GB

很好

4.5/3.5bit

4.5bit

Q4_K_XL

406GB

最佳

5.5/4.5bit

⚙️ 官方推荐设置

根据 DeepSeek,以下是推理时的推荐设置:

  • 温度 0.3 (编码时也许用 0.0, 如这里所示)

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

  • 聊天模板: <|User|>用 Python 创建一个简单可玩的 Flappy Bird 游戏。把最终游戏放在一个 markdown 区块中。<|Assistant|>

  • BOS 令牌 <|begin▁of▁sentence|> 会在分词时自动添加(不要手动添加!)

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

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

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

  1. 获取最新的 llama.cppGitHub 这里。你也可以按照下面的构建说明操作。将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF 如果你没有 GPU,或者只想进行 CPU 推理。 对于 Apple Mac / Metal 设备,设置 -DGGML_CUDA=OFF 然后照常继续——Metal 支持默认开启。

  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-GGUF

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

  2. 编辑 --threads 32 来设置 CPU 线程数, --ctx-size 16384 来设置上下文长度, --n-gpu-layers 2 来设置 GPU 卸载多少层。如果你的 GPU 显存不足,请尝试调整它。如果你只进行 CPU 推理,也请移除它。

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

标准 2-bit。背景失败,碰撞失败

动态 2-bit。成功创建了一个可玩的游戏。
  1. 和 DeepSeek-R1 一样,V3 有 61 层。例如,对于 24GB GPU 或 80GB GPU,四舍五入后你可以预期在以下层数之后卸载(如果发生内存不足,就减 1 层):

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

1.73bit

173GB

5

25

56

2.22bit

183GB

4

22

49

2.51bit

212GB

2

19

32

在 Mac / Apple 设备上运行

对于 Apple Metal 设备,请注意 --n-gpu-layers。如果发现机器内存不足,请降低这个值。对于一台 128GB 统一内存的机器,应该可以卸载大约 59 层。

🎱 七边形测试

我们也通过以下方式测试我们的动态量化: r/Localllama 中的方式,通过 Heptagon 测试来测试动态量化版本,该测试会要求模型创建一个基础物理引擎,以模拟球体在一个移动的封闭六边形中旋转。(原文如此)

目标是让七边形旋转,并且七边形中的球应该移动。
Cover

非动态 2-bit。失败 - 癫痫警告 再次!

Cover

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

Cover

原始 float8

动态 2.7 bit 量化的大小只有 230GB,居然真的成功解决了七边形谜题!下面是全部 3 个版本(包括完整 fp8)的完整输出:

动态 2-bit 七边形代码
非动态 2-bit 七边形代码
Float8 七边形代码

🕵️ 额外发现与提示

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

  2. 我们发现 down_proj 在这个模型中对量化极其敏感。我们不得不重做一些使用 2bits 的动态量化, down_proj 现在我们对所有这些矩阵都将 3bits 作为最低值。

  3. 使用 llama.cpp 的 Flash Attention 后端确实会带来稍快一些的解码速度。编译时请使用 -DGGML_CUDA_FA_ALL_QUANTS=ON 。另外,最好将你的 CUDA 架构设置为 https://developer.nvidia.com/cuda-gpus 中所示的值,以减少编译时间,然后通过 -DCMAKE_CUDA_ARCHITECTURES="80"

  4. 使用一个 min_p=0.01应该就足够了。 llama.cpp默认值为 0.1,这可能没有必要。毕竟已经使用了 0.3 的温度,因此我们很可能极不可能采样到低概率词元,所以移除极不可能的词元是个好主意。DeepSeek 建议在编码任务中使用 0.0 温度。

最后更新于

这有帮助吗?