第37章 本地运行 DeepSeek-R1-0528 动态 1-bit GGUF 量化模型指南
DeepSeek 还发布了一个通过微调 Qwen3 (8B) 得到的蒸馏版本。该蒸馏模型达到了与 Qwen3 (235B) 相同的性能。Qwen3 GGUF: DeepSeek-R1-0528-Qwen3-8B-GGUF
你也可以使用 Unsloth 微调 Qwen3 模型。
你可以使用 Unsloth 的 1.78-bit Dynamic 2.0 GGUF 在你喜欢的推理框架上运行该模型。我们将 DeepSeek R1 671B 参数模型从 720GB 量化至 185GB,实现了 75% 的体积缩减。
建议阅读:请阅读我们的完整指南,了解如何在本地运行 DeepSeek-R1-0528。
为了在精度和体积之间取得最佳平衡,我们不对所有层进行统一量化,而是有选择地将例如 MoE 层量化为更低比特,而将注意力和其他层保留在 4 或 6 bit。
在此获取我们完整的 DeepSeek-R1-0528 GGUF 模型🐋如何运行 DeepSeek-R1-0528对于 DeepSeek-R1-0528-Qwen3-8B,该模型几乎可以适应任何配置,甚至仅需 20GB RAM。无需任何预置工作。
Qwen3 和完整的 R1-0528 模型使用相同的设置和聊天模板。
据 DeepSeek 介绍,以下是 R1 推理的推荐设置(R1-0528 应使用相同设置):
- 将 temperature 设为 0.6 以减少重复和逻辑断裂。
- 将 top_p 设为 0.95(推荐)
- 运行多次测试并取平均值,以获得可靠的评估结果。
要运行此量化模型,建议至少拥有 64GB RAM(若无 GPU,速度仅为 1 token/s)。若要获得最佳性能,需要至少 180GB 统一内存或 180GB 的 RAM+VRAM 总和,以实现 5+ tokens/s 的速度。虽然技术上可以无 GPU 运行该模型,但我们不建议这样做,除非你使用的是 Apple 的统一内存芯片。
对于 1.78-bit 量化:
- 在 1 块 24GB GPU 上(将所有层卸载到 GPU),吞吐量最高可达 20 tokens/second,单用户推理约为 4 tokens/second。
- 尽量让 RAM + VRAM 的总和大于或等于你所下载的量化模型大小(例如 183GB = 至少需要 183GB 的组合 VRAM+RAM 或统一内存)
一块 24GB 的 GPU(如 RTX 4090)根据工作负载和配置不同,应能达到 3 个 token/秒的速度。🦙 如何在 Ollama 中运行 R1-0528-Qwen3-8B:如果尚未安装 Ollama,请先安装!Ollama 只能运行 32B 及以下尺寸的模型。若要运行完整的 720GB R1-0528 模型,请参见此处。apt-get update
apt-get install pciutils -y
curl -fsSL https://ollama.com/install.sh | sh 运行模型!如果失败,可以在另一个终端中执行 ollama serve!我们在 Hugging Face 上传文件中包含了所有的修复方案和推荐参数(如 temperature 等)在 params 中!ollama run hf.co/unsloth/DeepSeek-R1-0528-Qwen3-8B-GGUF:Q4_K_XL 要禁用思考功能,使用(或你可以将其设置在 system prompt 中):>>> 在此处输入你的提示词 ✨ 如何在 llama.cpp 中运行 R1-0528:在此处获取 GitHub 上最新的 llama.cpp。你也可以遵循下方的构建说明。如果没有 GPU 或只想使用 CPU 推理,请将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF。apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build \
-DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp 如果你想直接使用 llama.cpp 加载模型,可以执行以下操作:(:IQ1_S) 表示量化类型。你也可以通过 Hugging Face(第 3 点)下载。这类似于 ollama run。使用 export LLAMA_CACHE="folder" 可以强制 llama.cpp 将缓存保存至特定位置。export LLAMA_CACHE="unsloth/DeepSeek-R1-0528-GGUF"
./llama.cpp/llama-cli \
-hf unsloth/DeepSeek-R1-0528-GGUF:IQ1_S \
--cache-type-k q4_0 \
--threads -1 \
--n-gpu-layers 99 \
--prio 3 \
--temp 0.6 \
--top_p 0.95 \
--min_p 0.01 \
--ctx-size 16384 \
--seed 3407 \
-ot ".ffn_.*_exps.=CPU" 在通过 pip install huggingface_hub hf_transfer 安装后,你可以下载模型。你可以选择 UD-IQ1_S(动态 1.78bit 量化)或 Q4_K_M 等其他量化版本。我建议采用我们的 2.7bit 动态量化 UD-Q2_K_XL,以平衡模型体积与精度。
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # 有时可能会触发速率限制,因此设置为 0 以禁用
from huggingface_hub import snapshot_download
snapshot_download(
repo_id = "unsloth/DeepSeek-R1-0528-GGUF",
local_dir = "unsloth/DeepSeek-R1-0528-GGUF",
allow_patterns = ["*UD-IQ1_S*"], # 动态 1bit(185GB),如需动态 2bit(251GB)请改为 "*UD-Q2_K_XL*"
)按照我们在 DeepSeek R1 的 1.58bit 动态量化文章中的方法,运行 Unsloth 的 Flappy Bird 测试。
修改 --threads 32 来设置 CPU 线程数,--ctx-size 16384 设置上下文长度,--n-gpu-layers 2 设置卸载到 GPU 的层数。如果 GPU 显存不足,可以调整这个值;如果只用 CPU 推理,直接删掉即可。
/llama.cpp/llama-cli \
--model unsloth/DeepSeek-R1-0528-GGUF/UD-IQ1_S/DeepSeek-R1-0528-UD-IQ1_S-00001-of-00004.gguf \
--cache-type-k q4_0 \
--threads -1 \
--n-gpu-layers 99 \
--prio 3 \
--temp 0.6 \
--top_p 0.95 \
--min_p 0.01 \
--ctx-size 16384 \
--seed 3407 \
-ot ".ffn_.*_exps.=CPU" \
-no-cnv \
--prompt "<|User|>Create a Flappy Bird game in Python. You must include these things:\n1. You must use pygame.\n2. The background color should be randomly chosen and is a light shade. Start with a light blue color.\n3. Pressing SPACE multiple times will accelerate the bird.\n4. The bird's shape should be randomly chosen as a square, circle or triangle. The color should be randomly chosen as a dark color.\n5. Place on the bottom some land colored as dark brown or yellow chosen randomly.\n6. Make a score shown on the top right side. Increment if you pass pipes and don't hit them.\n7. Make randomly spaced pipes with enough space. Color them randomly as dark green or light brown or a dark gray shade.\n8. When you lose, show the best score. Make the text inside the screen. Pressing q or Esc will quit the game. Restarting is pressing SPACE again.\nThe final game should be inside a markdown section in Python. Check your code for errors and fix them before the final markdown section.<|Assistant|>"我们还通过 Heptagon 测试来验证动态量化效果:让模型创建一个基础物理引擎,模拟小球在一个移动的封闭七边形内旋转。
/llama.cpp/llama-cli \
--model unsloth/DeepSeek-R1-0528-GGUF/UD-IQ1_S/DeepSeek-R1-0528-UD-IQ1_S-00001-of-00004.gguf \
--cache-type-k q4_0 \
--threads -1 \
--n-gpu-layers 99 \
--prio 3 \
--temp 0.6 \
--top_p 0.95 \
--min_p 0.01 \
--ctx-size 16384 \
--seed 3407 \
-ot ".ffn_.*_exps.=CPU" \
-no-cnv \
--prompt "
<|User|>编写一个 Python 程序,展示 20 个球在一个旋转的正七边形内部弹跳:
- 所有球的半径相同。
- 每个球上标有 1 到 20 的数字。
- 启动时,所有球从正七边形中心落下。
- 颜色代码为:#f8b862, #f6ad49, #f39800, #f08300, #ec6d51, #ee7948, #ed6d3d, #ec6800, #ec6800, #ee7800, #eb6238, #ea5506, #ea5506, #eb6101, #e49e61, #e45e32, #e17b34, #dd7a56, #db8449, #d66a35。
- 球受重力和摩擦力影响,且与旋转墙壁碰撞时反应须符合物理规律。球与球之间也应发生碰撞。
- 球的材质决定其反弹高度:不超过正七边形半径,但高于球本身的半径。
- 所有球因摩擦而旋转,球面上的数字可指示球的自转状态。
- 正七边形绕中心旋转,转速为每 5 秒 360 度。
- 正七边形尺寸需足够大以容纳所有球。
- 请勿使用 pygame 库;自行实现碰撞检测算法及碰撞响应等逻辑。允许使用的 Python 库包括:tkinter, math, numpy, dataclasses, typing, sys。
- 所有代码应置于单个 Python 文件中。
<|Assistant|>"
💕 谢谢!感谢大家一直以来的支持。希望未来几周能带来好消息!🙏
一如既往,请加入我们的 Reddit 页面和 Discord 服务器,获取帮助或表达支持!也可以关注我们的 Twitter 账号和新闻通讯。感谢阅读!
Daniel & Michael Han 🦥
2025 年 5 月 29 日
立即运行 DeepSeek-R1-0528!
免费开始使用
加入我们的 Discord