年初,deepseek大火,年后一到公司就被安排部署deepseek大模型,几天下来于是就有了这篇踩坑心得。
文章目录
1、deepseek系列模型介绍
deepseek公司在github账号deepseek-ai发布的模型MoE架构的deepseek-V3和deepseek-R1,它们都具有6710亿个总参数,但是每个tocken只激活370亿个参数;前者是通用的,适用于聊天,后者擅长推理。另外还发布了6个基于Qwen或llm传统transformer架构的蒸馏版本模型,蒸馏版本参数量相对较少,占用显存较少,但是这6个蒸馏版本模型是以deepseek-R1的标签进行学习的,所以也具有一定的推理能力。
MoE结构和传统transformer一样都具有多头自注意力层,不同是是,MoE将多头自注意力后的FFN层替换成了“专家选择”层,其核心思想是通过选择性激活子模型(专家模型)来提高模型的计算效率和表达能力。如下图所示,图片来自论文:OUTRAGEOUSLY LARGE NEURAL NETWORKS: THE SPARSELY-GATED MIXTURE-OF-EXPERTS LAYER
2、最简单的部署,ollama
网上大多数用ollama部署的基本上都是蒸馏版本而且是量化后的4bit版本,因为这种方式部署快且量化后版本占用显存少。
ollama模型地址:https://ollama.com/library/deepseek-r1:7b
可以看到,ollama上面的模型都是经过4-bit量化的,最后一个671b版本是deepseek-R1,大小是404G,也是经过4-bit量化的。但是好在这种部署方式简单快捷,不需要配置复杂的环境,所以网上大多数都是这种方式的部署方式来体验deepseek大模型的。
2.1 安装ollama
Linux下可以直接命令行安装:curl -fsSL https://ollama.com/install.sh | sh
也可以直接下载编译好的:curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
解压到/usr文件夹:tar -C /usr -xzf ollama-linux-amd64.tgz
2.2 运行
然后命令行启动ollama:ollama serve
另外开一个终端运行:ollama run deepseek-r1:7b会自动下载模型并加载,然后终端就可以聊天了,如下图所示:
当然,如果你服务器显卡资源够多,也可以ollama run deepseek-r1:671b运行真正的deepseek-R1,但是如果需要分布式部署或者是需要推理加速还是建议选用如vllm或SGLang部署为好,因为它们对大模型推理有加速优化。见文章大模型工具对比:SGLang, Ollama, VLLM, LLaMA.cpp如何选择?
3、部署动态量化版本(.gguf文件格式)
参考文章:
[1] https://zhuanlan.zhihu.com/p/21274285958
[2] https://unsloth.ai/blog/deepseekr1-dynamic
步骤:
下载动态量化版本模型:https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF
from modelscope import snapshot_download
snapshot_download(
repo_id = "unsloth/DeepSeek-R1-GGUF",
local_dir = "DeepSeek-R1-GGUF",
allow_patterns = ["*Q2_K_XL*"], # Select quant type Q2_K_XL for 2.51bit
)
法一: 参考文章[1]是先编译llama.cpp,然后合并多个.gguf文件为一个.gguf文件,最后用ollama加载合并文件运行
# cpu版本编译
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
cmake -B build
cmake --build build --config Release
# 编译好的模型文件放在llama.cpp.git/build/bin中
然后用编译生成的llama-gguf-split工具先将多个.gguf文件合并成一个.gguf文件,
cd build/bin
./llama-gguf-split --merge ~/dir/DeepSeek-R1-UD-Q2_K_XL/DeepSeek-R1-UD-Q2_K_XL-00001-of-00005.gguf ~/dir/DeepSeek-R1-UD-Q2_K_XL/DeepSeek-R1-2.51bit.gguf
然后将合并后的gguf文件导入ollama的模型库