deepseek大模型部署踩坑心得

年初,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的模型库


                
<think>好的,用户现在的问题是询问如何在Debian 12.9上安装sglang,并使用它来部署GGUF量化模型。之前他们问过关于使用sglang.launch_server部署GGUF模型的问题,现在需要更具体的步骤,特别是针对Debian系统的安装和部署。 首先,我需要确认用户的环境是Debian 12.9,这可能影响依赖项的安装。例如,Debian可能使用apt作为包管理器,需要安装Python、pip和相关开发库。之前的回答中已经提到了安装sglang和llama-cpp-python,但可能需要更详细的步骤,比如如何安装Python 3.10或更高版本,以及构建依赖。 接下来,用户可能需要知道如何从源代码安装llama.cpp,特别是如果预编译的包不可用的话。之前的回答提到了克隆仓库和make,但可能需要更详细的说明,比如安装必要的构建工具(如gcc、make、cmake)和依赖项(如Python开发文件)。 然后是关于安装sglang的部分。需要确保使用pip安装正确的版本,可能包括额外的依赖,比如[all]扩展,以支持所有功能。此外,用户可能需要安装CUDA版本的llama-cpp-python以启用GPU加速,这里需要指导他们如何设置CMAKE_ARGS环境变量。 在部署模型部分,用户需要知道如何指定GGUF文件的路径,以及必要的参数,如--quantization gguf。可能还需要调整GPU层数,特别是如果他们使用NVIDIA显卡的话。此外,验证部署的步骤需要明确,比如使用curl测试API端点,或者运行Python测试脚本。 还需要考虑用户可能的错误和问题。例如,如果安装过程中出现依赖问题,如何解决,或者如果模型加载失败,如何检查路径和权限。此外,GPU加速可能因为缺少CUDA库或驱动而失败,需要指导用户检查安装。 可能用户的实际需求是在自己的服务器或本地机器上部署一个高效的模型服务,因此需要确保步骤尽可能详细,避免遗漏任何关键步骤。同时,用户可能对Linux系统有一定了解,但可能需要明确的命令示例,特别是针对Debian的特定包安装命令。 最后,需要整理出一个结构化的回答,分步骤指导安装依赖、安装sglang、准备GGUF模型、部署模型以及验证和故障排除。确保命令准确无误,参数解释清楚,帮助用户顺利完成部署。</think>针对 **Debian 12.9 系统**安装 `sglang` 并部署 **GGUF 量化模型**的详细步骤: -- ### **1. 安装系统依赖** ```bash # 更新系统软件包 sudo apt update && sudo apt upgrade -y # 安装基础编译工具和Python环境 sudo apt install -y build-essential cmake python3.10 python3-pip python3-venv # 安装CUDA驱动(若需GPU加速,可选) sudo apt install -y nvidia-driver nvidia-cuda-toolkit # 根据显卡型号调整 ``` --- ### **2. 安装sglang与llama.cpp依赖** ```bash # 创建Python虚拟环境(推荐) python3 -m venv sglang-env source sglang-env/bin/activate # 安装sglang核心库(包含launch_server) pip install sglang[all] # 安装支持GGUF的llama-cpp-python(CPU/GPU二选一) # 纯CPU版本: pip install llama-cpp-python # 启用GPU加速的CUDA版本: CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install --force-reinstall llama-cpp-python ``` --- ### **3. 准备GGUF量化模型** #### **方式一:直接下载已有GGUF模型** 从社区获取预量化模型(如[Hugging Face Hub](https://huggingface.co/models?search=gguf)): ```bash # 示例:下载 Mistral-7B-Instruct-v0.2 的Q4量化模型 wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf ``` #### **方式二:自行量化模型** 若需自行转换模型,需编译 `llama.cpp`: ```bash # 克隆llama.cpp仓库 git clone https://github.com/ggerganov/llama.cpp cd llama.cpp && make -j4 # 转换Hugging Face模型为GGUF格式(需原始模型文件) python3 convert.py --input-dir /path/to/model-hf --outfile ./model.gguf # 执行Q4量化(示例为q4_k_m) ./quantize ./model.gguf ./model-q4.gguf q4_k_m ``` -- ### **4. 部署GGUF模型** ```bash # 启动服务(假设模型文件为mistral-7b-instruct-v0.2.Q4_K_M.gguf) python -m sglang.launch_server \ --model-path ./mistral-7b-instruct-v0.2.Q4_K_M.gguf \ --quantization gguf \ --host 0.0.0.0 \ # 允许外部访问 --port 30000 \ --gpu-layers 20 # 启用GPU加速(根据显存调整层数) ``` --- ### **5. 验证服务** #### **通过API调用测试** ```bash curl http://localhost:30000/generate \ -H "Content-Type: application/json" \ -d '{ "prompt": "法国的首都是哪里?", "max_tokens": 20, "temperature": 0.7 }' ``` #### **通过Python脚本测试** ```python from sglang import function @function def simple_qa(s, question): s += f"问题:{question}\n答案:" s += sglang.gen("answer", max_tokens=50) question = "如何用Python计算列表的平均值?" state = simple_qa.run(question=question) print(state["answer"]) ``` -- ### **常见问题解决** 1. **依赖冲突**: - 若安装失败,尝试在虚拟环境中操作:`python3 -m venv <环境名> && source <环境名>/bin/activate` 2. **GPU加速失效**: - 确认已安装CUDA版 `llama-cpp-python` 并指定 `--gpu-layers` - 检查GPU驱动状态:`nvidia-smi` 3. **模型加载失败**: - 确保GGUF文件路径正确,且用户有读取权限 - 检查模型与 `llama-cpp-python` 版本兼容性 4. **内存不足**: - 减小 `--gpu-layers` 值或使用更低量化等级(如 `q2_k`) - 添加 `--n_ctx 2048` 减小上下文长度 --- ### **参数说明** | 参数 | 作用 | |--|--------------------------------------------------------------------| | `--model-path` | **必填**,GGUF模型文件路径(绝对或相对路径) | | `--quantization` | **必填**,指定 `gguf` 表示加载GGUF量化模型 | | `--gpu-layers` | 启用GPU加速时卸载到显卡的模型层数(如RTX 4090可设20-30层) | | `--host`/`--port` | 服务监听地址和端口(默认`localhost:30000`) | | `--n_ctx` | 最大上下文长度(默认4096,显存不足时需降低) |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值