DeepSeek 本地部署二三事

445 阅读8分钟

最近 DeepSeek 可谓是相当火爆,凭借先进的算法和卓越的能力,一跃成为现象级 AI 产品。不过,随着用户量暴增,加上服务器遭受攻击,大家在使用时经常会遇到服务器繁忙的情况。另外不少企业老板都在焦虑询问怎么部署 deepseek,能不能部署 deepseek 来给他们自己以及他们的客户提供最顶级的 AI 能力。

本文将系统梳理 deepseek 本地部署的方法。 让我们能够精细、快速、安全、稳定的使用 deepseek。

7255DE05-49BF-4022-9443-6EB790D7032F.png

一、为什么要本地部署 DeepSeek ?

本地部署主要适用于以下几种场景:

  • 设备性能强:如果设备配备独立显卡,性能强劲,本地部署能让 DeepSeek R1 完全可以高效运行提供更好的体验。
  • 数据安全至上:处理敏感数据时,本地部署可有效避免数据泄露风险,保障数据安全。
  • 紧密结合工作流程:当你需要频繁或复杂地处理任务,且希望与本地工作流程紧密结合,本地部署是个不错的选择。
  • 降低使用成本:若日常频繁使用,且 API 调用成本较高,本地部署能帮你节省开支。
  • 个性化定制需求:对于想在开源模型基础上进行个性化定制和优化的用户,本地部署必不可少。

二、部署 deepseek 需要什么样的条件?

1. 显存大小评估

FE8F9389-0989-4C51-9194-5320336C2AF8.png

相信我们很多人已经看过上面这张图,各种规模的模型都给了我们一个推荐的 GPU 配置。那我们先来了解一下这张图推理的逻辑。

显存占用大小主要有四大决定因素:

1. 参数规模

参数规模比较好理解,就是指模型拥有的参数量,我们经常所说的 7B、16B、32B、70B、671B 就是指这个维度上的描述,通常模型的参数数量直接影响显存占用。参数越多,显存需求越大。

2. 模型精度

模型精度主要指数值存储格式的精确度,由浮点数的符号位、指数位和小数位组合方式决定,直接影响数值表示范围和计算准确性。常见精度类型包括:

(1)基础浮点精度

  • FP32(单精度):32位存储(1符号位+8指数位+23小数位),精度高但显存占用大
  • FP16(半精度):16位存储(1+5+10),显存减半但易出现数值溢出
  • BF16(Brain Float 16):16位存储(1+8+7),保持FP32指数范围,更适合深度学习

(2)量化精度

  • INT8:8位整数存储,显存占用仅为FP32的25%,需配合量化技术使用
  • NF4:4位归一化浮点,通过分位数映射优化信息存储效率

(3)特殊设计格式

  • TF32(Tensor Float 32):19位混合格式(1+8+10),在NVIDIA GPU上平衡性能与精度
  • FP8:2022年新标准,含E4M3(4+3)和E5M2(5+2)两种变体

简单来说FP32、FP16、INT8、INT4 的关系就类似于无损原图、高清压缩(显存减半但精度损失可接受)、标清压缩(细节丢失)、缩略图(性能可能骤降)

3. 中间激活值

中间激活值指的是推理过程中产生的临时数据值,这些值需要存储在显存中以供后续计算使用,尤其是在反向传播时。通常占用基础显存的1-1.5倍。以Transformer层为例:

  • 注意力模块:需存储QKV矩阵、Softmax输出、Dropout掩码等,单层显存占用为2bsh+4bsa+2bsab为batch_size,s为序列长度,h为隐层维度,a为注意力头数)
  • MLP模块:需存储线性层输出、ReLU激活值等,单层显存占用为2bsh+2bsmm为中间层维度)

4. KV Cache机制

KV Cache是为了避免在生成阶段反复计算Key和Value,从而节省计算时间,但会增加显存占用,是一种时间换空间的方法。它是Transformer架构的上下文记忆单元。KV Cache 的计算公式为: 

KV Cache=用户数×序列长度×隐藏层维度×2×精度字节 当对话长度从1024增至2048时,显存占用直接翻倍。

显存占用示例(FP16精度):

  1. 单序列场景LLaMA-13B模型(40层)处理4096 tokens时: KV Cache=2×1×4096×5120×40×2=3,355,443,200 字节≈3.3 GB
  2. 批量推理场景OPT-30B模型(48层)处理1024序列长度、128批次时: KV Cache=2×128×1024×7168×48×2=180 GB此时显存占用是模型权重(60GB)的3倍

综上显存评估公式大致为:总显存=模型参数×精度+激活值+KV Cache+系统预留(3GB)

2. 性能需求评估

  • QPS计算:假如单卡处理100 token需4秒,那么单卡QPS=0.25

  • 延迟优化:INT8量化可使吞吐量提升2-3倍,但需平衡精度损失

3. 横向扩展策略

并行方式优势劣势适用场景
数据并行QPS线性增长显存翻倍高并发短文本
模型并行显存需求分摊延迟增加30%超大模型部署
混合并行灵活组合调试复杂超大规模集群

4. 典型场景配置方案

场景1:智能客服系统

  • 需求:QPS=5,对话长度200token
  • 配置方案

场景2:知识库问答

  • 需求:单用户8000token长对话
  • 配置方案:1×RTX 4090 + INT8量化(显存23GB)

场景3:批量文本处理

  • 需求:QPS=10,200token短文本
  • 配置方案:2×RTX 3090数据并行 + INT8量化

5. 实战建议

  1. 显存预留:实际需求=理论值×1.2安全系数
  2. 量化策略:FP16性价比最优,INT4慎用
  3. 架构选择:MoE模型可降低67%显存消耗(如DeepSeek v3)
  4. 监控工具:使用NVIDIA DCGM实时监控显存/算力利用率

三、应该使用什么部署方案?

总得来说流行的方案主要有三种 1. ollama 2. vllm 3. transformer 原生支持

方案对比

特性OllamavLLMTransformers
部署难度⭐⭐⭐⭐⭐⭐⭐⭐⭐
推理速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
适合场景快速验证生产环境定制开发

方案一: Ollama快速部署(推荐新手)

步骤1:安装Ollama

curl -fsSL <https://ollama.ai/install.sh> | sh

步骤2:拉取模型

ollama pull deepseek-r1:7b-chat

步骤3:启动对话

ollama run deepseek-r1:7b-chat # 输入测试提示 >>> 请分析房价下一个拐点

方案二:vLLM高性能推理

vLLM专注于推理加速,基于操作系统的内存管理思想,使用了PagedAttention、连续批处理等关键技术。这些技术可以显著提升吞吐量和降低延迟。 在高并发、生产环境下具有非常大的优势。如果对于追求性能和成本效率,vLLM是个不错的选择。

1. 创建python 虚拟环境

python -m venv vllm_env 
source vllm_env/bin/activate  # 对于 Linux/Mac 
.vllm_envScriptsactivate  # 对于 Windows

2. 安装vllm和transformers依赖

pip install vllm==0.3.3 transformers==4.37.1

3. 下载 DeepSeek 模型

可以从 Hugging Face Hub 下载 DeepSeek 模型。以 deepseek-llm-7b-base为例:

from huggingface_hub 
import snapshot_download 
model_name = "deepseek-ai/deepseek-llm-7b-base" 
snapshot_download(repo_id=model_name, local_dir="deepseek-llm-7b-base")

或者使用命令行下载:

git lfs install git clone <https://huggingface.co/deepseek-ai/deepseek-llm-7b-base>

4. 使用 vLLM 部署模型 简单推理脚本

以下是一个简单的 Python 脚本,用于使用 vLLM 加载并推理 DeepSeek 模型:

from vllm import LLM, SamplingParams 
# 加载模型 model_path = "deepseek-llm-7b-base" 
llm = LLM(model=model_path) 
# 设置采样参数 
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100) 
# 输入提示 
prompts = ["介绍一下谁是东坝小亮仔。" ] 
# 生成文本 
outputs = llm.generate(prompts, sampling_params) 
# 打印结果 
for output in outputs:
    prompt = output.prompt    
    generated_text = output.outputs[0].text     
    print(f"Prompt: {prompt}")     
    print(f"Generated text: {generated_text}")

5. 作为 API 服务部署

如果你想将模型部署为 API 服务,可以使用 vLLM 提供的 vllm.entrypoints.api_server 模块。

python -m vllm.entrypoints.api_server --model deepseek-llm-7b-base

方案三:Transformers原生支持

1. 创建虚拟环境(可选但推荐)

在 Linux/Mac 系统上执行以下命令:

python -m venv deepseek_env source deepseek_env/bin/activate

在 Windows 系统上执行:

python -m venv deepseek_env .deepseek_envScriptsactivate

2. 安装依赖库

pip install transformers torch accelerate bitsandbytes
  • transformers:用于加载和使用预训练模型。

  • torch:深度学习框架,支持模型的计算。

  • accelerate:用于加速模型在多 GPU 或 TPU 上的训练和推理。

3. 量化加载(8-bit)

from transformers import AutoTokenizer, AutoModelForCausalLM 
model = AutoModelForCausalLM.from_pretrained(
     "deepseek-ai/deepseek-r1-7b-chat",
     load_in_8bit=True,
     device_map="auto"
) 
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-r1-7b-chat") 
# 构建对话 
inputs = tokenizer("法国的首都是哪里?", return_tensors="pt").to("cuda") 
outputs = model.generate(**inputs, max_new_tokens=50) 
print(tokenizer.decode(outputs[0]))

此外随着时间发展,已经诞生了更多更有效的部署方式。例如KTransformer等等可以在异构的架构上进行推理。最后,部署不是终点,而是智能化转型的起点。当DeepSeek在本地服务器平稳运行的那一刻,企业和个人真正的AI征程才刚刚开始。