Chapter 12
模型导出与 Inference
训完只是开始,还要合 LoRA、量化、上 Hub、起推理服务。本章把这条链路串起来。
12.1合并 LoRA
axolotl merge-lora my_qlora.yml \
--lora_model_dir ./out \
--output_dir ./merged
# 或 Python
from axolotl.cli.merge_lora import do_cli
do_cli(config="my_qlora.yml", lora_model_dir="./out", output_dir="./merged")
注意 QLoRA 4bit base 不能 in-place merge,Axolotl 自动 dequantize 回 bf16 再 merge。
12.2本地推理(axolotl inference)
axolotl inference my_qlora.yml --lora_model_dir ./out
# 加载合并后的
axolotl inference my_qlora.yml --base_model ./merged
会启动一个简单 REPL,可以聊几句验证。
12.3vLLM 部署
# 推荐先合并再部署
vllm serve ./merged \
--port 8000 \
--tensor-parallel-size 2 \
--max-model-len 4096 \
--gpu-memory-utilization 0.85
# 也能不合并,挂 LoRA
vllm serve meta-llama/Meta-Llama-3-8B \
--enable-lora \
--lora-modules my=./out
12.4量化导出
Axolotl 没自带量化命令,但合并后可以用任何量化工具:
AWQ
pip install autoawq
python -c "
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model = AutoAWQForCausalLM.from_pretrained('./merged')
tok = AutoTokenizer.from_pretrained('./merged')
quant_config = {'zero_point':True,'q_group_size':128,'w_bit':4,'version':'GEMM'}
model.quantize(tok, quant_config=quant_config)
model.save_quantized('./awq')
tok.save_pretrained('./awq')
"
GPTQ
pip install auto-gptq
python -c "
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from transformers import AutoTokenizer
qcfg = BaseQuantizeConfig(bits=4, group_size=128, desc_act=False)
model = AutoGPTQForCausalLM.from_pretrained('./merged', qcfg)
# calibration ...
model.quantize(calib_dataset)
model.save_quantized('./gptq')
"
GGUF (llama.cpp)
# 转 GGUF
python llama.cpp/convert_hf_to_gguf.py ./merged --outtype bf16 -o ./model.gguf
# 量化
./llama.cpp/llama-quantize ./model.gguf ./model-q4_k_m.gguf q4_k_m
12.5推上 HF Hub
# 用 huggingface-cli
huggingface-cli upload your-name/your-model ./merged
# 或 Axolotl 自带 push_to_hub
hub_model_id: your-name/your-model
hub_strategy: every_save
YAML 加 hub_model_id 字段后,训练结束自动 push。
12.6批量评估
# lm-eval-harness
lm_eval --model hf \
--model_args pretrained=./merged \
--tasks mmlu,truthfulqa,hellaswag \
--batch_size 8 --device cuda
# 跑 IFEval
lm_eval --model hf --model_args pretrained=./merged \
--tasks ifeval
# MT-Bench / AlpacaEval(需要 GPT-4 评分)
12.7部署建议
| 场景 | 推荐 |
|---|---|
| 生产 / 高吞吐 | vLLM / TensorRT-LLM |
| 低延迟单请求 | vLLM |
| 本地 / 移动设备 | llama.cpp (GGUF) |
| HF 一键演示 | HF Inference Endpoints |
| 云端按量 | Modal / Replicate |
12.8v2026 新增的 4 个导出 / 部署命令
Axolotl 在 2026 之后把"训完之后的事"也做成 CLI 一等公民:
| 命令 | 位置 | 用途 |
|---|---|---|
axolotl merge_sharded_fsdp_weights | cli/main.py:245–274 | FSDP 切片 checkpoint 合并成单文件 HF model |
axolotl vllm_serve config.yml | cli/main.py:321–324 | 读 YAML 起 vLLM server(GRPO / EBFT rollout 用) |
axolotl quantize config.yml | cli/main.py:331–334 | 量化导出(GGUF / AWQ / GPTQ)一站式 |
axolotl delinearize_llama4 model out | cli/main.py:340–343 | Llama 4 专用:把 linearized 表征还原 |
12.9quantize 子命令:一站式量化导出
不用单独装 llama.cpp / autoawq。axolotl quantize 透传到底层工具链:
# quantize.yml
base_model: ./out/merged
output_dir: ./quantized
quantize:
method: awq # awq / gptq / gguf
bits: 4
group_size: 128
zero_point: true
dataset: c4_demo # 校准集
n_samples: 128
seqlen: 2048
跑:axolotl quantize quantize.yml。产出:
- AWQ →
quantized/model.safetensors,vLLM 直接加载; - GPTQ → 同上,autoGPTQ format;
- GGUF →
model.q4_k_m.gguf,Ollama / llama.cpp 装 + 直接用。
12.10训完一键推 HF Hub
YAML 加两行字段,训完自动 push:
hub_model_id: your-user/your-model-name
hub_strategy: every_save # every_save / end / checkpoint
hub_private_repo: true
结合 HF_TOKEN 环境变量,训练完成时模型已经在 hub 上。配合 axolotl quantize 还能多 push 一份量化版本。
12.11这章你需要带走的
- 合并 LoRA:
axolotl merge-lora; - QLoRA 自动 dequantize 再 merge;
- 4bit 量化主流 AWQ / GPTQ;移动端用 GGUF;
- 训练 YAML 加 hub_model_id 字段可自动 push;
- 生产部署首选 vLLM。