使用 Llama.cpp 运行 DeepSeek R1 动态 1.58 位量化模型
向 UnslothAI 的难以置信的努力致以巨大的谢意!多亏了他们的辛勤工作,我们现在可以在 Llama.cpp 上运行动态 1.58 位量化形式(压缩到仅 131GB)的 完整版 DeepSeek-R1 671B 参数模型!最棒的部分是什么?您不再需要为需要大规模企业级 GPU 或服务器而感到绝望 —— 在个人机器上运行此模型已成为可能(尽管对于大多数消费级硬件来说运行速 度较慢)。
Ollama 上唯一真正的 DeepSeek-R1 模型是此处的 671B 版本:https://ollama.com/library/deepseek-r1:671b。其他版本均为 蒸馏 (distilled) 模型。
本指南重点介绍如何使用集成了 Open WebUI 的 Llama.cpp 运行 完整版 DeepSeek-R1 动态 1.58 位量化模型。在本教程中,我们将在一台 M4 Max + 128GB RAM 的机器上演示相关步骤。您可以根据自己的配置调整设置。
第 1 步:安装 Llama.cpp
您可以:
- 下载预编译的二进制文件
- 或者自行构建:按照 Llama.cpp 构建指南中的说明进行操作。
第 2 步:下载由 UnslothAI 提供的模型
前往 Unsloth 的 Hugging Face 页面并下载合适的 DeepSeek-R1 动态量化版本。在本教程中,我们将使用 1.58 位 (131GB) 版本,该版本经过高度优化,但功能依然令人惊讶地完备。
了解您的“工作目录” —— 即您的 Python 脚本或终端会话正在运行的地方。默认情况下,模型文件将下载到该目录的子文件夹中,因此请务必清楚其路径!例如,如果您在 /Users/yourname/Documents/projects 中运行以下命令,下载的模型将保存在 /Users/yourname/Documents/projects/DeepSeek-R1-GGUF 下。
要详细了解 UnslothAI 的开发过程以及为什么这些动态量化版本如此高效,请查看他们的博客文章:UnslothAI DeepSeek R1 动态量化。
以下是如何通过程序下载模型:
# 在运行此脚本之前,请先安装 Hugging Face 依赖:
# pip install huggingface_hub hf_transfer
from huggingface_hub import snapshot_download
snapshot_download(
repo_id = "unsloth/DeepSeek-R1-GGUF", # 指定 Hugging Face 仓库
local_dir = "DeepSeek-R1-GGUF", # 模型将下载到此目录
allow_patterns = ["*UD-IQ1_S*"], # 仅下载 1.58 位版本
)
下载完成后,您会在目录结构中找到如下模型文件:
DeepSeek-R1-GGUF/
├── DeepSeek-R1-UD-IQ1_S/
│ ├── DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf
│ ├── DeepSeek-R1-UD-IQ1_S-00002-of-00003.gguf
│ ├── DeepSeek-R1-UD-IQ1_S-00003-of-00003.gguf
🛠️ 在后续步骤中请更新路径以 匹配您的具体目录结构。例如,如果您的脚本位于 /Users/tim/Downloads 中,那么 GGUF 文件的完整路径将是:
/Users/tim/Downloads/DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf。
第 3 步:确保 Open WebUI 已安装并运行
如果您尚未安装 Open WebUI,不用担心!设置非常简单。只需按照 Open WebUI 文档操作即可。安装完成后,启动应用程序 —— 我们将在后续步骤中连接它以与 DeepSeek-R1 模型进行交互。
第 4 步:使用 Llama.cpp 提供模型服务
模型下载完成后,下一步是使用 Llama.cpp 的服务器模式运行它。在开始之前:
-
找到
llama-server二进制文件。 如果您是从源代码构建的(如第 1 步所述),llama-server可执行文件将位于llama.cpp/build/bin。使用cd命令导航到此目录:cd [path-to-llama-cpp]/llama.cpp/build/bin将
[path-to-llama-cpp]替换为您克隆或构建 Llama.cpp 的位置。例如:cd ~/Documents/workspace/llama.cpp/build/bin -
指向您的模型文件夹。 使用在第 2 步中创建的下载 GGUF 文件的完整路径。在提供模型服务时,请指定分段 GGUF 文件的第一部分(例如
DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf)。
以下是启动服务器的命令:
./llama-server \
--model /[your-directory]/DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
--port 10000 \
--ctx-size 1024 \
--n-gpu-layers 40
🔑 根据您的机器自定义参数:
--model:将/[your-directory]/替换为第 2 步中下载 GGUF 文件的路径。--port:服务器默认端口为8080,但您可以根据端口可用性随意更改。--ctx-size:确定上下文长度(Token 数量)。如果硬件允许,您可以增加此值,但要注意 RAM/VRAM 使用量的上升。--n-gpu-layers:设置要卸载到 GPU 以加快推理速度的层数。具体数字取决于您的 GPU 显存容量 —— 请参考 Unsloth 的表格获取具体建议。
例如,如果您的模型下载到 /Users/tim/Documents/workspace,您的命令将如下所示:
./llama-server \
--model /Users/tim/Documents/workspace/DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
--port 10000 \
--ctx-size 1024 \
--n-gpu-layers 40
服务器启动后,它将在以下地址托管一个 本地 OpenAI 兼容的 API 端点:
http://127.0.0.1:10000
🖥️ Llama.cpp 服务器正在运行

运行命令后,您应该会看到一条确认服务器已激活并在端口 10000 上监听的消息。
请务必 保持此终端会话运行,因为它为后续所有步骤提供模型服务。