Chapter 12

模型导出与 Inference

📌 commit ab1a0d8合并 LoRA、量化、上 Hub、跑 vLLM

训完只是开始,还要合 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。产出:

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这章你需要带走的