一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答:包括671B满血版和各个蒸馏版的部署(含单卡4090部署671B)

前言

自从deepseek R1发布之后「详见《一文速览DeepSeek R1:如何通过纯RL训练大模型的推理能力以比肩甚至超越OpenAI o1(含Kimi K1.5的解读)」,deepseek便爆火

爆火以后便应了“人红是非多”那句话,不但遭受各种大规模攻击,即便后来挡住了大部分攻击,但海内外大量闯入deepseek官网一探究竟的网友也把他们的服务器压得不堪重负

导致一提问,要么频繁显示:服务器繁忙,请稍后再试;要么回答了 但无法联网,致使我朋友圈内一些不知情的朋友说:看把媒体给能的,各种瞎吹,但其实不过尔尔..

怎么办呢?

  • 一方面,微信上的好友老师木发圈表示
    这个春节有点特别,虽然没有休息一天,大家也没有怨言。看到DeepSeek创造的一个又一个奇迹,我很焦急但苦于没有资源,同事突发奇想:国产卡多,用国产卡吧 ”
    于是,在25年的2.1日,硅基流动 x 华为云联合推出基于昇腾云的 DeepSeek R1 & V3 推理服务!

    个人认为这是国产GPU替代英伟达GPU之路的里程碑时刻
    虽然在此之前,华为以及不少国内公司在GPU国产化上做了很多工作、努力,而且在不少政务单位已经做了很多替代
    但我们过去两年 对外接各种大模型项目的时候——我司「七月在线」除了开发一系列内部产品 也对外接各种项目,不论是客户还是我们内部,对国产GPU是否好适配、以及适配之后是否丝滑好用 始终存在着一定的担忧

    我相信,这一情况会随着本次的「昇腾云的 DeepSeek R1 & V3 推理服务」而越来越好
  • 二方面,加之我司「七月在线」遇到的大部分B端政企客户出于安全、私密的考虑,很多都希望本地部署
    故本文便来重点探讨各种版本下、各种情况下的DeepSeek-R1的本地部署「当然,某乎上也有很多类似“ 如何在本地部署DeepSeek-R1模型?” 的帖子,但有了本文之后,你基本上不用再看别的帖子了

如此,本文来了,以下是本文的更新记录「本文不用付费、不用各种附加条件,直接看即可,且涵盖各种版本的部署、各种交互模式、各种额外功能比如联网、知识库——齐活

  1. 2.3日下午,在我自己的iMac上本地部署了下R1 7B蒸馏版,详见下文的
    2.1.1 Ollama下的终端命令行交互
    2.1.2 Ollama下的open-webui交互:基于docker安装,且支持联网搜索
  2. 2.4日晚上,可能是自己早已习惯在博客中尽可能把所有细节一次性讲清楚
    所以我自己又尝试了
    2.1.3 基于Ollama + ChatBox部署deepseek-r1:7b
    2.2.1 基于Ollama + Page Assist搭建本地知识库问答系统:且支持联网搜索


    且同时让同事文弱尝试了通过vLLM推理deepseek-r1,也已更新在了下文的
    2.3 通过vLLM推理deepseek-r1
  3. 2.5日早上,再度尝试了
    2.2.2 基于Ollama + AnythingLLM搭建本地知识库问答
  4. 2.8日下午,在文中体现出不同电脑上的安装差别——分Mac版、Windows版、Linux
    后两者分别来自同事朝阳、同事青睐的贡献
  5. 2.15上午,新增:3.1.3 单卡4090部署Deepseek-R1 671B Q4量化版
  6. 3.2日下午,补充「3.1.3 单卡或4卡4090部署Deepseek-R1 671B Q4量化版」的相关内容

第一部分 本地部署之前的准备工作:各个版本、推理框架、硬件资源

1.1 DeepSeek-R1的多个版本:加上2个原装671B的,总计8个参数版本

在huggingface上总共有以下几种参数的deepseek R1

  1. DeepSeek-R1 671B
  2. DeepSeek-R1-Zero 671B
  3. DeepSeek-R1-Distill-Llama-70B
  4. DeepSeek-R1-Distill-Qwen-32B
  5. DeepSeek-R1-Distill-Qwen-14B
  6. DeepSeek-R1-Distill-Llama-8B
  7. DeepSeek-R1-Distill-Qwen-7B
  8. DeepSeek-R1-Distill-Qwen-1.5B

1.2 主流的大模型推理框架:分为PC端和Android端

首先,看推理框架,目前主流的大模型推理框架主要有以下5种:

1.3 不同参数的模型所要求的硬件

其次,看硬件要求,很显然,不同参数的模型所要求的硬件各不相同(修改自微信好友杨老师整理的表格)

模型参数最低GPU配置最低CPU配置建议内存建议硬盘空间
R1 or R1-Zero 满血版

A/H100(80G) x 16-18

某乎上便有篇文章:16张H100部署模型DeepSeek-R1

值得一提的是,A100/A800原生并不支持FP8运算,如果A800要执行FP8精度计算,需要在指令层面进行模拟(存在精度转换计算)

如下图所示(图源)

当然,如果用8-bit量化,则显存需求降至671B,需9-12张H100

Xeon 8核192GB2TB固态
R1-distill-llama70BRTX 4090(24GB) x 2,相当于合起来48Gi9-13900K64GB1TB固态
R1-distill-Qwen32BRTX 4090(24GB)i7-13700K64GB1TB固态
R1-distill-Qwen14BRTX 4060S(16GB)Ryzen 732GB500G固态

* 至于7B或8B的只需4G或以上显存即可,1.5B的则只需1G或以上显存

可以看到

因此提供的精度就是FP8(e4m3),占单个Byte空间

"quantization_config": {
    "activation_scheme": "dynamic"
    "fmt": "e4m3",
    "quant method": "fp8"
    "weight_block_size": [
        128,
        128
      ]
    }
  • 模型分片163个,模型的文件总计约为642G,如果以FP3精度加载到显存,模型参数就需要642GB空间
    按PagedAttention论文预估的KV-Cache+和激化值估计至少要占到30%左石
  • 在推理场景下,输出大多是长文本,那就更多了,而且具体模型还要实测,或用Nvidia Nisight+分析显存占用。估计常规部署都需要800GB以上,10张A800打底

而大部分消费者或开发者拥有的硬件资源是有限的,故关于网上大多数人所谓部署的R1都是其蒸馏Llama/Qwen后的8B/32B/70B版本,本质是微调后的Llama或Qwen模型

1.4 蒸馏版和满血版的两类部署

最后,咱们下面有两种部署对象

  1. 一个是部署各种蒸馏版

    也不要小看蒸馏版,虽然R1蒸馏llama/qwen的版本效果上不及R1 671B满血版,但还是挺能打的


    详见下图,在与GPT-4o 0513、o1 mini、QwQ-32B preview PK的过程中,各个蒸馏版在六个榜单中的五个榜单 都拿到了第一

  2. 一个是部署R1 or R1-Zero 满血版

第二部分 通过Ollama/vLLM/MNN本地部署R1蒸馏版:支持联网及知识库问答(含PC端和手机端)

2.1 基于Ollama和各类插件构建智能对话:终端、open-webui、chatbox

2.1.1 Ollama下的终端命令行交互

首先,671B的R1光模型本身就有688G:

所以,一般用户比较好跑的还是R1的蒸馏版

ollama目前支持部署多种模型,包括且不限于目前最流行的deepseek R1,也包括之前的llama 3.3等

我下午在我自己的iMac上本地部署了下R1 7B蒸馏版(同事朝阳则在Windows上试了下,同事青睐则在Linux上 试了下),还想办法支持了联网搜索,这一切确实比之前更平权了,速度可以的,效果的话 毕竟就7B嘛——和671B 满血版还是有很大差距的

我的iMac Retina 4K, 21.5-inch, 2017配置如下

  • 处理器 3,4 GHz 四核Intel Core i5
  • 图形卡 Radeon Pro 560 4 GB
  • 内存16 GB 2400 MHZ DDR4
  • macOS Ventura 13.6.7

同事朝阳Windows的配置如下

  • CPU:Intel(R) Core(TM) i5-8300H
  • 显卡:NVIDIA GeForce GTX 1050Ti 4G独显
  • 内存:16G

具体怎么操作呢,进入Ollama页面

  1. Download Ollama,我个人电脑因为是iMac,故选择macOS版本——180M大小
    如果是Windows、或Linux,则分别对应选择

    其中,如果是Windows
    如同事朝阳所说,则Windows上下载后,先不要着急安装,因为会默认安装到C盘中,为避免占用C盘空间,可以先打开终端(cmd),通过OllamaSetup.exe /dir="E:\Program Files\Ollama”命令可以指定Ollama安装目录——这里由于Windows会默认安装到C盘,故和其他系统如Mac需特别注意下

    且Ollama安装好之后,需先关闭,在配置并保存完环境变量后重新启动
    接下来,指定大模型存储目录
    1、打开“开始”菜单,搜索“环境变量”,点击“编辑系统环境变量”

    2、在“系统属性”窗口中,点击“环境变量 按钮。在“用户变量”下,点击“新建”,输入变量名“ollama_models”,变量值为你想要存储模型的目录路径,如 “D:\Program Files\ollama_models”,点击 “确定” 保存更改


    其中,如果是ubuntu
    如同事青睐所说,则如下安装Ollama
    curl -fsSL https://ollama.com/install.sh | sh
    可以查看ollama版本
    ollama -v
    以下则是其他的命令
    ollama

    还可以查看ollama的服务运行状态
    # 要查看当前正在运行的服务,可以使用以下命令:
    sudo systemctl list-units --type=service --state=running

    如遇问题,可以课程《DeepSeek原理与项目实战营》群内多多讨论
  2. 在模型列表页面,下载deepseek R1模型:ollama.com/library/deepseek-r1,然后可以选择比如R1蒸馏qwen2 7B的蒸馏版

  3. 打开本地的命令提示符「我个人电脑是iMac,故在启动台的搜索框里:输入终端,即可打开」,输入以下命令后,回车键开始下载安装对应参数的模型:
    ollama pull deepseek-r1:7b
    下载完成后,可以通过ollama list指令查看所有本地模型占用的存储空间
    ollama list
    想看具体某一个模型的参数。可以使用ollama show指令:
    ollama show <模型名称>
    具体如下图所示

  4. 然后再运行以下命令,便可以和deepseek R1对话了
    ollama run deepseek-r1:7b

    比如可以提问它:为何deepseek影响力这么大——当然,我当时这个例子 举的并不好,因为它没联网(不过,下一节会增加联网搜索的功能),故它已有的预训练知识,回答不了这种时效性很强的问题,大家通过命令行交互的时候,可以问它数学题,毕竟其本质是个推理模型

2.1.2 Ollama下的open-webui交互:基于docker安装,且支持联网搜索

当然,如果你希望有更好的交互方式,则可以考虑用ollama的标配前端open-webui

  1. 首先通过docker的官网下载docker
    docker.p2hp.com
    我直接用的Google账号注册

    如果是ubuntu,则可以
    1)第一步:准备ubuntu系统
    我使用的是win11的wsl2 ubuntu 子系统(也可以使用VM虚拟机),详情见:window11使用wsl2安装Ubuntu22.04
    2)第二步:ubuntu安装docker(命令行版)
    linux 安装配置docker与网络代理,详情见:Ubuntu 安装 docker 配置环境及其常用命令


    如遇问题,可以课程《DeepSeek原理与项目实战营》群内多多讨论
  2. 安装好后在右下角点击Terminal,打开控制台

  3. 输入以下命令——等待安装完成
    docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
    然后在docker页面可以看到如下呈现

  4. 点击上面的链接:http://localhost:3000/auth,创建相关管理员账号之后

    即可开始和R1对话拉

可能有同学疑问,这个7B没法联网,有点弱智啊,好问题

  1. 巧的是,在管理员面板上:http://localhost:3000/admin/settings,可以打开联网搜索滴,如果有相应搜索引擎的API,则自行设置,否则可以选择免费的duckduckgo

  2. 然后点击聊天界面的左下角 + 按钮,选择联网搜索

  3. 则一切大功告成

2.1.3 基于Ollama + ChatBox部署deepseek-r1:7b

除了上面的open-webui之外,当然,也有人说,chatbox 是个很方便的图形界面,比open web-UI 好用

一不做二不休,那我们再试下这个chatbox

  1. 通过Ollama部署好deepseek-r1:7b之后,再通过chatbox官网下载对应的客户端:chatboxai
  2. 下载好chatbox之后,进行如下图所示的一系列设置「比如模型的提供方选择OLLAMA.API,且在下拉框处选择本地已经安装的模型deepseek-r1:7b」

  3. 接下来,便可以提问R1 7B拉

2.2 基于Ollama和Page Assist/AnythingLLM构建本地知识库问答系统

2.2.1 基于Ollama + Page Assist搭建本地知识库问答系统:且支持联网搜索

也有人称,Page Assist 直接提供了一个类似Open WebUI的交互界面来运行本地的大模型,故我们再试下这个Page Assist

更何况在通过Ollama部署好deepseek-r1:7b之后,如果你想让DeepSeek R1不仅仅是一个问答机器人,而是一个具有专有知识的智能助手,那就需要搭建本地知识库了

实现也很简单——基于Page Assist即可

  1. 直接打开Chrome的插件市场,搜索并添加Page Assist插件

  2. 安装完插件后,点击插件图标,选择本地搭建的DeepSeek模型,进行配置,且支持联网搜索——背后还是基于免费的duckduckgo

  3. 且点击页面右上角的设置按钮,还可以进入RAG(RetrievalAugmented Generation)模式

  4. 上传你自己的知识库

此外,在Google浏览器下浏览任意网页时,可以随时调用R1,针对网页提问R1

2.2.2 基于Ollama + AnythingLLM搭建本地知识库问答

除了通过page Assist搭建本地知识库外,还可以通过AnythingLLM

  1. 在其官网下载客户端:https://anythingllm.com/desktop
  2. 下载好了之后,选择模型

  3. 一切安装好了之后,点击界面左上角-工作区的上传按钮

    即可上传自己的知识库

2.3 通过vLLM推理deepseek-r1

本2.3节基本为我司大模型项目组的文弱编写

2.3.1 基于vLLM的命令行交互——R1-Distill-Llama-8B

  1. 首先,新建一个conda环境:
    ​​​​​​​conda create -n vllm_test python=3.10
  2. 然后配置该conda环境:
    conda activate vllm_test
    
    pip install vllm
  3. 配置好以后,启动vllm推理服务:
    vllm serve path_to/DeepSeek-R1-Distill-Llama-8B --tensor-parallel-size 1 --max-model-len 32768 --enforce-eager --gpu_memory_utilization=0.98 --enable-chunked-prefill --port 6060
    默认是8000端口,可以修改port里的参数来改变服务端口
    vllm serve后面的模型路径改为本地下载好的模型的实际绝对路径
  4. 启动vllm服务后,便可以直接提问了,比如输入如下命令行:
    ​
    curl http://localhost:6060/v1/chat/completions \
    
    -H "Content-Type: application/json" \
    
    -d '{
    
      "model": "path_to/DeepSeek-R1-Distill-Llama-8B ",
    
      "messages": [
    
        {"role": "system", "content": "You are a helpful assistant."},
    
        {"role": "user", "content": "题目:有五个人站成一排,每个人手中都拿着一顶帽子,帽子的颜色可以是红色、蓝色或绿色。每个人都能看到自己前面的人头上的帽子颜色,但看不见自己头上的帽子,且每个人只能看到前面人的帽子颜色,而无法看见自己的帽子和别人背后的帽子。每个人都可以听到别人说话的内容,但不能交换信息。规则:每个人都知道一共有三种颜色的帽子(红、蓝、绿),并且帽子是随机分配的,每种颜色可能有多个,但也可能没有。每个人会依次回答自己头上的帽子颜色,能正确猜出自己帽子颜色的人可以获得奖励。第一个人只能听到后面四个人的回答,无法知道任何自己的信息;第二个人只能听到后面三个人的回答,依此类推。第一个人可以先做一个声明,告知后面的人如何推理他们自己的帽子颜色。问题:如果所有人都能完美推理出自己头上的帽子颜色,问:第一个人应该如何开始,才能确保最多的人能够猜对自己帽子颜色?"}
    
      ],
    
      "max_tokens": 2000,
    
      "temperature": 0.7,
    
      "top_p": 0.9
    
    }'

2.3.2 基于vllm + open WebUi 部署r1 7b

同事文弱因为电脑显存有限,所以找了一个量化的7b模型,重在跑通流程「如他所说,open webui需要docker,所以autodl上不能用,但是我的电脑显存又比较小,我去魔搭社区找到了一个8bit的r1 7b弄的,最终在wsl2上启动的vllm服务,在Windows上启动的open webui

对于wsl2的部分:

  1. 第一步:下载模型
    git lfs install
    
    git clone https://www.modelscope.cn/okwinds/DeepSeek-R1-Distill-Qwen-7B-Int8-W8A16.git
  2. 第二步:搭建环境
    conda create -n vllm_deploy python=3.10
    
    conda activate vllm_deploy
    
    pip install vllm
  3. 第三步:用vllm启动推理服务
    vllm serve /home/duke/playground/models/DeepSeek-R1-Distill-Qwen-7B-Int8-W8A16  --max-model-len 32768 --enforce-eager --gpu_memory_utilization=0.9 --enable-chunked-prefill
  4. 第四步:得到wsl2的实际ip地址
    ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1
    
    172.18.xxx.xxx

对于Windows部分

  1. 第一步:下载docker桌面版
    在docker官网(www.docker.com)下载Windows的docker桌面版
  2. 第二步:运行(下载)open Webui docker
    docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
  3. 第三步:在本地浏览器输入 localhost:3000 进入open Webui界面
    注册并登录之后
    点击左下角的settings:

    在settings的界面再点击admin settings:

    在接下来的页面点击Connections,点击以后在 Manage OpenAI API Connections 这个框中填入「注意,这里只是个设置框,并不需要你事先有OpenAI的API」:
    http://172.18.xxx.xxx:8000/v1 (这里的ip地址为wsl2的地址,而不是localhost)
    在同事文弱的环境中,必须用http协议,否则会报错。默认是https,这里需要注意一下

    在第二框中填入一个空格即可

    点击右下角的齿轮再连接就可以了
  4. 第四步:对话验证
    新建一个对话框,这个时候就可以找到我们在wsl2中vllm部署的模型了
    加载该模型即可开始对话

2.4 本地手机端部署DeepSeek-R1蒸馏Llama/Qwen后的版本

直接通过这个链接:mnn_llm_app_debug_0_1.apk,下载Android apk,安装之后,在应用内的模型列表最后一个,直接安装R1-1.5B-Qwen-MNN 即可

我另一个同事朝阳——我司七月大模型项目组负责人,也验证了下,没问题

第三部分 无蒸馏前提下本地部署R1 or R1-Zero 671B满血版

本地部署R1 or R1-Zero 满血版又分为两种方式

  1. 一种是做了各种量化的,此乃属于追求满血版但资源还是有限不得不做的折中处理
  2. 一种是不做任何量化的,这种属于土豪路径,如果你是用的这个路线,请私我,原因很简单,我也想多一些土豪朋友

3.1 折中路径:无蒸馏但量化部署Deepseek-R1 671B满血版

3.1.1 本地CPU上运行 Deepseek-R1 Q8量化版的完整的硬件 + 软件设置

huggingface 的一工程师Matthew Carrigan展示了在本地CPU上运行 Deepseek-R1 的完整的硬件 + 软件设置「他使用的是 670B 模型,无蒸馏,Q8 量化,实现全质量,总成本 6,000 美元——GPU版本得10万美元+

核心硬件方面

  • 主板:技嘉 MZ73-LM0 或 MZ73-LM1。有 2 个 EPYC 插槽,以获得 24 个 DDR5 RAM 通道
  • CPU:2x 任何 AMD EPYC 9004 或 9005 CPU
    “LLM 一代的瓶颈在于内存带宽,因此您不需要高端产品。如果真的想降低成本,请购买 9115 甚至 9015”
  • RAM:24×32GB DDR5-RDIMM
    因为需要 768GB(以适应模型)跨 24 个 RAM 通道(以获得足够快的带宽),故意味着 24 x 32GB DDR5-RDIMM 模块

关键组件方面

  • 电源:该系统的功耗出奇地低!(<400W)
    “但是,您需要大量的 CPU 电源线来为 2 个 EPYC CPU 供电。Corsair HX1000i 的功率足够了。”
  • 机箱:具有用于安装完整服务器主板的螺丝安装座
  • 散热器:适合AMD EPYC 有 SP5 插槽的就行

系统调优方面

  • 最后,SSD:任何适合 R1 的 1TB 或更大的 SSD 都可以。“推荐 NVMe,只是因为启动模型时你必须将 700GB 复制到 RAM 中
  • 软件部分:安装 Linux,进入 BIOS 并将 NUMA 组数设置为 0。这将确保模型的每一层都交错在所有 RAM 芯片上,从而使我们的吞吐量加倍。安装 Llama。下载 700G 的DeepSeek-R1-Q8_0 版本

软件部署

  1. 安装llama.cpp:git clone https://github.com/ggerganov/llama.cpp
  2. 下载模型权重:HuggingFace Q8_0目录全量700GB(⚠️确保存储空间)
  3. 一切完成后,设置以下代码:
    llama-cli -m ./DeepSeek-R1.Q8_0-00001-of-00015.gguf --temp 0.6 -no-cnv -c 16384 -p "<|User|>How many Rs are there in strawberry? <|Assistant|>"

这个版本没有 GPU,生成速度是每秒 6 到 8 个tokens,作者认为考虑到价格,这个非 GPU 硬件的方案可以接受。因为运行的是 Q8 量化的完整 670B 模型,因此质量应与 Deepseek API 无异

至于为什么不用GPU?

  1. 显存墙限制:保持Q8精度需700GB+显存,单张H100仅80GB → 需9张组集群 → 成本超10万美元
  2. 量化损耗困境:若降精度至FP16,8卡H100即可运行 → 但模型质量显著下降 ≈ 智商砍半
  3. 性价比暴击:本方案以1/20成本实现可用推理速度(对比GPU方案6-8tps vs 50-100tps)

3.1.2 GPU上跑无蒸馏但动态量化的Deepseek-R1 671B满血版

Unsloth AI 在 HuggingFace 上提供了 “动态量化” 版本来大幅缩减模型的体积

所谓“动态量化” 的核心思路是:对模型的少数关键层进行高质量的 4-6bit 量化,而对大部分相对没那么关键的混合专家层(MoE)进行大刀阔斧的 1-2bit 量化

为什么可以做呢,原因在于他们观察到,DeepSeek 的前 3 层是全连接层,而非 MoE 层


作为回顾,MoE(专家混合)层使得能够在不增加模型计算量(FLOPs)的情况下增加参数数量,因为他们动态地将大多数条目掩码为 0,因此实际上跳过了对这些零值条目的矩阵乘法运算「更多请参阅此条推文:x.com/danielhanchen/status/1868748998783517093

  1. 总之,通过这种方法,DeepSeek R1 全量模型可压缩至最小 131GB(1.58-bit 量化),极大降低了本地部署门槛,甚至能在单台 Mac Studio 上运行
  2. Unsloth AI 提供了4 种动态量化模型(1.58 至 2.51 比特,文件体积为 131GB 至 212GB)
    MoE BitsDisk SizeTypeQualityLinkDown_proj
    1.58-bit131GBIQ1_SFairhuggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-IQ1_S2.06/1.56bit
    1.73-bit158GBIQ1_MGoodhuggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-IQ1_M2.06bit
    2.22-bit183GBIQ2_XXSBetterhuggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-IQ2_XXS2.5/2.06bit
    2.51-bit212GBQ2_K_XLBesthuggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-Q2_K_XL3.5/2.5bit

部署此类大模型的主要瓶颈是内存+显存容量,建议配置如下:

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

若硬件条件有限,可尝试体积更小的 1.58-bit 量化版(131GB),可运行于:

  • 单台 Mac Studio
    192GB 统一内存,参考案例可见 X 上的 @ggerganov,成本约 5600 美元
  • 2×Nvidia H100 80GB
    参考案例可见 X 上的 @hokazuya,成本约 4~5 美元 / 小时

且在这些硬件上的运行速度可达到 10+ token / 秒

// 待更

3.1.3 单卡或4卡4090部署Deepseek-R1 671B Q4量化版

上面的方案都需要比较高的硬件成本或比较大的显存,那可能很多朋友问了,我只有一张4090,可否部署671B,哪怕量化版也行啊

嗯,好问题! 咱们就来基于清华大学ktranformers方案,通过单卡4090部署Deepseek-R1 671B Q2/Q4量化版

  1. 对于ktranformers方案,简单来说是“内存换显存”思路,可以极大降低deepseek r1模型的部署成本
    对个人用户来说,高内存显然要比高显存的成本要低的多。如果有想低成本个人或者小团队部署的话,可以尝试本节介绍的部署方案
  2. 本次实验因没暂时没有在autodl上找到足够高内存的机器,固先测试了deepseek r1 Q2量化模型的部署,具体教程如下(如有合适配置,部署更高版本的r1基本思路也是一样的):
    ....

// 单卡4090部署R1 671B暂在「七月在线​​​​​​​」首页的deepseek项目实战营中,本文待更

本文先分享一下4卡4090部署Deepseek-R1 671B Q4量化版,当然,之所以是用四卡,是为了增加系统内存,autodl上是一张4090对应120g内存,实际用ktransfomer部署至少需要387g内存

且cuda版本:12.1 (及以上),同事文弱那里是12.4,模型大小377G

首先,是环境配置

  1. 环境配置
    新建环境
    conda create --name ktransformers python=3.11
    conda activate ktransformers 
    初次新建完可能需要先在控制台输入conda init再重启会话
  2. 下载依赖包
    pip install torch packaging ninja cpufeature numpy
    编译flash-attn包可能会花费大约1个小时的时间
    MAX_JOBS=4 pip install flash-attn --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install --upgrade setuptools wheel cmake
  3. 下载ktransfomers的repo
    git clone https://github.com/kvcache-ai/ktransformers.git
    编译项目(这里也需要比较久的时间):
    cd ktransformers
    git submodule init
    git submodule update
    export USE_NUMA=1
    make dev_install 
    另外需要注意看下系统libstdc++.so.6文件中支持的GLIBCXX版本:
    strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
    如果没有GLIBCXX_3.4.32版本,则需要升级GCC 和 libstdc++等:
    sudo apt update
    sudo apt upgrade
    sudo apt install gcc g++

其次,是模型下载

这里只需要下载GGUF文件即可

具体仓库地址为:
https://www.modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/files

from modelscope import snapshot_download
snapshot_download(
  repo_id = "unsloth/DeepSeek-R1-GGUF",
  local_dir = "DeepSeek-R1-GGUF",
  allow_patterns = ["*Zero-Q4_K_M*"], )

且可以nohup启动下载任务,防止本地网络波动打断下载:

nohup download.py >download.log 2>&1 &

最后,是模型运行

因网络原因,建议先启动hugging face镜像:

export HF_ENDPOINT=https://hf-mirror.com

然后可以启动local_chat,在控制台进行与Q4模型的对话:

python ./ktransformers/local_chat.py --model_path deepseek-ai/DeepSeek-R1 --gguf_path /root/autodl-tmp/models/DeepSeek-R1-GGUF/DeepSeek-R1-Q4_K_M --cpu_infer 32 --max_new_tokens 10000

参数说明:

  1. --model_path 是对应huggingface上的仓库名称,运行以后实际不会下这个模型,只是会下载该仓库中关于config之类的几个几k的小文件
  2. --gguf_path即为实际下载的模型的路径
  3. --cpu_infer根据官方指导,设置为比物理核心数稍小一点就可以了。超过物理核心数性能也不会更高

启动以后可能会先卡住几十秒钟(不同配置可能情况会有不同),然后会出现加载模型的界面

等待加载结束以后(这一过程在本次实验中大概需要7~8分钟),即可开始对话

通过我们的一系列实验可知

  1. 用ktransformers部署deepseek r1 Q4模型,占用资源为:GPU 12g,内存51+672(cache)g,模型存储 377g
    平均每秒token数为8点左右
    回答很细致,有多处反思,实测要比o3-mini-high和claude3.7思考全面
  2. 尚不支持高并发
    但是对个人用户来说,高内存显然要比高显存的成本要低的多
    如果有想低成本个人或者小团队部署的话,可以尝试ktransfomers的部署方案

3.2 土豪路径:无蒸馏不量化部署Deepseek-R1 671B满血版

想既不蒸馏、且不量化部署R1满血版,其实过程跟上面差不多,但核心问题是对硬件的要求很高——正因为需要十几张H100,故涉及到对GPU集群的管理

配置项配置要求
GPUH100 × 16,或者A800 × 16
CPU128核
内存512GB
磁盘1TB

环境则最好

  • OS:Ubuntu 20.04/22.04 LTS
  • NCCL: 2.18.1+(支持多机通信)

此外,再安装一些基础的依赖

# 基础依赖
apt-get install -y build-essential cmake libopenmpi-dev

# Python环境
conda create -n deepseek python=3.10
pip install torch==2.1.0+cu121 deepspeed==0.13.0 transformers==4.38.0 accelerate

3.2.1 分布式部署方案(基于DeepSpeed + 模型并行):以2台8卡A800为例

  1. 从官方渠道获取DeepSeek-R1-671B完整权重
    然后将模型转换为HuggingFace格式
    python -m transformers.utils.convert_llama_checkpoint \
      --input_dir /path/to/raw_ckpt \
      --model_size 671B \
      --output_dir /path/to/hf_format
  2. 配置DeepSpeed多机多卡策略
    编写DeepSpeed配置文件 (ds_config.json):
    {
      "train_batch_size": "auto",
      "zero_optimization": {
        "stage": 3,
        "offload_optimizer": {
          "device": "cpu",
          "pin_memory": true
        },
        "overlap_comm": true,
        "contiguous_gradients": true
      },
      "fp16": {
        "enabled": true,
        "loss_scale": 0,
        "loss_scale_window": 1000,
        "initial_scale_power": 16
      },
      "activation_checkpointing": {
        "partition_activations": true,
        "contiguous_memory_optimization": true
      },
      "flops_profiler": {
        "enabled": true,
        "profile_step": 1
      }
    }
    以上涉及到的一些显存优化
    \rightarrow  ZeRO-3阶段:显存优化核心,将模型参数、梯度、优化器状态分片存储
    ZeRO3本质上属于数据并行,详见 此文《大模型并行训练指南——通俗理解Megatron-DeepSpeed:从模型并行(张量并行、流水线并行)到数据并行ZeRO3优化》的「第四部分 数据并行与ZeRO」
    \rightarrow  启用CPU Offloading:将优化器状态和参数卸载至CPU内存(当然,此举需大内存支持),进一步降低显存压力
    \rightarrow  使用梯度检查点(Activation Checkpointing):减少中间激活值显存占用
  3. 启动脚本​​​​​​​
    # 主节点(IP:192.168.1.100)执行:
    deepspeed --num_nodes=2 --num_gpus=8 --master_addr=192.168.1.100 --master_port=6000 \
      run_inference.py \
      --model_name /data/deepseek-r1-671b \
      --use_deepspeed \
      --deepspeed_config ds_config.json \
      --tensor_parallel_degree 8 \   # 单机内8卡张量并行
      --pipeline_parallel_degree 2   # 跨节点流水线并行
    上面的倒数第三行 用的上文的ds_config.json
    至于最后两行则属于是关键参数调优
    ——比如模型并行度调整:
    根据模型结构(如MoE层数),调整tensor_parallel_degree和pipeline_parallel_degree组合
    示例:对671B模型,建议 tensor_parallel=8(单机内) + pipeline_parallel=2(跨机)
    关于流水线并行,详见此文《大模型并行训练指南——通俗理解Megatron-DeepSpeed:从模型并行(张量并行、流水线并行)到数据并行ZeRO3优化》的『第三部分 流水线并行Pipeline Parallelism(模型并行的另一种)』

// 待更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_JULY_v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值