Skip to content

模型部署与推理优化指南

将 LLM 从"能跑起来"到"跑得快、跑得省"是一套系统工程。本指南覆盖本地开发环境搭建、云端生产部署、量化优化策略和性能调试实践。

快速入门:选择你的部署路线

场景推荐方案部署时间硬件要求
本地开发测试Ollama5 分钟8GB+ RAM
端侧/私有化部署llama.cpp15 分钟CPU/GPU 均可
云端高并发 APIvLLM30 分钟1x A100 / 等效 GPU
NVIDIA 极致性能TensorRT-LLM1-2 小时H100/A100
复杂 Agent 编排SGLang30 分钟1x A100 / 等效 GPU

第一章:本地开发环境

Ollama 快速入门

Ollama 是本地运行大模型的最简单方式。

1. 安装

bash
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh

# 验证安装
ollama --version

2. 运行模型

bash
# 下载并运行 Llama 3
ollama run llama3

# 运行其他模型
ollama run qwen2.5
ollama run deepseek-r1
ollama run mistral

3. 自定义模型 创建 Modelfile

dockerfile
FROM llama3

# 系统提示词
SYSTEM """你是一个专业的技术助手,擅长解释复杂的编程概念。
请用简洁、准确的中文回答。
"""

# 超参数调整
PARAMETER temperature 0.7
PARAMETER top_p 0.9
bash
ollama create my-assistant -f Modelfile
ollama run my-assistant

4. 启动 API 服务

bash
ollama serve
# 默认端口 11434,OpenAI-compatible API

llama.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 8080

GGUF 量化格式选择

格式文件大小质量速度适用场景
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:latest

2. 启动服务

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 8000

3. 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-utilizationGPU 内存使用率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
FP81.5-2x极小Hopper/Ada
INT81.5-2x所有 GPU
INT42-3x所有 GPU

第三章:量化优化策略

量化方法选择

方法原理压缩比速度提升适用场景
AWQ激活值感知量化4x2-3x端侧/云端通用
GPTQ逐层量化4x2-3x云端推理
GGUFllama.cpp 专用2-4x2-4x (CPU)端侧/本地
FP88-bit 浮点2x1.5-2xHopper GPU
SmoothQuant激活值平滑化2x1.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 → INT850%30-40%< 2%
FP16 → INT4 (AWQ)75%50-60%< 5%
大模型 → 小模型变化60-80%变化

相关页面

参考来源

AI Knowledge Base — 持续积累