Chapter 10

推理与量化:swift infer / swift export

📌 commit b58b1bd训完模型怎么压怎么跑

ms-swift 把推理 / 量化 / 部署都做成 CLI:swift infer 单机推理、swift deploy OpenAI API server、swift export 合并 LoRA + 量化导出。本章过一遍。

10.1swift infer

# 命令行交互
swift infer \
    --adapters ./output/v0-xxx/checkpoint-200 \
    --stream true \
    --infer_backend pt

# 批量推理 jsonl
swift infer \
    --adapters ./output/v0-xxx/checkpoint-200 \
    --val_dataset ./test.jsonl \
    --max_batch_size 16 \
    --result_path ./out.jsonl
infer_backend速度说明
ptbaseline纯 PyTorch,最稳
vllm3-5×需要 merge_lora=true
lmdeploy4-6×商汤 LMDeploy
sglang4×+新晋推理引擎

10.2合并 LoRA:swift export

swift export \
    --adapters ./output/v0-xxx/checkpoint-200 \
    --merge_lora true \
    --output_dir ./merged_model

合并后 ./merged_model/ 是标准 HF 目录,可以推送 Hub 或喂给 vLLM。

10.3量化导出

方法位宽命令
AWQ4--quant_method awq --quant_bits 4
GPTQ4 / 8--quant_method gptq --quant_bits 4
BNB4 / 8--quant_method bnb
HQQ4 / 8--quant_method hqq

AWQ 量化完整命令

swift export \
    --adapters ./output/checkpoint-200 \
    --merge_lora true \
    --quant_method awq \
    --quant_bits 4 \
    --quant_n_samples 256 \
    --quant_seqlen 2048 \
    --dataset alpaca-zh#256 \         # ★ calibration data
    --output_dir ./quant_out

量化跑 5-30 分钟(取决于 calibration 大小),产物可以喂 vLLM / TGI。

10.4推送到魔搭 / HF Hub

# 魔搭
swift export \
    --adapters ./output/checkpoint-200 \
    --merge_lora true \
    --push_to_hub true \
    --hub_model_id my-org/my-model \
    --hub_token YOUR_MODELSCOPE_TOKEN

# HuggingFace
USE_HF=1 swift export \
    --adapters ./output/checkpoint-200 \
    --push_to_hub true \
    --hub_model_id your-name/your-model

10.5swift deploy:OpenAI 兼容 API

swift deploy \
    --model ./merged_model \
    --infer_backend vllm \
    --port 8000 \
    --host 0.0.0.0 \
    --max_model_len 4096 \
    --gpu_memory_utilization 0.85

启动后可以用 OpenAI Python client:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
r = client.chat.completions.create(
    model="my-model",
    messages=[{"role":"user","content":"你好"}],
)

10.6常见错误

现象处理
AWQ 量化时 OOM降 quant_n_samples、quant_seqlen
vLLM 推理时 LoRA 不生效vLLM 需要 merge_lora 后的合并模型,或用 vLLM 自家 multi-LoRA
量化后效果显著下降4bit 通用模型一般 -1pp;推理增强模型 -3pp;要 -5pp 以下用 AWQ 而非 GPTQ
swift deploy 卡 health check等首次 model load 完成(~30s)

10.75 个 Infer Engine 速查

v4 的 swift/infer_engine/ 提供 5 个可插拔推理引擎。--infer_backend 字段切换:

infer_backend位置典型场景
pt(默认) infer_engine.py(12.5 KB)+ transformers_engine.py(26.8 KB) 调试 / 小流量;最兼容
vllm vllm_engine.py(39.9 KB) 批量生成 / paged attention;最常用生产
sglang sglang_engine.py(14 KB) 结构化输出(强制 JSON / 正则)/ 长 KV 复用
lmdeploy lmdeploy_engine.py(16.1 KB) TurboMind C++ 后端,吞吐极致
(内部) grpo_vllmgrpo_vllm_engine.py(6.3 KB) 给 GRPO rollout 用,保留 reward batch prefix

这 5 个都实现 OpenAI 兼容协议protocol.py 20.8 KB),所以 swift deploy 起服务时切 backend 用户端无感。

10.8AutoInferEngine 路由顺序

"我没显式指定 backend,swift 怎么挑?"看 infer_engine.py

  1. 显式 --infer_backend 取值最高优先;
  2. 否则按"已安装的 backend"自动挑(is_vllm_available() / is_sglang_available() 等);
  3. 都没装就走 pt(transformers);
  4. 多模态模型自动检测,部分 backend 不支持 VLM 时回退到 pt

10.9swift export 四种量化路径

swift export --quant_method ... 字段(来源 swift/arguments/export_args.py):

quant_method精度损失典型用
awq 4bit 推理首选;activation-aware
gptq 4bit / 8bit;广泛兼容
fp8 极低 H100/H200 推理;近 fp16 精度
bnb bitsandbytes,挂 LoRA 推理用

必备字段:

10.10GGUF / Ollama 导出(2025-02 新)

swift 自带 GGUF 转换路径,不用单独装 llama.cpp。swift export 加:

swift export \
    --model ./merged_model \
    --to_ollama true \
    --gguf_quantization q4_k_m \
    --output_dir ./ollama_pkg

产出:

10.11这章你需要带走的