Skip to main content

🐋 使用 Llama.cpp 运行 DeepSeek R1 Dynamic 1.58-bit

UnslothAI 致敬,感谢他们的不懈努力!多亏了他们的辛勤工作,我们现在可以在 Llama.cpp 上运行 完整的 DeepSeek-R1 671B 参数模型的动态 1.58-bit 量化形式(压缩至仅 131GB)!最棒的是?您不再需要为了需要大规模企业级 GPU 或服务器而绝望 — 可以在您的个人机器上运行此模型(尽管对于大多数消费级硬件来说速度较慢)。

note

Ollama 上唯一真正的 DeepSeek-R1 模型是这里提供的 671B 版本https://ollama.com/library/deepseek-r1:671b。其他版本是蒸馏模型。

本指南专注于使用与 Open WebUI 集成的 Llama.cpp 运行 完整的 DeepSeek-R1 Dynamic 1.58-bit 量化模型。在本教程中,我们将演示使用 M4 Max + 128GB RAM 机器的步骤。您可以根据自己的配置调整设置。


步骤 1:安装 Llama.cpp

您可以:

步骤 2:下载 UnslothAI 提供的模型

前往 Unsloth 的 Hugging Face 页面 并下载适当的 DeepSeek-R1 动态量化版本。在本教程中,我们将使用 1.58-bit (131GB) 版本,该版本高度优化但仍然出色地功能性。

tip

了解您的"工作目录" — 您的 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-bit 版本
)

下载完成后,您会在目录结构中找到模型文件,如下所示:

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
info

🛠️ 在后续步骤中更新路径以匹配您的特定目录结构。例如,如果您的脚本在 /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 的服务器模式运行它。开始之前:

  1. 定位 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. 指向您的模型文件夹。 使用步骤 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
tip

🔑 根据您的机器自定义的参数:

  • --model/[your-directory]/ 替换为步骤 2 中下载 GGUF 文件的路径。
  • --port 服务器默认是 8080,但根据端口可用性可以随意更改。
  • --ctx-size 确定上下文长度(令牌数)。如果硬件允许,您可以增加它,但要注意 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
info

🖥️ Llama.cpp 服务器运行中

服务器截图

运行命令后,您应该看到一条消息确认服务器处于活动状态并在端口 10000 上监听。

确保保持此终端会话运行,因为它为所有后续步骤提供模型服务。

步骤 5:将 Llama.cpp 连接到 Open WebUI

  1. 在 Open WebUI 中转到 管理设置
  2. 导航到 连接 > OpenAI 连接
  3. 为新连接添加以下详细信息:
    • URL:http://127.0.0.1:10000/v1(或在 Docker 中运行 Open WebUI 时使用 http://host.docker.internal:10000/v1
    • API 密钥:none
info

🖥️ 在 Open WebUI 中添加连接

连接截图

运行命令后,您应该看到一条消息确认服务器处于活动状态并在端口 10000 上监听。

保存连接后,您可以直接从 Open WebUI 开始查询 DeepSeek-R1!🎉


示例:生成响应

您现在可以使用 Open WebUI 的聊天界面与 DeepSeek-R1 Dynamic 1.58-bit 模型交互。

响应截图


注意事项和考虑

  • 性能: 在个人硬件上运行像 DeepSeek-R1 这样的大型 131GB 模型将会很慢。即使使用我们的 M4 Max(128GB RAM),推理速度也很一般。但它能运行本身就是对 UnslothAI 优化的证明。

  • VRAM/内存要求: 确保有足够的 VRAM 和系统 RAM 以获得最佳性能。使用低端 GPU 或仅 CPU 的设置,预期速度会更慢(但仍然可行!)。


感谢 UnslothAILlama.cpp,运行最大的开源推理模型之一 DeepSeek-R1(1.58-bit 版本)终于对个人用户变得可访问。虽然在消费级硬件上运行这类模型具有挑战性,但无需大规模计算基础设施就能做到这一点是一个重要的技术里程碑。

⭐ 感谢社区推动开放 AI 研究的边界。

祝您实验愉快!🚀