本文在掘金同步发布:文章地址
更多优质文章,请关注本人掘金账号:人肉推土机的掘金账号
随着大语言模型(LLM)的广泛应用,如何高效部署和推理模型成为开发者关注的核心问题。本文深入解析主流模型部署框架(Transformers、ModelScope、vLLM、LMDeploy、Ollama、SGLang、DeepSpeed),结合其技术原理、优缺点及适用场景,并提供 DeepSeek R1:7B 的详细部署实践案例。
device_map
或 accelerate
。框架 | 开源协议 | 社区活跃度 | 企业支持 | 核心优势 |
---|---|---|---|---|
Transformers | Apache 2.0 | ★★★★★ | Hugging Face | 生态丰富、灵活易用 |
ModelScope | 部分开源 | ★★☆ | 阿里云 | 全流程云原生支持 |
vLLM | Apache 2.0 | ★★★★☆ | 无 | 高吞吐、显存高效 |
LMDeploy | Apache 2.0 | ★★★☆ | 零一万物 | 低延迟、轻量化 |
Ollama | MIT | ★★★☆ | 无 | 极简部署、跨平台 |
SGLang | Apache 2.0 | ★★☆ | 无 | 结构化输出、缓存优化 |
DeepSpeed | MIT | ★★★★☆ | 微软 | 分布式推理、训练集成 |
框架 | 吞吐量 | 延迟 | 易用性 | 硬件需求 | 适用场景 |
---|---|---|---|---|---|
Transformers | 低 | 中 | 高 | 通用 GPU | 快速原型验证 |
ModelScope | 中 | 中 | 中 | 云平台 | 企业级多模态部署 |
vLLM | 极高 | 低 | 中 | 多 NVIDIA GPU | 高并发在线服务 |
LMDeploy | 高 | 极低 | 中 | 单/多 GPU | 实时对话、边缘计算 |
Ollama | 低 | 高 | 极高 | CPU/低端 GPU | 个人开发与测试 |
SGLang | 高 | 中 | 低 | 高端 GPU | 企业级结构化输出 |
DeepSpeed | 中 | 中 | 低 | 多节点 GPU | 分布式推理 |
前置条件:下载deepseek-r1-7b到本地服务器。
部署目标:多 GPU + 4bit 量化推理
步骤详解:
# 步骤 1:安装依赖库(需 PyTorch 2.0+)
pip install transformers accelerate bitsandbytes
# 步骤 2:编写推理脚本
# deepseek_infer.py
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
# 多 GPU + 量化加载
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/deepseek-r1-7b",
device_map="auto", # 自动分配多 GPU
torch_dtype=torch.bfloat16,
load_in_4bit=True, # 启用 4bit 量化
quantization_config={
"load_in_4bit": True,
"bnb_4bit_compute_dtype": torch.bfloat16
}
)
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-r1-7b")
# 步骤 3:启动 Pipeline 服务
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
device="cuda:0", # 指定主 GPU
max_new_tokens=100
)
# 步骤 4:调用推理
response = pipe("如何优化大模型推理性能?")
print(response[0]['generated_text'])
关键参数说明:
device_map="auto"
:自动分配多 GPU 显存(需 accelerate
库支持)load_in_4bit=True
:启用 4bit 量化(节省 75% 显存)bnb_4bit_compute_dtype
:量化计算精度(建议 bfloat16)部署目标:高并发 API 服务 + AWQ 量化
步骤详解:
# 步骤 1:安装 vLLM(需 CUDA 11.8+)
pip install vllm
# 步骤 2:启动 OpenAI 兼容 API 服务
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/deepseek-r1-7b \
--tensor-parallel-size 2 \ # GPU 并行数量
--quantization awq \ # 启用 AWQ 量化
--max-model-len 4096 \ # 最大上下文长度
--gpu-memory-utilization 0.9 # 显存利用率阈值
# 步骤 3:调用 API(Python 示例)
import openai
openai.api_base = "http://localhost:8000/v1"
openai.api_key = "no-key-required"
response = openai.Completion.create(
model="deepseek-r1-7b",
prompt="如何优化大模型推理性能?",
max_tokens=100,
temperature=0.7
)
print(response.choices[0].text)
关键参数说明:
--tensor-parallel-size
:设置 Tensor 并行度(需与 GPU 数量一致)--quantization awq
:使用 AWQ 量化(需模型提供 AWQ 版本权重)--gpu-memory-utilization
:显存利用率(0.9 表示预留 10% 安全空间)部署目标:4bit 量化 + Triton 服务
步骤详解:
# 步骤 1:安装 LMDeploy
pip install lmdeploy
# 步骤 2:模型量化(W4A16)
lmdeploy convert \
deepseek-ai/deepseek-r1-7b \
--dst-path ./deepseek-7b-4bit \
--quant-bit 4 \ # 4bit 量化
--group-size 128 # 量化分组大小
# 步骤 3:启动 Triton 服务
lmdeploy serve triton \
./deepseek-7b-4bit \
--server-name 0.0.0.0 \ # 监听地址
--server-port 33337 \
--instance_num 4 \ # 并发实例数
--tp 2 # Tensor 并行度
# 步骤 4:调用服务(CURL 示例)
curl -X POST http://localhost:33337/v2/models/deepseek_7b/versions/1/generate \
-H "Content-Type: application/json" \
-d '{
"prompt": "如何优化大模型推理性能?",
"max_tokens": 100,
"temperature": 0.7,
"ignore_eos": false
}'
关键参数说明:
--quant-bit 4
:启用 4bit 量化(需模型支持)--group-size 128
:量化分组大小(平衡精度与压缩率)--instance_num
:并发处理请求的引擎实例数部署目标:本地一键部署
步骤详解:
# 步骤 1:安装 Ollama(以 Ubuntu 为例)
curl -fsSL https://ollama.com/install.sh | sh
# 步骤 2:创建 Modelfile
cat > Modelfile <<EOF
FROM deepseek-ai/deepseek-r1-7b
PARAMETER temperature 0.7
PARAMETER num_ctx 4096
SYSTEM "你是一个AI助手,用中文回答技术问题"
EOF
# 步骤 3:构建模型
ollama create deepseek-r1-7b -f Modelfile
# 步骤 4:启动交互式推理
ollama run deepseek-r1-7b "如何优化大模型推理性能?"
# 步骤 5:调用 REST API
curl http://localhost:11434/api/generate \
-d '{
"model": "deepseek-r1-7b",
"prompt": "如何优化大模型推理性能?",
"stream": false
}'
关键参数说明:
num_ctx 4096
:设置上下文窗口大小SYSTEM
:定义系统级提示词(角色设定)stream: false
:关闭流式输出(一次性返回结果)部署目标:结构化输出(JSON 生成)
步骤详解:
# 步骤 1:安装 SGLang
pip install sglang
# 步骤 2:定义结构化输出模板
from pydantic import BaseModel
from sglang import Runtime, Assistant
class OptimizationAdvice(BaseModel):
methods: list[str]
tools: list[str]
difficulty: str
# 步骤 3:初始化运行时
runtime = Runtime(
"deepseek-ai/deepseek-r1-7b",
gpu_memory_utilization=0.8, # 显存利用率
tensor_parallel_size=2 # GPU 并行数
)
assistant = Assistant(runtime)
# 步骤 4:生成结构化结果
response = assistant.generate(
"如何优化大模型推理性能?",
structured_output=OptimizationAdvice,
max_length=200,
temperature=0.7
)
# 输出结构化 JSON
print("推荐方法:", response.methods)
print("工具列表:", response.tools)
关键参数说明:
gpu_memory_utilization
:控制显存分配比例tensor_parallel_size
:设置 GPU 并行数量structured_output
:绑定 Pydantic 模型实现类型约束部署目标:多节点分布式推理
步骤详解:
# 步骤 1:安装 DeepSpeed
pip install deepspeed
# 步骤 2:编写配置文件 ds_config.json
{
"tensor_parallel": {
"tp_size": 2
},
"zero_optimization": {
"stage": 3,
"offload_param": {
"device": "cpu", # 显存不足时卸载到 CPU
"pin_memory": true
}
},
"fp16": {
"enabled": true # 混合精度推理
}
}
# 步骤 3:编写推理脚本 infer.py
from deepspeed.inference import DeepSpeedTPConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-r1-7b")
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-r1-7b")
# 步骤 4:启动分布式推理
deepspeed --num_gpus 2 infer.py \
--model deepseek-r1-7b \
--deepspeed ds_config.json
关键参数说明:
tp_size
:Tensor 并行度(需与 GPU 数量一致)zero_optimization.stage
:启用 ZeRO 显存优化(Stage 3 最激进)offload_param.device
:显存不足时将参数卸载到指定设备所有框架部署完成后,可通过以下命令测试吞吐量(以 vLLM 为例):
# 安装基准测试工具
pip install httpx requests
# 启动压力测试
python -m vllm.entrypoints.benchmark \
--model deepseek-r1-7b \
--request-rate 100 \ # 每秒请求数
--num-prompts 1000 \ # 总请求数
--max-tokens 100 \
--output metrics.json
监控指标:
通过合理选择框架,开发者可最大化发挥 DeepSeek R1:7B 的性能潜力。建议结合业务需求参考官方文档调整参数,并监控 GPU 显存与吞吐量指标。