Skip to content

部署与推理优化

让大模型跑得更快、更省

🎯 核心挑战

来源:压缩巨兽:深入探究大语言模型压缩的底层科学

部署难点

挑战问题解决方案
显存占用7B模型需14GB+量化压缩
推理速度自回归生成慢KV Cache、批处理
成本GPU昂贵CPU推理、边缘部署
延迟首Token时间长推测解码

🗜️ 模型量化

量化类型

类型精度显存节省精度损失
FP3232位基准
FP16/BF1616位50%极小
INT88位75%
INT44位87.5%中等
INT22位93.75%较大

量化方法

方法原理适用场景
PTQ(训练后量化)直接量化已训练模型快速部署
QAT(量化感知训练)训练时模拟量化追求精度
GPTQ基于Hessian的逐层量化4-bit高精度
AWQ激活感知量化保护重要权重
GGUFllama.cpp格式CPU推理

BitsAndBytes量化

python
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

# 8-bit量化
model_8bit = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    load_in_8bit=True,
    device_map="auto"
)

# 4-bit量化(NF4)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True
)

model_4bit = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=bnb_config,
    device_map="auto"
)

GPTQ量化

python
from transformers import AutoModelForCausalLM, GPTQConfig

gptq_config = GPTQConfig(
    bits=4,
    dataset="c4",
    tokenizer=tokenizer
)

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=gptq_config,
    device_map="auto"
)

🚀 推理优化

vLLM高性能推理

python
from vllm import LLM, SamplingParams

# 加载模型
llm = LLM(
    model="meta-llama/Llama-2-7b-chat-hf",
    tensor_parallel_size=1,  # GPU数量
    gpu_memory_utilization=0.9
)

# 采样参数
sampling_params = SamplingParams(
    temperature=0.7,
    top_p=0.9,
    max_tokens=512
)

# 批量推理
prompts = ["你好", "介绍一下人工智能"]
outputs = llm.generate(prompts, sampling_params)

for output in outputs:
    print(output.outputs[0].text)

vLLM核心优化

技术说明
PagedAttention类似虚拟内存管理KV Cache
Continuous Batching动态批处理,提升吞吐
Tensor Parallelism多GPU并行
Prefix Caching缓存共享前缀

💻 本地部署

来源:llama.cpp工作流与GGUF转换指南

llama.cpp部署

bash
# 1. 克隆并编译
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

# 2. 转换模型为GGUF格式
python convert_hf_to_gguf.py /path/to/model --outfile model.gguf

# 3. 量化
./llama-quantize model.gguf model-q4_k_m.gguf Q4_K_M

# 4. 运行推理
./llama-cli -m model-q4_k_m.gguf -p "你好" -n 128

GGUF量化级别

量化类型大小(7B)质量推荐
Q2_K~2.5GB较差极限压缩
Q4_K_M~4GB良好✅ 推荐
Q5_K_M~5GB很好精度优先
Q8_0~7GB最佳不追求压缩

Ollama快速部署

bash
# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh

# 运行模型
ollama run llama2

# 或使用自定义模型
ollama create mymodel -f Modelfile
ollama run mymodel

✂️ 模型剪枝

结构化剪枝

python
import torch.nn.utils.prune as prune

def prune_model(model, amount=0.3):
    """对模型进行剪枝"""
    for name, module in model.named_modules():
        if isinstance(module, torch.nn.Linear):
            prune.l1_unstructured(module, name='weight', amount=amount)
            prune.remove(module, 'weight')
    return model

知识蒸馏

python
from transformers import DistilBertForSequenceClassification

# 教师模型(大模型)
teacher = AutoModelForCausalLM.from_pretrained("large_model")

# 学生模型(小模型)
student = AutoModelForCausalLM.from_pretrained("small_model")

# 蒸馏损失
def distillation_loss(student_logits, teacher_logits, temperature=2.0):
    soft_targets = F.softmax(teacher_logits / temperature, dim=-1)
    soft_predictions = F.log_softmax(student_logits / temperature, dim=-1)
    return F.kl_div(soft_predictions, soft_targets, reduction='batchmean')

📊 推理框架对比

框架特点适用场景
vLLMPagedAttention,高吞吐生产服务
TGIHuggingFace官方企业部署
llama.cppCPU推理,GGUF格式本地/边缘
Ollama开箱即用快速体验
TensorRT-LLMNVIDIA优化追求极致性能

🔗 相关阅读

相关文章

外部资源

基于 VitePress 构建