跳到主要内容

DeepSeek R1 动态量化

非常感谢 UnslothAI 团队所做出的令人难以置信的努力!得益于他们的辛勤工作,我们现在可以在 Llama.cpp 上以动态 1.58-bit 量化形式运行 完整版 DeepSeek-R1 671B 参数模型(压缩后仅为 131GB)!最棒的是什么?您再也不用因为需要海量企业级 GPU 或服务器而感到绝望 —— 在您的个人电脑上运行该模型已成为可能(尽管对于大多数消费级硬件来说运行速度较慢)。

备注

Ollama 上唯一真正的 DeepSeek-R1 模型是可在此处获取的 671B 版本https://ollama.com/library/deepseek-r1:671b。其他版本均为蒸馏(distilled)模型。

本指南重点介绍如何使用与 Open WebUI 集成的 Llama.cpp 来运行 完整版 DeepSeek-R1 动态 1.58-bit 量化模型。在本教程中,我们将使用一台配备 M4 Max + 128GB RAM 的设备来演示具体步骤。您可以根据自己的配置来调整相关设置。


步骤 1:安装 Llama.cpp

您可以选择:

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

前往 Unsloth 的 Hugging Face 页面 并下载适合的 DeepSeek-R1 动态量化版本。在本教程中,我们将使用 1.58-bit (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-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
信息

🛠️ 在后面的步骤中,请更新路径以匹配您具体的目录结构。例如,如果您的脚本位于 /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
提示

🔑 根据您的设备自定义参数:

  • --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 服务器正在运行

Server Screenshot

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

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

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

  1. 转到 Open WebUI 中的 Admin Settings(管理员设置)。
  2. 导航到 Connections > OpenAI Connections
  3. 为新连接添加以下详细信息:
    • URL:http://127.0.0.1:10000/v1(在 Docker 中运行 Open WebUI 时为 http://host.docker.internal:10000/v1
    • API Key:none
信息

🖥️ 在 Open WebUI 中添加连接

Connection Screenshot

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

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


示例:生成回复

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

Response Screenshot


注意事项与考量

  • 性能表现: 在个人硬件上运行像 DeepSeek-R1 这样 131GB 的巨无霸模型会比较慢。即使使用我们的 M4 Max(128GB RAM),推理速度也十分有限。但这能运行起来本身就证明了 UnslothAI 优化的强大。

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


感谢 UnslothAILlama.cpp,让个人运行最大开源推理模型之一的 DeepSeek-R1(1.58-bit 版本)终于成为可能。虽然在消费级硬件上运行此类模型极具挑战性,但在没有庞大计算基础设施的情况下能够做到这一点,是一项重大的技术里程碑。

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

祝实验愉快!🚀

This content is for informational purposes only and does not constitute a warranty, guarantee, or contractual commitment. Open WebUI is provided "as is." See your license for applicable terms.