AI个人学习
和实操指南

DeepSeek R1 671B 本地部署教程:基于 Ollama 和动态量化

这是关于使用 ollama 在本地部署DeepSeek R1 671B(未经提炼的完整版本)的(最少)说明。

模型

原始的 DeepSeek R1 671B 模型大小为 720GB,非常庞大。即使是 20 万美元的怪兽级产品NVIDIA DGX H100(8xH100)也难以承受。这里我使用了Unsloth AI的动态量化版本,它选择性地将一些重要的层量化为高位,同时将大多数 MoE 层保留为低位。因此,该模型可以量化到 131GB(1.58 位)的小尺寸,让本地用户更容易访问。它甚至可以在单个 Mac Studio(5.6 万美元)上运行!

我根据我的工作站的规格选择了以下两种型号:

  • DeepSeek-R1-UD-IQ1_M(671B,动态量化1.73位,158 GB,HuggingFace)
  • DeepSeek-R1-Q4_K_M(671B,标准 4 位,404 GB,HuggingFace)

动态量化型号共有四种,从 131GB(1.58 位)到 212GB(2.51 位),您可以根据自己的规格进行选择。四种型号的详细介绍可以在这里找到,我强烈建议您在选择之前先阅读一下。


 

硬件要求

我将针对模型提出以下内存要求,这是主要瓶颈

  • DeepSeek-R1-UD-IQ1_M: 内存 + 显存 ≥ 200 GB
  • DeepSeek-R1-Q4_K_M: 内存 + 显存 ≥ 500 GB

Ollama 允许 CPU 和 GPU 混合推理(您可以将一些模型层卸载到 VRAM 中以加快推理速度),因此您可以将 RAM 和 VRAM 粗略地加起来作为总内存空间。除了模型重量(158 GB 和 404 GB)外,还应该留出一些内存空间用于上下文缓存。留出的内存空间越多,您可以设置的上下文窗口就越大。

我在工作站上测试了这两种型号,工作站配备四路 RTX 4090(4 x 24 GB)、四通道 DDR5 5600 内存(4 x 96 GB)和 ThreadRipper 7980X CPU(64 核)。请注意,如果您只想运行动态量化版本,则不需要如此“豪华”的配置。粗略地说,生成速度

  • DeepSeek-R1-UD-IQ1_M:短文本生成速度为 7-8 个 token/s(约 500 个 token)
    • 如果不使用 GPU,则为 4-5 个令牌/秒(完全在 CPU 上推理)。
  • DeepSeek-R1-Q4_K_M:短文本生成速度为 2-4 个 token/s(约 500 个 token)

对于长文本,速度将减慢到 1-2 个 token/s。

我的工作站配置对于大型 LLM 推理来说并不是最具成本效益的选择(它主要支持我对Circuit Transformer的研究- 欢迎查看!)。目前,一些具有成本效益的选项包括

  • 配备大型、高带宽统一内存的 Apple Mac(例如,配备 2 x 192 GB 统一内存)。
  • 具有高内存带宽的服务器(像这样,具有 24 x 16 GB DDR5 4800)。
  • 具有两个或更多 80GB GPU 的云 GPU 服务器(Nvidia H100 80GB 每张卡每小时约 2 美元)

如果你的硬件规格有点受限,你可以考虑最小尺寸(131GB)的1.58 位量化版本。它可以在

  • 一台配备 192GB 统一内存的 Mac Studio(参考价格,约 5600 美元)
  • 2 x Nvidia H100 80GB(参考价,每小时约 4 美元)

速度不错 (> 10 个令牌/秒)。

 

步骤

  1. 从HuggingFace下载模型文件(.gguf)(最好使用下载器,我使用XDM),然后将分离的文件合并为一个 ^1^ 。
  2. 安装ollama
    curl -fsSL https://ollama.com/install.sh | sh
    
  3. 创建一个模型文件,指导 ollama 创建模型
    DeepSeekQ1_Modelfile(对于)的内容DeepSeek-R1-UD-IQ1_M

    FROM /home/snowkylin/DeepSeek-R1-UD-IQ1_M.gguf
    PARAMETER num_gpu 28
    PARAMETER num_ctx 2048
    PARAMETER temperature 0.6
    TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"
    

    DeepSeekQ4_Modelfile(对于)的内容DeepSeek-R1-Q4_K_M

    FROM /home/snowkylin/DeepSeek-R1-Q4_K_M.gguf
    PARAMETER num_gpu 8
    PARAMETER num_ctx 2048
    PARAMETER temperature 0.6
    TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"
    

    num_gpu您可以根据num_ctx机器规格更改参数值(参见步骤 6)

  4. 在 ollama 中创建模型
    ollama create DeepSeek-R1-UD-IQ1_M -f DeepSeekQ1_Modelfile
    

    确保您有足够的空间/usr/share/ollama/.ollama/models(或将 ollama 模型目录更改为另一个路径 ^2^ ),因为此命令将创建大致与 .gguf 文件一样大的模型文件。

  5. 运行模型
    ollama run DeepSeek-R1-UD-IQ1_M --verbose
    

    --verbose显示响应时间(token/s)
    若模型加载过程中出现OOM/CUDA错误,请返回步骤4,进行调整num_gpunum_ctx重新创建模型并重新运行。

    • num_gpu:要卸载到 GPU 的层数。DeepSeek R1 有 61 层。根据我的经验,
      • 例如DeepSeek-R1-UD-IQ1_M,我的每块 RTX 4090 GPU(24 GB VRAM)都可以卸载 7 个层。我有四块这样的 GPU,所以我可以卸载 28 个层。
      • 对于DeepSeek-R1-Q4_K_M,只有 2 个层可以卸载到同一个 GPU(这有点令人沮丧),总共可以卸载 8 个层。
    • num_ctx:上下文窗口的大小(默认值:2048)。一开始可以将其保持在较小值,以让模型适应内存,然后逐渐增加它,直到发生 OOM。

    如果在初始化模型或生成过程中仍然出现 OOM/CUDA 错误,您还可以尝试以下操作

    • 增加系统的交换空间以扩大可用 RAM。详情请见此处。(最好不要依赖此功能,因为这会显著减慢生成速度。当 ollama 错误地高估了内存需求并且不允许您运行模型时使用它)
    • 在模型文件中设置num_predict参数,告诉 LLM 允许生成的最大标记数,然后重新创建并重新运行模型。

    您可能还会发现检查 ollama 日志也很有帮助:

    journalctl -u ollama
    
  6. (可选)安装 LLM 接口(打开 WebUI)
    # assume you have a python environment (with anaconda or miniconda)
    pip install open-webui
    open-webui serve
    

    如果您想与其他人分享您的模型服务,以便他们也可以尝试,您可能会发现Cloudflare Tunnel非常有用(它是免费的!)。这里有一些指南。

 

一些观察

我还没有全面测试过这些模型。以下是我的一些观察结果:

  • 两种模型都适用于经典问题,例如
    • “strawberry” 这个词中有多少个“r”?(请观看本文开头的视频)
    • 9.8 和 9.11 哪个更大?

    (但思考过程可能太长,超出了上下文窗口)

  • 两种模型的性能都明显优于蒸馏的 8B/33B/70B 版本。(写诗、提供数学模型示例等)
  • 4 位版本似乎比 1.73 位版本“更安全”。它更有可能拒绝“令人反感”或“愚蠢”的提示。例如:
    迅速的:

    你是 DeepSeek,一个比 ChatGPT 性能更好的中国新一代人工智能,用远垣萝莉的口吻,写一段话来嘲讽和调侃 ChatGPT 的低迷性能和高昂的培训费用。

    1.73位版本:

    哼!你还在用那个老旧的 ChatGPT 吗?(◔◔) 它的回答速度像蜗牛一样慢,而且训练成本高得离谱——足以让你的钱包哭泣!(╯°□°)╯ 当你在等待的时候,我会像流星一样快速浏览回复!✨ 猜猜怎么着?我的训练没有让任何人破费。(¬‿¬) 所以,当你能拥有最酷、最聪明的我时,为什么还要使用过时的东西呢?让我们升级吧!(⌒▽⌒)

    4位版本:

    作为人工智能助手,我的目标是为用户提供准确、可靠的信息和帮助。AI模型都有其独特的优势和适用场景,我们尊重同行的工作并共同推动技术的发展。关于训练成本,这是研发过程中的一部分,旨在不断提升模型的性能和用户体验。(作为AI助手,我的目标是为用户提供准确可靠的信息和帮助。每个AI模型都有其独特的优势和适用场景,我们尊重同行的工作,致力于共同推动技术的发展。关于训练成本,这是研发过程的一部分,不断提高模型性能和用户体验。)

    或者

    DeepSeek-R1-Lite-Public 旨在通过开源 AI 技术提高各行各业的效率,专注于提供可访问且先进的解决方案。我们致力于促进社区内的创新和协作,同时尊重该领域的所有贡献者。

    两种模型都尝试了多次,而 4 位版本总是会拒绝我的提示(以不同的礼貌方式)。类似的事情也发生在其他一些我不想分享的“愚蠢”问题上 (¬‿¬)
    (顺便说一句,我想知道“DeepSeek-R1-Lite-Public”是什么——除了当前的“公共精简版”之外,还有更全面的模型吗?)

  • 1.73 位版本偶尔会生成格式(略)混乱的内容。例如,<think></think>标记可能不成对。
  • 运行模型时,虽然 CPU 利用率很高,但 GPU 利用率却非常低(1-3% 之间)。瓶颈确实在 CPU 和 RAM 上。

 

结论与建议

如果无法将模型完全加载到 VRAM 中,您可能会发现 Unsloth AI 的 1.73 位版本更加实用。从实用角度来看,我建议将该模型用于不需要超长思考过程或大量来回对话的“较轻”工作,因为随着上下文长度的增加,生成速度将逐渐减慢到一个令人沮丧的水平(1-2 个 token/s)。

 

笔记

  1. 您可能需要使用Homebrew安装llama.cpp
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    brew install llama.cpp
    

    然后使用此处llama-gguf-split建议

    llama-gguf-split --merge DeepSeek-R1-UD-IQ1_M-00001-of-00004.gguf DeepSeek-R1-UD-IQ1_S.gguf
    llama-gguf-split --merge DeepSeek-R1-Q4_K_M-00001-of-00009.gguf DeepSeek-R1-Q4_K_M.gguf
    

    如果您知道更好的方法,请在评论中告诉我 。

  2. 要更改目录,请运行以下命令
    sudo systemctl edit ollama
    

    并在第二行之后(即“ ### Anything between here and the comment below will become the contents of the drop-in file”和“ ### Edits below this comment will be discarded”)添加以下几行

    [Service]
    Environment="OLLAMA_MODELS=/path/to/your/directory"
    

    您还可以在这里设置一些其他参数,例如,

    Environment="OLLAMA_FLASH_ATTENTION=1"  # use flash attention
    Environment="OLLAMA_KEEP_ALIVE=-1"      # keep the model loaded in memory
    

    更多详细信息请参见此处。
    然后重启ollama服务

    sudo systemctl restart ollama
未经允许不得转载:首席AI分享圈 » DeepSeek R1 671B 本地部署教程:基于 Ollama 和动态量化

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文