ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

LFM3-1.7B 微调教程:如何用 TRL SFT 在单 GPU 上从杂乱文档中提取结构化 JSON

LFM3-1.7B 微调教程:如何用 TRL SFT 在单 GPU 上从杂乱文档中提取结构化 JSON
  • 基础模型
  • 大模型
  • 人工智能
  • NLP
  • 本地部署

【免费下载链接】LFM3-1.7B

项目地址:https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM3-1.7B
点击查看免费下载

LFM3-1.7B是 Liquid AI 开源的 1.7B 参数轻量级文本模型,官方明确定位它"专为快速单 GPU 微调而生"。本教程带你用TRL SFT(监督微调)把它改造成一台"文档抽取器":喂给它格式混乱的合同、邮件、扫描件文本,让它稳定输出干净的结构化 JSON。全程只需一块 12GB 显存的显卡,普通用户也能跑通。

一、LFM3-1.7B 模型概览:为什么选它做文档抽取

LFM3-1.7B 采用了独特的tri-hybrid(三混合)架构——把卷积、滑动窗口注意力、全局注意力组合在一起。这个设计直接决定了它的两个关键优势:

指标数值对文档抽取的意义
参数量1.73B单卡即可微调、可部署到边缘设备
上下文长度256K tokens长合同、长报告可以整篇喂进去
架构24 层(13 卷积 + 5 滑动注意力 + 6 全局注意力)长文本处理成本低
词表128,000 tokens覆盖 16 种语言,含中文
4-bit 精度内存占用约 1 GB笔记本甚至手机都能推理

256K 上下文是"从杂乱文档中抽取信息"这类任务的天然优势——你不需要自己切分文档,直接整篇输入即可。架构细节可在 config.json 中查看,模型配置与训练配方见 README.md。

二、快速上手:环境安装与模型获取

2.1 硬件要求(单 GPU 参考值)

训练方式建议显存说明
LoRA / QLoRA 微调8–12 GB推荐新手方案
全参数微调20–24 GB效果上限更高
推理部署(BF16)6 GB 左右权重约 3.4 GB

💡 以上为参考值,实际占用随序列长度和 batch size 变化。

2.2 安装依赖并获取模型

pip install transformers torch trl datasets accelerate
git clone https://gitcode.com/hf_mirrors/LiquidAI/LFM3-1.7B

克隆下来的仓库就是模型本身:权重文件 model.safetensors、分词器 tokenizer.json 和对话模板 chat_template.jinja 都在根目录,后续加载时直接指向这个目录即可。

三、准备训练数据:构建"杂乱文档 → 结构化 JSON"数据集

微调质量 80% 取决于数据。推荐准备200–2000 条高质量样本,格式为 JSONL,每行包含system(固定指令)和messages(用户输入杂乱文档 + 助手输出目标 JSON)。

示例数据(一行一条):

{"system": "从输入文档中提取实体,只输出 JSON,不要任何解释。", "messages": [{"role": "user", "content": "【发票】客户:深圳市xx科技有限公司 金额:¥12,380.00 日期:2026-08-01 税号:91440300…(OCR 文本,含噪点)"}, {"role": "assistant", "content": "{\"customer\": \"深圳市xx科技有限公司\", \"amount\": 12380.0, \"date\": \"2026-08-01\", \"tax_id\": \"91440300…\"}"}]}

3 个数据技巧:

  1. system 指令写死 JSON schema——字段名、类型、取值范围都写清楚,模型会严格按格式输出;
  2. 输入要"真杂乱":保留错别字、换行混乱、OCR 噪声,这样微调后模型对真实脏数据才鲁棒;
  3. 输出必须是合法 JSON:先用json.loads()批量校验一遍数据集,坏样本会直接带偏模型。

四、使用 TRL SFTTrainer 微调 LFM3-1.7B

4.1 先搞清楚 LFM3 的对话模板

LFM3 使用 ChatML 格式,并默认开启思考链(thinking)。微调 JSON 抽取时建议在模板中设置enable_thinking=False,避免思考过程干扰 JSON 输出;模板细节见 chat_template.jinja。

prompt = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, enable_thinking=False, )

官方同时提供 DPO、GRPO、CPT 三种 TRL 微调路径,本文聚焦最实用的 SFT。

4.2 SFT 训练配置(核心代码)

from trl import SFTConfig, SFTTrainer from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "./LFM3-1.7B" # 本地克隆目录 model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype="bfloat16", trust_remote_code=True ) tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) training_args = SFTConfig( output_dir="./output-lfm3-json-extractor", dataset_text_field="prompt", # 模板渲染后的完整文本 max_length=8192, # 文档长可调到 16K,注意显存 per_device_train_batch_size=2, gradient_accumulation_steps=4, num_train_epochs=3, learning_rate=2e-5, bf16=True, gradient_checkpointing=True, ) trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=train_dataset, args=training_args, ) trainer.train()

4.3 关键超参数速查表

参数推荐值说明
learning_rateLoRA 2e-4 / 全参 2e-5全参学习率过大容易"学崩"
max_length4096–16384按文档实际长度定,直接影响显存
num_train_epochs2–4小数据集宁少勿多
量化QLoRA 4-bit显存紧张时首选
gradient_checkpointingTrue用算力换显存,几乎必开

五、验证效果与部署:采样参数别踩坑

训练完成后,用测试集文档跑一遍推理,检查三点:JSON 是否合法、字段是否齐全、空值时是否诚实输出null而不是编造。

生成参数直接使用官方推荐值(与 generation_config.json 一致):

outputs = model.generate( **inputs, do_sample=True, temperature=0.1, # 低温度 = 输出更稳定 top_k=50, repetition_penalty=1.1, max_new_tokens=2048, )

⚠️ 文档抽取任务务必用temperature=0.1的低温度采样,别用 1.0 以上的高随机性参数。

部署方面,微调后的模型可以直接用 vLLM / SGLang / Transformers 服务化,单卡吞吐量表现相当可观:

六、常见问题与调优技巧

问题原因解决
输出 JSON 夹杂解释文字system 指令不够强指令中强调"只输出 JSON",并加 2–3 个 few-shot 示例
训练集表现好、测试集差过拟合减少 epoch、增加数据多样性、降学习率
显存不足 OOM序列太长开gradient_checkpointing、改用 QLoRA、缩短max_length
输出里出现<think>思考内容模板默认开启思考渲染时设置enable_thinking=False

微调方式怎么选?官方按任务给出了明确建议:

训练方式适用场景
SFT从杂乱文档中提取结构化 JSON(本文)
DPO基于检索文档作答,或在信息不足时拒绝回答
GRPO复杂工具调用(如 108 个工具的调度)

七、总结

  • LFM3-1.7B 是专为单 GPU 快速微调设计的 256K 上下文轻量模型,微调门槛极低;
  • 数据是核心:固定 JSON schema 指令 + 真实脏文档 + 合法 JSON 输出;
  • TRLSFTTrainer+ QLoRA,12GB 显存即可跑通全流程;
  • 部署时用temperature=0.1低采样参数,保证 JSON 输出的稳定性。

仓库关键文件索引:

文件作用
README.md微调方法与使用指南
config.json模型架构与上下文配置
chat_template.jinja对话模板(含思考链开关)
generation_config.json官方推荐采样参数
LICENSELFM Open License v1.0
  • 基础模型
  • 大模型
  • 人工智能
  • NLP
  • 本地部署

【免费下载链接】LFM3-1.7B

项目地址:https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM3-1.7B
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进