Appearance
模型部署与推理优化指南
将 LLM 从"能跑起来"到"跑得快、跑得省"是一套系统工程。本指南覆盖本地开发环境搭建、云端生产部署、量化优化策略和性能调试实践。
快速入门:选择你的部署路线
| 场景 | 推荐方案 | 部署时间 | 硬件要求 |
|---|---|---|---|
| 本地开发测试 | Ollama | 5 分钟 | 8GB+ RAM |
| 端侧/私有化部署 | llama.cpp | 15 分钟 | CPU/GPU 均可 |
| 云端高并发 API | vLLM | 30 分钟 | 1x A100 / 等效 GPU |
| NVIDIA 极致性能 | TensorRT-LLM | 1-2 小时 | H100/A100 |
| 复杂 Agent 编排 | SGLang | 30 分钟 | 1x A100 / 等效 GPU |
第一章:本地开发环境
Ollama 快速入门
Ollama 是本地运行大模型的最简单方式。
1. 安装
bash
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# 验证安装
ollama --version2. 运行模型
bash
# 下载并运行 Llama 3
ollama run llama3
# 运行其他模型
ollama run qwen2.5
ollama run deepseek-r1
ollama run mistral3. 自定义模型 创建 Modelfile:
dockerfile
FROM llama3
# 系统提示词
SYSTEM """你是一个专业的技术助手,擅长解释复杂的编程概念。
请用简洁、准确的中文回答。
"""
# 超参数调整
PARAMETER temperature 0.7
PARAMETER top_p 0.9bash
ollama create my-assistant -f Modelfile
ollama run my-assistant4. 启动 API 服务
bash
ollama serve
# 默认端口 11434,OpenAI-compatible APIllama.cpp 进阶部署
当需要更细粒度的控制时,使用 llama.cpp:
bash
# 克隆并编译
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make -j
# 下载 GGUF 模型
huggingface-cli download TheBloke/Llama-2-7B-GGUF llama-2-7b.Q4_K_M.gguf
# 运行
./llama-cli -m llama-2-7b.Q4_K_M.gguf -p "你好" -n 128
# 启动 API 服务
./llama-server -m llama-2-7b.Q4_K_M.gguf --port 8080GGUF 量化格式选择:
| 格式 | 文件大小 | 质量 | 速度 | 适用场景 |
|---|---|---|---|---|
| Q4_0 | 最小 | 一般 | 最快 | 资源极度受限 |
| Q4_K_M | 小 | 良好 | 快 | 平衡选择 (推荐) |
| Q5_K_M | 中 | 很好 | 中 | 追求质量 |
| Q8_0 | 较大 | 极好 | 较慢 | 近似 FP16 |
| F16 | 最大 | 最好 | 最慢 | 完整精度 |
第二章:云端生产部署
vLLM 生产部署
vLLM 是当前最流行的开源推理服务框架。
1. 安装
bash
pip install vllm
# 或使用 Docker
docker pull vllm/vllm-openai:latest2. 启动服务
bash
# 基本启动
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-8B-Instruct \
--tensor-parallel-size 1 \
--port 8000
# 多卡并行
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-70B-Instruct \
--tensor-parallel-size 4 \
--port 8000
# 量化优化
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-8B-Instruct \
--quantization awq \
--dtype half \
--port 80003. API 调用
python
import openai
client = openai.OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")
response = client.chat.completions.create(
model="meta-llama/Llama-3-8B-Instruct",
messages=[{"role": "user", "content": "你好"}]
)4. 关键配置参数:
| 参数 | 说明 | 建议值 |
|---|---|---|
--max-model-len | 最大上下文长度 | 根据硬件调整 |
--gpu-memory-utilization | GPU 内存使用率 | 0.9 |
--max-num-seqs | 最大并行序列数 | 256 |
--enable-prefix-caching | 前缀缓存 | 开启 |
--chunked-prefill-size | 分块预填充 | 512 |
TensorRT-LLM 极致性能部署
适合对延迟和吞吐有极致追求的场景。
bash
# 1. 安装 TensorRT-LLM
pip install tensorrt_llm
# 2. 构建引擎
python convert_checkpoint.py --model_dir ./llama-3-8b \
--output_dir ./tllm_checkpoint \
--dtype float16
# 3. 构建并编译
trllm-build --checkpoint_dir ./tllm_checkpoint \
--output_dir ./llama_3_8b_trt \
--gemm_plugin float16
# 4. 运行服务
python3 run.py --engine_dir ./llama_3_8b_trt \
--max_output_len 512 \
--tokenizer_dir ./llama-3-8b \
--input_text "你好"量化支持:
| 精度 | 速度提升 | 质量损失 | 适用硬件 |
|---|---|---|---|
| FP16 | 基准 | 无 | 所有 GPU |
| FP8 | 1.5-2x | 极小 | Hopper/Ada |
| INT8 | 1.5-2x | 小 | 所有 GPU |
| INT4 | 2-3x | 中 | 所有 GPU |
第三章:量化优化策略
量化方法选择
| 方法 | 原理 | 压缩比 | 速度提升 | 适用场景 |
|---|---|---|---|---|
| AWQ | 激活值感知量化 | 4x | 2-3x | 端侧/云端通用 |
| GPTQ | 逐层量化 | 4x | 2-3x | 云端推理 |
| GGUF | llama.cpp 专用 | 2-4x | 2-4x (CPU) | 端侧/本地 |
| FP8 | 8-bit 浮点 | 2x | 1.5-2x | Hopper GPU |
| SmoothQuant | 激活值平滑化 | 2x | 1.5-2x | 云端高并发 |
实战:AWQ 量化流程
bash
# 1. 安装 autoawq
pip install autoawq
# 2. 量化模型
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model_path = "meta-llama/Llama-3-8B-Instruct"
quant_path = "llama-3-8b-awq"
quant_config = { "zero_point": True, "q_group_size": 128, "w_bit": 4 }
model = AutoAWQForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model.quantize(tokenizer, quant_config=quant_config)
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)实战:量化模型转换为 GGUF
bash
# 使用 llama.cpp 的 convert 脚本
python convert_hf_to_gguf.py \
--outfile llama-3-8b-q4_k_m.gguf \
--outtype q4_k_m \
./llama-3-8b第四章:性能调试
关键指标监控
| 指标 | 说明 | 目标值 |
|---|---|---|
| TTFT (Time To First Token) | 首 token 生成时间 | < 100ms |
| TPOT (Time Per Output Token) | 每输出 token 时间 | < 50ms |
| Throughput | 总吞吐量 | 最大化 |
| GPU 利用率 | GPU 计算时间占比 | > 80% |
| 内存利用率 | 显存使用占比 | 85-95% |
常用调试工具
bash
# vLLM 内置监控
curl http://localhost:8000/metrics
# NVIDIA GPU 监控
nvidia-smi dmon -s pucm
# 延迟测试
python benchmark_latency.py --model meta-llama/Llama-3-8B-Instruct
# 吞吐量测试
python benchmark_throughput.py --dataset ShareGPT_V3_unfiltered_cleaned_split.json常见性能问题与解决
| 问题 | 原因 | 解决方案 |
|---|---|---|
| TTFT 过高 | 预填充阶段过长 | 开启 Chunked Prefill |
| 吞吐量低 | 批次大小不足 | 调整 max-num-seqs |
| OOM | 内存不足 | 降低 max-model-len 或量化 |
| GPU 利用率低 | 请求不均匀 | 开启 Continuous Batching |
第五章:成本优化
云端部署成本估算
| 配置 | 小时成本 | 月度成本 (按 720h) | 适用场景 |
|---|---|---|---|
| 1x A10G (24GB) | $1.2 | $864 | 小规模 API |
| 1x A100 (80GB) | $3.0 | $2,160 | 中等规模 |
| 8x A100 (DGX) | $24 | $17,280 | 大规模服务 |
| 1x H100 (80GB) | $4.5 | $3,240 | 极致性能 |
| Serverless (vLLM) | 按请求 | 变动 | 波动负载 |
量化带来的成本节省
| 量化策略 | 内存节省 | 成本节省 | 质量损失 |
|---|---|---|---|
| FP16 → INT8 | 50% | 30-40% | < 2% |
| FP16 → INT4 (AWQ) | 75% | 50-60% | < 5% |
| 大模型 → 小模型 | 变化 | 60-80% | 变化 |
相关页面
- 推理框架深度对比 — 推理框架深度对比
- Model Quantization — 模型量化技术详解
- KV Cache & Prompt Caching — KV Cache 优化技术
- Hosted API vs Self-Hosted (vLLM) — API vs 自托管推理对比
- Edge vs Cloud Inference — 端侧 vs 云端推理对比
- vLLM — vLLM 实体页面
- llama.cpp — llama.cpp 实体页面
参考来源
- vLLM 官方文档: https://docs.vllm.ai
- Ollama 官方文档: https://github.com/ollama/ollama
- TensorRT-LLM 官方指南: https://nvidia.github.io/TensorRT-LLM
- llama.cpp GitHub: https://github.com/ggerganov/llama.cpp
- AWQ 论文: "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration"