系列收尾,把全流程命令收进一页,方便复制粘贴。把项目根目录记为 ~/projects/vlm-ocr-sft(请替换),以下命令默认已有 script/docker_run.sh 或等价封装。

这是「多模态微调实战」的第 10 篇,也是收官篇。前九篇讲原理与取舍,这一篇只留命令。

环境

1
2
3
nvidia-smi
bash script/docker_run.sh swift --version
bash script/docker_run.sh python -c "import torch; print(torch.cuda.is_available())"

数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 演示子集
python3 script/convert_lmdb_to_jsonl.py \
--project-root /workspace \
--train-samples 2000 \
--val-samples 200

# 全量(参数按你的脚本约定)
python3 script/convert_lmdb_to_jsonl.py \
--project-root /workspace \
--train-samples 0 \
--val-samples 0

wc -l dataset/ocr_plate/train.jsonl dataset/ocr_plate/val.jsonl
wc -l dataset/ocr_plate/train_full.jsonl dataset/ocr_plate/val_full.jsonl

演示集 LoRA

1
bash script/train_lora.sh

关键参数备忘:

1
2
3
4
5
6
7
lora_rank=8  lora_alpha=32
freeze_vit=true freeze_aligner=true
batch=1 grad_accum=8
attn_impl=sdpa
IMAGE_MAX_TOKEN_NUM=512
MAX_PIXELS=802816
epochs=3 lr=1e-4

评测

1
2
3
4
bash script/run_eval.sh
# 或
bash script/eval_before_after.sh
python3 script/eval_ocr_accuracy.py

全量训练

1
2
3
4
5
6
7
8
9
# 后台启动
bash script/train_lora_full_bg.sh

# 看进度
bash script/train_status.sh
tail -f output/train/train_full.log

# 停止(确保连容器一起停)
bash script/train_lora_full_bg.sh stop

续训(示意):

1
2
swift sft ... \
--resume_from_checkpoint /workspace/output/.../checkpoint-XXXXX

合并 LoRA

1
2
bash script/merge_lora.sh \
output/ocr_plate_lora_full/.../checkpoint-93000

等价:

1
2
3
4
5
swift export \
--model /workspace/model/Qwen3-VL-4B-Instruct \
--adapters /workspace/output/.../checkpoint-93000 \
--merge_lora true \
--output_dir /workspace/output/ocr_plate_merged_checkpoint-93000

GGUF / 量化(示意)

1
2
3
1) HF merged → GGUF F16
2) GGUF F16 → INT4(如 Q4_K_M)
3) 同一验证集分别评测,记录掉点

验收关注:

  • F16 相对 HF:任务指标是否基本持平;
  • INT4 相对 F16:是否可接受(实践中约数个百分点,例如 ~6.5pt)。

目录速记

1
2
3
4
5
6
7
model/                         基座
dataset/ocr_plate/ JSONL + images
output/ocr_plate_lora/ 演示 LoRA
output/ocr_plate_lora_full/ 全量 LoRA
output/ocr_plate_merged_*/ 合并模型
output/eval_* 评测产物
blog/ 本系列文章

全系列回顾

一条完整链路,也是这个系列的主线:

1
环境 → 数据 → 小规模 LoRA → 评测 → 全量训练 → 选 checkpoint → merge → GGUF/INT4 → 验收

核心心法只有一句:先小后大,先评后扩,先可续训再长时间跑,先确认转换再谈量化。

多模态微调实战系列完。愿这套流程能帮你在自己的机器上把多模态微调跑通、评明白、部署稳。