使用 Ollama 在RTX 4090上部署 DeepSeek R1 Distill 系列模型并优化
前言
最近DeepSeek-R1爆火,原因有多种。不光价格便宜,性能强劲还开源。更难能可贵的是官方放出了几个蒸馏模型,包含各个尺寸。
- deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
- deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
- deepseek-ai/DeepSeek-R1-Distill-Llama-8B
- deepseek-ai/DeepSeek-R1-Distill-Qwen-14B
- deepseek-ai/DeepSeek-R1-Distill-Qwen-32B
- deepseek-ai/DeepSeek-R1-Distill-Llama-70B
这使得一般的消费级硬件也有机会体验Reasoning模型的魅力。不过请注意,这和真正的DeepSeek-R1相差甚远。即便是DeepSeek-R1-Distill-Qwen-32B
也只是达到o1-mini级别的水平。
这一点可以参考官方给出的图表(下面这张图是可以交互的,你可以关闭你不想要的数据)。
{"grid":{"bottom":"10%","containLabel":true,"left":"8%","right":"8%"},"legend":{"data":["DeepSeek-R1","OpenAI-o1-1217","DeepSeek-R1-32B","OpenAI-o1-mini","DeepSeek-V3"],"top":30},"series":[{"barGap":"0","data":[79.8,96.3,71.5,97.3,90.8,49.2],"label":{"position":"top","show":true},"name":"DeepSeek-R1","type":"bar"},{"data":[79.2,96.6,75.7,96.4,91.8,48.9],"label":{"position":"top","show":true},"name":"OpenAI-o1-1217","type":"bar"},{"data":[72.6,90.6,62.1,94.3,87.4,36.8],"label":{"position":"top","show":true},"name":"DeepSeek-R1-32B","type":"bar"},{"data":[63.6,93.4,60,90,85.2,41.6],"label":{"position":"top","show":true},"name":"OpenAI-o1-mini","type":"bar"},{"data":[39.2,58.7,59.1,90.2,88.5,42],"label":{"position":"top","show":true},"name":"DeepSeek-V3","type":"bar"}],"tooltip":{"axisPointer":{"type":"shadow"},"trigger":"axis"},"xAxis":{"axisLabel":{"interval":0},"data":["AIME 2024\n(Pass@1)","Codeforces\n(Percentile)","GPQA Diamond\n(Pass@1)","MATH-500\n(Pass@1)","MMLU\n(Pass@1)","SWE-bench Verified\n(Resolved)"],"type":"category"},"yAxis":{"max":100,"min":0,"name":"Accuracy / Percentile (%)","nameGap":32,"nameLocation":"center","type":"value"}}Ollama提供了更方便使用和管理模型的接口和工具,它的后端是llama.cpp。一个基于CPU推理优化的工具,也支持GPU。
Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 2, and other large language models.
安装Ollama
这个根据Download Ollama的指引完成即可。我的环境如下:
- 操作系统是Windows 11
- GPU是NVIDIA RTX 4090
- CPU是Intel 13900K
- 内存是128G DDR5
创建模型
在安装好Ollama后,我们就需要创建模型了。一种办法是直接从Ollama Library拉取。
|
|
不过这样拉取的模型的默认上下文长度是4096。这显然不够用也不合理,所以我们要修改一下。
一种办法是直接修改Modelfile。如果你不知道一个模型的Modelfile可以执行以下命令查看它的Modelfile。
|
|
这里我给出我用的Modelfile,可以新建一个文本文件保存,比如叫做DeepSeek-R1-Distill-Qwen-32B-Q4_K_M.txt
。
|
|
它包含多个部分,我们暂时用不着改太多,只需要注意FROM
表明构建使用的模型(告诉Ollama用什么构建),以及num_ctx
的值(默认4096,除非通过API请求的时候有额外设置)这里我设置的16000
,它就是上下文长度,越长消耗的显存/内存,计算资源就越多。
注意
经过测试,RTX 4090差不多可以在KV Cache量化为q8_0,启用Flash Attention的情况下运行32B q4_K_M量化模型的同时,保持16K的上下文长度。如果同等情况下运行14B q4_K_M量化模型可以达到64K的上下文长度。有关KV Cache量化和Flash Attention的内容我会稍后讲解。
当我们创建好Modelfile后就可以使用如下命令创建模型了。
|
|
提示
其格式如下:
ollama create <要创建的模型名> -f <Modelfile的路径和名字>
在此过程中Ollama会拉取模型并且创建它,完成后可以执行ollama list
检查模型列表,你应该会看见类似的东西。
|
|
优化
Ollama支持多个优化参数,它们通过环境变量控制。
OLLAMA_FLASH_ATTENTION
:1
开启,0
关闭OLLAMA_HOST
:Ollama监听的IP,默认是127.0.0.1
,如果要对外服务需要改成0.0.0.0
OLLAMA_KV_CACHE_TYPE
:默认fp16
,可以设置q8_0
,或者q4_0
OLLAMA_NUM_PARALLEL
:同时运行的请求数,越多吞吐量越大,显存/内存消耗越多,一般1
就差不多了OLLAMA_ORIGINS
:有关CORS跨站请求的内容,如果你要在其它地方请求Ollama,特别域名不一样的话你要设置对应的域,或者设置*
允许所有来源
Flash Attention是必开的,KV Cache我建议选q8_0
,实测发现q4_0
会让R1的思考长度下降,这可能是因为内容都比较长,上下文比较重要。
Windows 11
要在Windows 11中设置环境变量,需要进入“高级系统设置”,
![/zh-cn/ollama-deepseek-r1-distill/system-properties.avif](/zh-cn/ollama-deepseek-r1-distill/system-properties.avif)
然后选择“环境变量”,之后选择“新建”。重启Ollama使其生效。
![/zh-cn/ollama-deepseek-r1-distill/environment-variables.avif](/zh-cn/ollama-deepseek-r1-distill/environment-variables.avif)
MacOS
在MacOS中可以执行诸如
|
|
的命令来设置环境变量。重启Ollama使其生效。
Linux
在Linux中,在安装完Ollama后可以修改ollama.service
文件来修改它的环境变量。
|
|
然后在[Service]
下添加Environment
字段,类似这样
|
|
保存修改后重载
|
|
不足
Ollama使用的后端llama.cpp并非是为了多并发和高性能的生产环境设计的。比如它对多GPU的支持就不是很理想,它会把模型的层拆分到多个GPU里,这样解决了显存不足的问题,但是这样导致在单一时间内,只有一块GPU在干活。要同时利用多张GPU的性能,我们需要张量并行,这是SGLang或者vLLM擅长的。
至于性能,在和SGLang或者vLLM对比的时候也不占优势,吞吐量远不及后者。其次对多模态模型的支持有限,适配进度缓慢。
客户端
为了更方便使用Ollama中的模型,我推荐两个客户端。Cherry Studio是我觉得好用的本地客户端,LobeChat是我觉得好用的云端客户端(我之前写过一篇 使用 Docker Compose 部署 LobeChat 服务端数据库版本)
🍒 Cherry Studio is a desktop client that supports for multiple LLM providers. Support deepseek-r1
🤯 Lobe Chat - an open-source, modern-design AI chat framework. Supports Multi AI Providers( OpenAI / Claude 3 / Gemini / Ollama / Qwen / DeepSeek), Knowledge Base (file upload / knowledge management / RAG ), Multi-Modals (Vision/TTS/Plugins/Artifacts). One-click FREE deployment of your private ChatGPT/ Claude application.
AI模型接口管理与分发系统,支持将多种大模型转为OpenAI格式调用、支持Midjourney Proxy、Suno、Rerank,兼容易支付协议,可供个人或者企业内部管理与分发渠道使用,本项目基于One API二次开发。🍥 The next-generation LLM gateway and AI asset management system supports multiple languages.
沉浸式双语网页翻译扩展 , 支持输入框翻译, 鼠标悬停翻译, PDF, Epub, 字幕文件, TXT 文件翻译 - Immersive Dual Web Page Translation Extension
New API则是我觉得一个很好的,用来集中管理API并且以OpenAI API格式提供服务的工具。Immersive Translate则是一个好评如潮的翻译插件,它支持调用OpenAI API来进行翻译,也自然可以与Ollama以及New API组合搭配。翻译效果远超传统翻译方法。
相关内容
- 为 Llama.cpp 选择理想的量化类型
- 修正因 Queue 导致的 Flarum 的邮件无法发送问题
- 使用Docker Compose部署LobeChat服务端数据库版本
- Stable Diffusion 元素法典 Part 2
- Stable Diffusion 元素法典 Part 1.5