自从deepseek R1发布之后「详见《》」,deepseek便爆火 爆火以后便应了“人红是非多”那句话,不但遭受各种大规模攻击,即便后来挡住了大部分攻击,但海内外大量闯入deepseek官网一探究竟的网友也把他们的服务器压得不堪重负 导致一提问,要么频繁显示:服务器繁忙,请稍后再试;要么回答了 但无法联网,致使我朋友圈内一些不知情的朋友说:看把媒体给能的,各种瞎吹,但其实不过尔尔.. 怎么办呢? 如此,本文来了,以下是本文的更新记录「本文不用付费、不用各种附加条件,直接看即可,且涵盖各种版本的部署、各种交互模式、各种额外功能比如联网、知识库——齐活」 2.3日下午,在我自己的iMac上本地部署了下R1 7B蒸馏版,详见下文的 2.4日晚上,可能是自己早已习惯在博客中尽可能把所有细节一次性讲清楚 2.5日早上,再度尝试了 2.8日下午,在文中体现出不同电脑上的安装差别——分Mac版、Windows版、Linux 2.15上午,新增:3.1.3 单卡4090部署Deepseek-R1 671B Q4量化版 3.2日下午,补充「3.1.3 单卡或4卡4090部署Deepseek-R1 671B Q4量化版」的相关内容 第一部分 本地部署之前的准备工作:各个版本、推理框架、硬件资源 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种: 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核 192GB 2TB固态R1-distill-llama70B RTX 4090(24GB) x 2,相当于合起来48G i9-13900K 64GB 1TB固态 R1-distill-Qwen32B RTX 4090(24GB) i7-13700K 64GB 1TB固态 R1-distill-Qwen14B RTX 4060S(16GB) Ryzen 7 32GB 500G固态 * 至于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空间 在推理场景下,输出大多是长文本,那就更多了,而且具体模型还要实测,或用Nvidia Nisight+分析显存占用。估计常规部署都需要800GB以上,10张A800打底 而大部分消费者或开发者拥有的硬件资源是有限的,故关于网上大多数人所谓部署的R1都是其蒸馏Llama/Qwen后的8B/32B/70B版本,本质是微调后的Llama或Qwen模型 1.4 蒸馏版和满血版的两类部署最后,咱们下面有两种部署对象 一个是部署各种蒸馏版 也不要小看蒸馏版,虽然R1蒸馏llama/qwen的版本效果上不及R1 671B满血版,但还是挺能打的 详见下图,在与GPT-4o 0513、o1 mini、QwQ-32B preview PK的过程中,各个蒸馏版在六个榜单中的五个榜单 都拿到了第一 一个是部署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页面 Download Ollama,我个人电脑因为是iMac,故选择macOS版本——180M大小 其中,如果是ubuntu 如同事青睐所说,则如下安装Ollama curl -fsSL https://ollama.com/install.sh | sh 可以查看ollama版本 ollama -v 以下则是其他的命令 ollama 在模型列表页面,下载deepseek R1模型:ollama.com/library/deepseek-r1,然后可以选择比如R1蒸馏qwen2 7B的蒸馏版 打开本地的命令提示符「我个人电脑是iMac,故在启动台的搜索框里:输入终端,即可打开」,输入以下命令后,回车键开始下载安装对应参数的模型: ollama pull deepseek-r1:7b 下载完成后,可以通过ollama list指令查看所有本地模型占用的存储空间 ollama list 想看具体某一个模型的参数。可以使用ollama show指令: ollama show <模型名称> 具体如下图所示 然后再运行以下命令,便可以和deepseek R1对话了 ollama run deepseek-r1:7b 比如可以提问它:为何deepseek影响力这么大——当然,我当时这个例子 举的并不好,因为它没联网(不过,下一节会增加联网搜索的功能),故它已有的预训练知识,回答不了这种时效性很强的问题,大家通过命令行交互的时候,可以问它数学题,毕竟其本质是个推理模型 当然,如果你希望有更好的交互方式,则可以考虑用ollama的标配前端open-webui 首先通过docker的官网下载docker 1)第一步:准备ubuntu系统 我使用的是win11的wsl2 ubuntu 子系统(也可以使用VM虚拟机),详情见: 2)第二步:ubuntu安装docker(命令行版) linux 安装配置docker与网络代理,详情见: 如遇问题,可以课程《DeepSeek原理与项目实战营》群内多多讨论 安装好后在右下角点击Terminal,打开控制台 输入以下命令——等待安装完成 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页面可以看到如下呈现 点击上面的链接::3000/auth,创建相关管理员账号之后 可能有同学疑问,这个7B没法联网,有点弱智啊,好问题 巧的是,在管理员面板上::3000/admin/settings,可以打开联网搜索滴,如果有相应搜索引擎的API,则自行设置,否则可以选择免费的duckduckgo 然后点击聊天界面的左下角 + 按钮,选择联网搜索 则一切大功告成 除了上面的open-webui之外,当然,也有人说,chatbox 是个很方便的图形界面,比open web-UI 好用 一不做二不休,那我们再试下这个chatbox 通过Ollama部署好deepseek-r1:7b之后,再通过chatbox官网下载对应的客户端:chatboxai 下载好chatbox之后,进行如下图所示的一系列设置「比如模型的提供方选择OLLAMA.API,且在下拉框处选择本地已经安装的模型deepseek-r1:7b」 接下来,便可以提问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即可 直接打开Chrome的插件市场,搜索并添加Page Assist插件 安装完插件后,点击插件图标,选择本地搭建的DeepSeek模型,进行配置,且支持联网搜索——背后还是基于免费的duckduckgo 且点击页面右上角的设置按钮,还可以进入RAG(RetrievalAugmented Generation)模式 上传你自己的知识库 此外,在Google浏览器下浏览任意网页时,可以随时调用R1,针对网页提问R1 除了通过page Assist搭建本地知识库外,还可以通过AnythingLLM 在其官网下载客户端:https://anythingllm.com/desktop 下载好了之后,选择模型 一切安装好了之后,点击界面左上角-工作区的上传按钮 本2.3节基本为我司大模型项目组的文弱编写 2.3.1 基于vLLM的命令行交互——R1-Distill-Llama-8B首先,新建一个conda环境: conda create -n vllm_test python=3.10 然后配置该conda环境: conda activate vllm_test pip install vllm 配置好以后,启动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服务后,便可以直接提问了,比如输入如下命令行: curl :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桌面版 第二步:运行(下载)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界面 :8000/v1 (这里的ip地址为wsl2的地址,而不是localhost) 在同事文弱的环境中,必须用http协议,否则会报错。默认是https,这里需要注意一下 在第二框中填入一个空格即可 点击右下角的齿轮再连接就可以了 第四步:对话验证 直接通过这个链接:mnn_llm_app_debug_0_1.apk,下载Android apk,安装之后,在应用内的模型列表最后一个,直接安装R1-1.5B-Qwen-MNN 即可 我另一个同事朝阳——我司七月大模型项目组负责人,也验证了下,没问题 本地部署R1 or R1-Zero 满血版又分为两种方式 一种是做了各种量化的,此乃属于追求满血版但资源还是有限不得不做的折中处理 一种是不做任何量化的,这种属于土豪路径,如果你是用的这个路线,请私我,原因很简单,我也想多一些土豪朋友 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 RAM:24×32GB DDR5-RDIMM 关键组件方面 电源:该系统的功耗出奇地低!(<400W) 机箱:具有用于安装完整服务器主板的螺丝安装座 散热器:适合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? 显存墙限制:保持Q8精度需700GB+显存,单张H100仅80GB → 需9张组集群 → 成本超10万美元 量化损耗困境:若降精度至FP16,8卡H100即可运行 → 但模型质量显著下降 ≈ 智商砍半 性价比暴击:本方案以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 上运行 Unsloth AI 提供了4 种动态量化模型(1.58 至 2.51 比特,文件体积为 131GB 至 212GB)
MoE BitsDisk SizeTypeQualityLinkDown_proj 部署此类大模型的主要瓶颈是内存+显存容量,建议配置如下: DeepSeek-R1-UD-IQ1_M:内存 + 显存 ≥ 200 GB DeepSeek-R1-Q4_K_M:内存 + 显存 ≥ 500 GB 若硬件条件有限,可尝试体积更小的 1.58-bit 量化版(131GB),可运行于: 单台 Mac Studio 2×Nvidia H100 80GB 且在这些硬件上的运行速度可达到 10+ token / 秒 // 待更 3.1.3 单卡或4卡4090部署Deepseek-R1 671B Q4量化版上面的方案都需要比较高的硬件成本或比较大的显存,那可能很多朋友问了,我只有一张4090,可否部署671B,哪怕量化版也行啊 嗯,好问题! 咱们就来基于清华大学ktranformers方案,通过单卡4090部署Deepseek-R1 671B Q2/Q4量化版 对于ktranformers方案,简单来说是“内存换显存”思路,可以极大降低deepseek r1模型的部署成本 本次实验因没暂时没有在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 首先,是环境配置 环境配置 下载依赖包 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 下载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文件即可 具体仓库地址为: 且可以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参数说明: --model_path 是对应huggingface上的仓库名称,运行以后实际不会下这个模型,只是会下载该仓库中关于config之类的几个几k的小文件 --gguf_path即为实际下载的模型的路径 --cpu_infer根据官方指导,设置为比物理核心数稍小一点就可以了。超过物理核心数性能也不会更高 启动以后可能会先卡住几十秒钟(不同配置可能情况会有不同),然后会出现加载模型的界面 等待加载结束以后(这一过程在本次实验中大概需要7~8分钟),即可开始对话 通过我们的一系列实验可知 用ktransformers部署deepseek r1 Q4模型,占用资源为:GPU 12g,内存51+672(cache)g,模型存储 377g 尚不支持高并发 想既不蒸馏、且不量化部署R1满血版,其实过程跟上面差不多,但核心问题是对硬件的要求很高——正因为需要十几张H100,故涉及到对GPU集群的管理 配置项配置要求GPU H100 × 16,或者A800 × 16 CPU 128核 内存 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为例从官方渠道获取DeepSeek-R1-671B完整权重 配置DeepSpeed多机多卡策略 ZeRO3本质上属于数据并行,详见 此文《》的「第四部分 数据并行与ZeRO」 启动脚本 # 主节点(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 |