一、保存模型的核心方法
Unsloth支持多种保存格式和场景,主要分为以下三类:
1. 仅保存LoRA适配器(轻量级保存)
适用于需要继续微调或存储空间受限的场景。
-
代码示例:
model.save_pretrained("lora_model") # 保存适配器权重 tokenizer.save_pretrained("lora_model") # 保存分词器
- 特点:仅保存LoRA适配器(约100MB),需配合原始模型加载。
- 适用场景:后续继续微调或共享适配器权重。
2. 合并适配器与原始模型(全量保存)
将LoRA适配器与基础模型合并为完整模型,便于独立部署。
-
代码示例:
# 合并为16位精度(推荐平衡精度与存储) model.save_pretrained_merged("model", tokenizer, save_method="merged_16bit") # 合并为4位量化(节省存储,适合低资源推理) model.save_pretrained_merged("model", tokenizer, save_method="merged_4bit")
- 特点:
-
merged_16bit
:保留FP16精度,适合GPU推理。 -
merged_4bit
:量化保存,显存占用减少50%以上。- 适用场景:直接部署或独立使用完整模型。
3. 导出为GGUF格式(高效推理格式)
适用于CPU推理或llama.cpp、Ollama等框架。
-
代码示例:
# 默认保存为Q8_0量化(平衡速度与精度) model.save_pretrained_gguf("model", tokenizer) # 自定义量化方法(如q4_k_m、q5_k_m等) model.save_pretrained_gguf("model", tokenizer, quantization_method="q4_k_m")
- 支持的量化方法:
-
f16
:无损FP16(最大精度,但文件较大)。 -
q8_0
:8位量化(推荐通用场景)。 -
q4_k_m
:4位量化(最小文件,适合低端设备)。- 特点:GGUF格式优化了加载速度和内存映射,支持CPU推理。
二、进阶保存操作
1. 推送至Hugging Face Hub
支持将合并后的模型直接上传至社区平台。
-
代码示例:
model.push_to_hub_merged("your_hf_username/model_name", tokenizer, save_method="merged_4bit", token="your_hf_token")
- 注意事项:需提前在Hugging Face账户中生成访问令牌。
2. 多格式混合保存
根据需求同时生成多种格式:
# 保存适配器
model.save_pretrained("lora_model")
# 合并为16位并导出GGUF
model.save_pretrained_merged("model_16bit", tokenizer, save_method="merged_16bit")
model.save_pretrained_gguf("model_gguf", tokenizer, quantization_method="q8_0")
- 优势:适配不同部署场景(如云端推理用GGUF,本地调试用适配器)。
3. 检查点保存(训练中断恢复)
在训练过程中定期保存检查点:
trainer = SFTTrainer(
model=model,
args=TrainingArguments(
output_dir="checkpoints",
save_strategy="epoch", # 每epoch保存一次
),
# 其他参数...
)
- 恢复训练:通过
from_pretrained
加载检查点目录继续训练。
三、兼容性与注意事项
1. 格式兼容性
保存方式 | 适用框架 | 硬件支持 |
---|---|---|
LoRA适配器 | Hugging Face Transformers/PEFT | GPU/CPU |
合并模型(16/4bit) | vLLM、Hugging Face Pipelines | GPU优先 |
GGUF | llama.cpp、Ollama、CPU服务器 | CPU/部分GPU |
2. 常见问题
- 显存不足:优先选择
merged_4bit
或GGUF量化格式。 - 加载错误:确保使用的框架版本与Unsloth兼容(如llama.cpp需最新版本)。
- 精度损失:
merged_4bit
可能轻微影响生成质量,关键任务建议用merged_16bit
。
四、最佳实践建议
- 生产部署:优先使用
merged_16bit
+GGUF Q8_0组合,兼顾精度与速度。 - 实验阶段:保存LoRA适配器以快速迭代不同微调配置。
- 资源受限环境:选择GGUF q4_k_m量化,显存占用可降至原模型的1/4。
通过灵活组合上述方法,可最大化Unsloth在模型保存阶段的效率优势。