最近 DeepSeek 可谓是相当火爆,凭借先进的算法和卓越的能力,一跃成为现象级 AI 产品。不过,随着用户量暴增,加上服务器遭受攻击,大家在使用时经常会遇到服务器繁忙的情况。另外不少企业老板都在焦虑询问怎么部署 deepseek,能不能部署 deepseek 来给他们自己以及他们的客户提供最顶级的 AI 能力。
本文将系统梳理 deepseek 本地部署的方法。 让我们能够精细、快速、安全、稳定的使用 deepseek。
一、为什么要本地部署 DeepSeek ?
本地部署主要适用于以下几种场景:
- 设备性能强:如果设备配备独立显卡,性能强劲,本地部署能让 DeepSeek R1 完全可以高效运行提供更好的体验。
- 数据安全至上:处理敏感数据时,本地部署可有效避免数据泄露风险,保障数据安全。
- 紧密结合工作流程:当你需要频繁或复杂地处理任务,且希望与本地工作流程紧密结合,本地部署是个不错的选择。
- 降低使用成本:若日常频繁使用,且 API 调用成本较高,本地部署能帮你节省开支。
- 个性化定制需求:对于想在开源模型基础上进行个性化定制和优化的用户,本地部署必不可少。
二、部署 deepseek 需要什么样的条件?
1. 显存大小评估
相信我们很多人已经看过上面这张图,各种规模的模型都给了我们一个推荐的 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+2bsa(b为batch_size,s为序列长度,h为隐层维度,a为注意力头数)
- MLP模块:需存储线性层输出、ReLU激活值等,单层显存占用为2bsh+2bsm(m为中间层维度)
4. KV Cache机制
KV Cache是为了避免在生成阶段反复计算Key和Value,从而节省计算时间,但会增加显存占用,是一种时间换空间的方法。它是Transformer架构的上下文记忆单元。KV Cache 的计算公式为:
KV Cache=用户数×序列长度×隐藏层维度×2×精度字节 , 当对话长度从1024增至2048时,显存占用直接翻倍。
显存占用示例(FP16精度):
- 单序列场景LLaMA-13B模型(40层)处理4096 tokens时: KV Cache=2×1×4096×5120×40×2=3,355,443,200 字节≈3.3 GB
- 批量推理场景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.2安全系数
- 量化策略:FP16性价比最优,INT4慎用
- 架构选择:MoE模型可降低67%显存消耗(如DeepSeek v3)
- 监控工具:使用NVIDIA DCGM实时监控显存/算力利用率
三、应该使用什么部署方案?
总得来说流行的方案主要有三种 1. ollama 2. vllm 3. transformer 原生支持
方案对比
| 特性 | Ollama | vLLM | Transformers |
|---|---|---|---|
| 部署难度 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 推理速度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 适合场景 | 快速验证 | 生产环境 | 定制开发 |
方案一: 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征程才刚刚开始。