Chapter 08

保存与导出

LoRA adapter、合并权重、GGUF、vLLM——不同部署目标要不同格式。搞清各自的用途和一行导出命令。

8.1 导出格式一览

LoRA adapter
只保存训练出的 LoRA 增量(几十 MB),推理时需搭配原基础模型。体积小、便于多任务切换。
merged 16bit
把 LoRA 合并回原权重,产出完整的 16bit 模型。可直接被 vLLM/TGI/transformers 加载。
merged 4bit
合并后再 4bit 量化的完整模型,体积更小,适合显存受限的部署。
GGUF
llama.cpp 生态的量化格式,CPU/Mac/边缘设备友好,Ollama 直接用。含 q4_k_m/q8_0 等量化等级。
vLLM 格式
即标准的 merged 16bit(或 AWQ 量化),供 vLLM 高吞吐推理服务加载。
quantization method(量化方法)
GGUF 的量化等级,如 q4_k_m(4bit,均衡)、q5_k_mq8_0(8bit,高质量),越低越小但略损精度。
HuggingFace Hub
模型托管平台。push_to_hub 可把 adapter 或完整模型上传分享/部署。
safetensors
安全高效的权重存储格式,Unsloth 保存 16bit 模型默认用它,加载快且无反序列化风险。

8.2 保存 LoRA adapter(最常用)

# 本地保存 adapter(体积小)
model.save_pretrained("lora_model")
tokenizer.save_pretrained("lora_model")

# 之后重新加载 adapter 用于推理
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "lora_model",   # 会自动带上原基础模型
    max_seq_length = 2048,
    load_in_4bit = True,
)

8.3 合并为完整模型

# 合并成 16bit 完整模型(vLLM / transformers 可用)
model.save_pretrained_merged("merged_16bit", tokenizer,
                            save_method="merged_16bit")

# 合并成 4bit 完整模型(更小)
model.save_pretrained_merged("merged_4bit", tokenizer,
                            save_method="merged_4bit")

8.4 导出 GGUF(给 llama.cpp / Ollama)

一行导出并量化成 GGUF,可指定量化等级:

# 导出单个量化等级
model.save_pretrained_gguf("gguf_model", tokenizer,
                          quantization_method="q4_k_m")

# 一次导出多个等级
model.save_pretrained_gguf("gguf_model", tokenizer,
                          quantization_method=["q4_k_m", "q8_0"])
量化等级相对大小适用场景
q4_k_m最小本地/边缘部署,均衡首选
q5_k_m质量略高于 q4
q8_0较大接近无损,服务器可用
f16最大不量化,最高质量

8.5 推送到 HuggingFace Hub

# 推送 adapter
model.push_to_hub("your-name/qwen-cs-lora", token="hf_...")
tokenizer.push_to_hub("your-name/qwen-cs-lora", token="hf_...")

# 推送合并后的完整模型 / GGUF
model.push_to_hub_merged("your-name/qwen-cs-16bit",
                         tokenizer, save_method="merged_16bit", token="hf_...")
model.push_to_hub_gguf("your-name/qwen-cs-gguf",
                       tokenizer, quantization_method="q4_k_m", token="hf_...")
选哪种导出

本地/Ollama 跑 → GGUF;生产高并发 API → merged 16bit + vLLM;只想分享、让别人搭原模型用 → LoRA adapter。

GGUF 导出需要编译 llama.cpp

首次导出 GGUF,Unsloth 会自动拉取并编译 llama.cpp,需要一些时间和网络。Colab 上一般顺畅;本地若失败,检查 cmake/编译工具链是否齐全。

8.6 小结与下一步