前言
爆火以后便应了“人红是非多”那句话,不但遭受各种大规模攻击,即便后来挡住了大部分攻击,但海内外大量闯入deepseek官网一探究竟的网友也把他们的服务器压得不堪重负
导致一提问,要么频繁显示:服务器繁忙,请稍后再试;要么回答了 但无法联网,致使我朋友圈内一些不知情的朋友说:看把媒体给能的,各种瞎吹,但其实不过尔尔..
怎么办呢?
一方面,微信上的好友老师木发圈表示
“ 这个春节有点特别,虽然没有休息一天,大家也没有怨言。看到DeepSeek创造的一个又一个奇迹,我很焦急但苦于没有资源,同事突发奇想:国产卡多,用国产卡吧 ” 于是,在25年的2.1日,硅基流动 x 华为云联合推出基于昇腾云的 DeepSeek R1 & V3 推理服务!
个人认为这是国产GPU替代英伟达GPU之路的里程碑时刻 虽然在此之前,华为以及不少国内公司在GPU国产化上做了很多工作、努力,而且在不少政务单位已经做了很多替代
但我们过去两年 对外接各种大模型项目的时候——我司「七月在线」除了开发一系列内部产品 也对外接各种项目,不论是客户还是我们内部,对国产GPU是否好适配、以及适配之后是否丝滑好用 始终存在着一定的担忧 我相信,这一情况会随着本次的「昇腾云的 DeepSeek R1 & V3 推理服务」而越来越好
另一方面,我原本不想看什么本地部署的,也不得不关注下各种版本下的本地部署
本文便来重点探讨各种版本下、各种情况下的DeepSeek-R1的本地部署「当然,某乎上也有很多类似“ 如何在本地部署DeepSeek-R1模型?” 的帖子,但有了本文之后,你基本上不用再看别的帖子了」
如此,本文来了,以下是本文的更新记录「本文不用付费、不用各种附加条件,直接看即可,且涵盖各种版本的部署、各种交互模式、各种额外功能比如联网、知识库——齐活」
2.3日下午,在我自己的iMac上本地部署了下R1 7B蒸馏版,详见下文的2.1.1 Ollama下的终端命令行交互
2.1.2 Ollama下的open-webui交互:基于docker安装,且支持联网搜索
2.4日晚上,可能是自己早已习惯在博客中尽可能把所有细节一次性讲清楚 所以我自己又尝试了2.1.3 基于Ollama + ChatBox部署deepseek-r1:7b
2.2.1 基于Ollama + Page Assist搭建本地知识库问答系统:且支持联网搜索 且同时让同事文弱尝试了通过vLLM推理deepseek-r1,也已更新在了下文的2.3 通过vLLM推理deepseek-r1
2.5日早上,再度尝试了2.2.2 基于Ollama + AnythingLLM搭建本地知识库问答
2.8日下午,在文中体现出不同电脑上的安装差别一分Mac版、Windows版、Linux 后两者分别来自同事朝阳、同事青睐的贡献
1.1 DeepSeek-R1的多个版本:加上2个原装671B的,总计8个参数版本
在huggingface上总共有以下几种参数的deepseek R1
DeepSeek-R1 671B
DeepSeek-R1-Zero 671B
DeepSeek-R1-Distill-Llama-70B
DeepSeek-R1-Distill-Qwen-32B
DeepSeek-R1-Distill-Qwen-14B
DeepSeek-R1-Distill-Llama-8B
DeepSeek-R1-Distill-Qwen-7B
DeepSeek-R1-Distill-Qwen-1.5B
1.2 主流的大模型推理框架:分为PC端和Android端
首先,看推理框架,目前主流的大模型推理框架主要有以下5种:
SGLang 完全支持 BF16 和 FP8 推理模式下的 DeepSeek-V3 模型
Ollama,相对简单易用,大众用户首选
vLLM,开发者首选,便于商业化诉求 支持 FP8 和 BF16 模式的 DeekSeek-V3 模型,用于张量并行和管道并行详见:一文通透vLLM与其核心技术PagedAttention:减少KV Cache碎片、提高GPU显存利用率(推理加速利器)
LLaMA.cpp
MNN-LLM,偏Android手机端 MNN-LLM展现了卓越的CPU性能,预填充速度相较于llama.cpp提高了8.6倍,相较于fastllm提升了20.5倍,解码速度分别快了2.3倍和8.9倍
更多详情,请参见论文《MNN-LLM: A Generic Inference Engine for Fast Large Language Model Deployment on Mobile Devices》
1.3 不同参数的模型所要求的硬件
其次,看硬件要求,很显然,不同参数的模型所要求的硬件各不相同(下表修改自微信好友杨老师整理的表格)
模型参数
最低GPU配置
最低CPU配置
建议内存
建议硬盘空间
R1 or R1-Zero 满血版
A/H100(80G) x 16-18
某乎上便有篇文章:16张H100部署模型DeepSeek-R1
值得一提的是,A100/A800原生并不支持FP8运算,如果A800要执行FP8精度计算,需要在指令层面进行模拟(存在精度转换计算)
如下图所示(图源)
Xeon 8核
192GB
2TB固态
R1-distill-llama70B
RTX 4090(24GB) x 2
i9-13900K
64GB
1TB固态
R1-distill-Qwen32B
RTX 4090(24GB)
i7-13700K
64GB
1TB固态
R1-distill-Qwen14B
RTX 4060S(16GB)
Ryzen 7
32GB
500G固态
可以看到
完全开源的DeepSeek-R1 671B参数进行本地私有化部署的显卡资源要求极高 包括我司七月在线内部之前也最多用过8张80G的A100——通过1.5K条paper-review数据微调LLaMA2 70B「详见此文《七月论文审稿GPT第4.2版:通过15K条paper-review数据微调Llama2 70B(含各种坑)》」
-
打开网易新闻 查看更多图片
因此提供的精度就是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:
huggingface.co/deepseek-ai/DeepSeek-R1,没有一定的GPU集群 确实不好弄
即便是量化版本,最极端的Q1量化,也要94G:huggingface.co/bartowski/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-IQ1_S
Q4量化版,则大概360G,如果有5张 A100 80G,则可以试一下huggingface.co/bartowski/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-IQ4_XS
所以,一般用户比较好跑的还是R1的蒸馏版
如果是10G显存
可以跑这个R1蒸馏Qwen 2.5 14b的IQ4_NL版本huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-14B-GGUF/blob/main/DeepSeek-R1-Distill-Qwen-14B-IQ4_NL.gguf
如果是16G显存
一方面,可以试试蒸馏的Qwen 2.5 32b的版本,IQ3_M量化,不过,有人实测后,说损失有点严重——相当于Q4以下量化都不太推荐
二方面,我司七月在线的《DeepSeek项目实战营》提供的GPU预装了DeepSeek-R1-Distill-Llama-8B:https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B,欢迎大伙体验
我下午在我自己的iMac上本地部署了下R1 7B蒸馏版,还想办法支持了联网搜索,这一切确实比之前更平权了,速度可以的,效果的话 毕竟就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安装好之后,需先关闭,在配置并保存完环境变量后重新启动
接下来,指定大模型存储目录
其中,如果是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蒸馏qwen27B的蒸馏版
3. 打开本地的命令提示符「我个人电脑是iMac,故在启动台的搜索框里:输入终端,即可打开」,输入以下命令后,回车键开始下载安装对应参数的模型:
ollama pull deepseek-r1:7b下载完成后,可以通过ollama list指令查看所有本地模型占用的存储空间
ollama list想看具体某一个模型的参数。可以使用ollama show指令:
ollama show
<模型名称>
4. 然后再运行以下命令,便可以和deepseek R1对话了
ollama run deepseek-r1:7b
2.1.2 Ollama下的open-webui交互:基于docker安装,且支持联网搜索
当然,如果你希望有更好的交互方式,则可以考虑用ollama的标配前端open-webui
如果是ubuntu,则可以
1)第一步:准备ubuntu系统
我使用的是win11的wsl2 ubuntu 子系统(也可以使用VM虚拟机),详情见:window11使用wsl2安装Ubuntu22.04
2)第二步:ubuntu安装docker(命令行版)
linux 安装配置docker与网络代理,详情见:Ubuntu 安装 docker 配置环境及其常用命令 如遇问题,可以课程《DeepSeek原理与项目实战营》群内多多讨论
2. 安装
输入以下命令——等待安装完成
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
可能有同学疑问,这个7B没法联网,有点弱智啊,好问题
2.1.3 基于Ollama + ChatBox部署deepseek-r1:7b
除了上面的open-webui之外,当然,也有人说,chatbox 是个很方便的图形界面,比open web-UI 好用
一不做二不休,那我们再试下这个chatbox
1. 通过Ollama部署好deepseek-r1:7b之后,再通过chatbox官网下载对应的客户端:chatboxai
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即可
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.102. 然后配置该conda环境:
conda activate vllm_test
pip install vllm3. 配置好以后,启动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的部分:
第一步:下载模型
git lfs install
git clone https://www.modelscope.cn/okwinds/DeepSeek-R1-Distill-Qwen-7B-Int8-W8A16.git第二步:搭建环境
conda create -n vllm_deploy python=3.10
conda activate vllm_deploy
pip install vllm第三步:用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第四步:得到wsl2的实际ip地址
ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1
172.18.xxx.xxx对于Windows部分
第一步:下载docker桌面版 在docker官网(www.docker.com)下载Windows的docker桌面版
第二步:运行(下载)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
第三步:在本地浏览器输入 localhost:3000 进入open Webui界面 注册并登录之后 点击左下角的settings:
在接下来的页面点击Connections,点击以后在 Manage OpenAI API Connections 这个框中填入「 注意,这里只是个设置框,并不需要你事先有OpenAI的API」:http://172.18.xxx.xxx:8000/v1 (这里的ip地址为wsl2的地址,而不是localhost) 在同事文弱的环境中,必须用http协议,否则会报错。默认是https,这里需要注意一下
在第二框中填入一个空格即可
点击右下角的齿 轮再连 接就可以了
第四步:对话验证 新建一个对话框,这个时候就可以找到我们在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 满血版又分为两种方式
一种是做了各种量化的,此乃属于追求满血版但资源还是有限不得不做的折中处理
一种是不做任何量化的,这种属于土豪路径,如果你是用的这个路线,请私我,原因很简单,我也想多一些土豪朋友
3.1 折中路径:无蒸馏但量化部署Deepseek-R1 671B满血版
3.1.1本地CPU上运行 Deepseek-R1 的完整的硬件 + 软件设置
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 版本
软件部署
安装llama.cpp:git clone https://github.com/ggerganov/llama.cpp
下载模型权重:HuggingFace Q8_0目录全量700GB(⚠️确保存储空间)
一切完成后,设置以下代码:
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」
总之,通过这种方法,DeepSeek R1 全量模型可压缩至最小 131GB(1.58-bit 量化),极大降低了本地部署门槛,甚至能在单台 Mac Studio 上运行
2.Unsloth AI 提供了4 种动态量化模型(1.58 至 2.51 比特,文件体积为 131GB 至 212GB)
MoE Bits
Disk Size
Type
Quality
Link
Down_proj
1.58-bit
131GB
IQ1_S
Fair
huggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-IQ1_S
2.06/1.56bit
1.73-bit
158GB
IQ1_M
Good
huggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-IQ1_M
2.06bit
2.22-bit
183GB
IQ2_XXS
Better
huggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-IQ2_XXS
2.5/2.06bit
2.51-bit
212GB
Q2_K_XL
Best
huggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-UD-Q2_K_XL
3.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.2 土豪路径:无蒸馏不量化部署Deepseek-R1 671B满血版
想既不蒸馏、且不量化部署R1满血版,其实过程跟上面差不多,但核心问题是对硬件的要求很高——正因为需要十几张H100,故涉及到对GPU集群的管理
配置项
配置要求
GPU
H100 * 16
CPU
128核
内存
512GB
磁盘
1TB
// 待更
除了以上,更多DeepSeek相关见七月在线的《DeepSeek原理与项目实战营》
↓↓↓扫码了解课程↓↓↓
课程咨询可找苏苏老师VX:julyedukefu008或七月其他老师
