先看下花费:1.03元
话费不多。那为什么要微调模型?没有别的办法了吗?最后效果怎样?
在回答这个问题前,先看看业务的需求:
这是个体验类的需求。
输出的型号中间有空格,直接copy这个型号作为关键词去其它系统中可能就会查不到。
因为,传统的系统中要么是精确匹配,要么是基于RDB的like,这是无法支持关键词中间加空格的查询。
方案1:调提示词,让大模型控制输出的结果。试了下,不是很理想,没有彻底根除。
方案2:换大模型。
提示词无法解决问题时,换大模型也是一个解决问题的办法。不过会增加额外回归测试的工作。
先换了gpt-4o-mini临时解决了问题。gpt-40-mini这个模型输出的型号中间没有额外加空格。
格式的问题解决了,但是引发了另一个新问题。就是gpt-4o-mini比国内的大模型要贵不少。
对国内的模型Doubao-1.5-pro-32k进行微调。准确的讲是SFT。
什么是SFT?
SFT(Supervised Fine-Tuning,监督微调)精调:通过已标注好的数据对模型进行精调优化,以适应特定的任务或领域。
为什么是SFT?
因为SFT并不需要大量的训练集,因为SFT可以解决这类输入内容格式化的问题。
做SFT的前置依赖:
微调的核心任务是让模型从 “能生成文本” 进化为 “能听懂指令、按意图做事”。这个过程中,数据的作用不是 “喂饱模型”,而是 “给模型清晰的‘行为示范’”。
SFT是用来画龙点睛的。
本次使用字节火山引擎的模型精调工具。
1、在模型精调页面,点击左上角 创建精调任务 按钮。
2、填写模型精调任务名称等基本信息。
任务名称(必填):本次精调任务命名,方便记录检索;支持1~200位可见字符,且只包含大小写字母、中文、数字、中划线、下划线。
任务描述:本次精调任务添加除名称以外的其他描述信息,方便多次迭代版本,重要信息记录;包含大小写字母、中文、数字、中划线、下划线。
SFT参数配置中的参数如何确定?
与训练集有关。
训练集怎么得到?
使用大模型生成。因为SFT并不需要大量的训练集,微调的核心任务,是让模型从 “能生成文本” 进化为 “能听懂指令、按意图做事”。这个过程中,数据的作用不是 “喂饱模型”,而是 “给模型清晰的‘行为示范’”。
有两句业内比较流行的话:
Quality Is All You Need.
Less Is More for Aligment.
话不多说,先看生成训练集的提示词:
"
目前douboa-32K-pro大模型在输出数据时,总会给额外加一些空格,譬如
问题中是“Sikalastic-609”,大模型输出会是“Sikalastic - 609”,即在“-”两边额外添加了一个空格;
问题中是“水吧台/岛台区域”,大模型输出会是“水吧台 / 岛台区域”,即在“/”两边额外添加了一个空格;
期望这们的效果:
问题中是“Sikalastic-609”,大模型如果有相关的内容,原样输出“Sikalastic-609”
问题中是“水吧台/岛台区域”,大模型如果有相关的内容,原样输出“水吧台/岛台区域”
基于这个目标,来SFT大模型,按照
“Quality Is All You Need.
Less Is More for Aligment.”的规则,提供足够数据的input和output用于精调。
按“扩充高质量格式数据”的策略输出包含新增符号场景样本 和 增加 “错误 - 修正” 对比样本。
补充至少 50 条严格格式对齐的样本,覆盖更多领域(如技术文档、日常对话、专业术语)
"
本次生成并使用的训练集,共42条,具体数据见文末。
“使用上面生成的42条训练集,给出截图中参数的配置值”
结合 42 条训练集的小数据场景,以下是适配的参数配置思路及说明,在原有参数基础上优化以适配小数据高效学习、避免过拟合:
参数名 | 原数值 | 调整后推荐值 | 调整逻辑(适配 42 条小数据集) |
---|---|---|---|
epoch | 1 | 2 - 3 | 小数据需多轮学习强化记忆,2 - 3 轮平衡拟合与过拟合 |
batch_size | 8 | 4 或 8 | 42 条数据用 8 可整除(42÷8=5.25,实际取整为 5 个完整 batch + 2 条余数据;若硬件允许,8 可保留,加速训练;若显存紧张,调为 4 ) |
learning_rate | 0.00001 | 5e - 5 | 原学习率(1e - 5)偏低,小数据场景适度调高至 5e - 5 加速收敛,若训练中出现震荡,可再调回 3e - 5 |
warmup_step_rate | 0.05 | 0.1 | 增加 warmup 比例(10% 步数),让模型逐步适应学习率,避免小数据下初始更新幅度过大 |
lora_rank | 32 | 32 | 因只能选 32 或 64,32 更适配小数据,减少过拟合风险,保留该值 |
lora_alpha | 4 | 8 | 配合 lora_rank=32,按公式 scale = lora_alpha / sqrt(lora_rank),原 scale≈0.7,调整后 8 / sqrt(32)≈1.4,增强参数更新的缩放强度,适配调高的学习率 |
save_model_per_epoch | 1 | 1 | 每 epoch 保存一次,42 条数据训练快,1 次 /epoch 足够记录过程,保留该值 |
dyn_bsz | true | true | 保持开启,最大化利用 seq_len×batch_size 填充 token,加速小数据训练效率,保留该值 |
epoch
、适度调高 learning_rate
,让模型在有限数据中多轮学习、加速收敛,弥补数据量少的短板。lora_rank=32
(相对 64 更安全),配合 warmup
延长学习率适应过程,避免模型 “死记硬背” 小数据集。lora_alpha
匹配学习率变化,保证 Lora 模块参数更新的缩放比例合理,让训练更稳定。按此配置,可在小数据场景下高效训练模型学习符号格式对齐,同时降低过拟合可能,若训练后验证集效果不佳(如过拟合),可进一步降低 epoch
或 learning_rate
;若收敛慢,则继续微调学习率或 warmup
比例 。
参数配置有了:
“混入预置数据集”和“验证集”怎么配?
Query:“给出下面这两个指标的值: 混入预置数据集:在用户上传的训练集数据中混入豆包模型的SFT(Supervised Fine Tuning,有监督微调)数据,混入比例表示混合后SFT数据占总数据量的比例 验证集:Validation Set,模型训练过程中,用于确定网络结构以及调整模型的超参数。可以从训练集中随机分割一定比例作为验证集,也可以上传独立于训练集的数据集。”
Answer:
结合你提供的 40 条专项微调数据(输出格式对齐V1),以及 “Quality Is All You Need” 和 “Less Is More” 的原则,这两个指标的推荐值及设置逻辑如下:
核心原因:
推荐设置:
这两个指标的设置均以 “强化专项信号、控制过拟合” 为核心,适配小数据量下的精准微调需求。
万事俱备,点击“提交精调任务”。
经过49 分 38 秒,SFT任务完成。
看下效果:
精调后,格式ok。
精调后,格式ok。
精调后,格式ok。
精调后,格式ok。
等等,你忘记大模型的“幻觉”了吗?
若训练后仍有残留问题,通过推理阶段后处理兜底修正,确保最终输出符合要求:
推理时,用 Python 正则自动清理符号前后空
import re
def fix_symbol_format(text):
# 处理“/”前后空格
text = re.sub(r'\s*/\s*','/', text)
# 处理“-”前后空格(注意区分连字符与减号,可根据场景调整)
text = re.sub(r'\s*-\s*','-', text)
return text
# 推理示例
output = model.generate(...)
fixed_output = fix_symbol_format(output)
1.2 构建格式校验器
2.1 构建格式测试集
准备 100 + 条含 “/”、“-” 的测试用例,覆盖训练 / 未训练场景,验证格式对齐率。
2.2 迭代优化流程
格式对齐的本质是让模型在小数据中精准学习 “人类对符号的严格规范”,需通过:
SFT训练数据集
https://f.chaojihao.net/ai/dataset/sft/format/symbol_format_finetune_data20250808V2.jsonl
SFT 最佳实践
https://www.volcengine.com/docs/82379/1221664
创建模型精调任务
https://www.volcengine.com/docs/82379/1099459
最后再被张图,没有完全理解的朋友可以整体再看一下:
面对传统Code RAG和Code Agent在召回率、准确率和稳定性上的不足,以及领域“黑话”和代码风格差异带来的挑战,使用以大模型微调(SFT)为核心的解决方案成功解决了问题。 博跃,公众号:阿里云开发者让AI读懂代码需求:模块化大模型微调助力高效代码理解与迁移
什么是LoRA?
LoRA(Low-Rank Adaptation,低秩适应)是一种高效微调大模型的技术,由微软团队于 2021 年提出。
LoRA的核心是在不改变原模型参数的情况下,通过添加少量低秩矩阵参数来适配新任务。训练时仅优化这些新增的少量参数,大幅降低计算成本;推理时将低秩矩阵的影响合并回原模型,不增加额外开销。这种方式用极少参数就能实现接近全量微调的效果,广泛用于大模型的任务适配。
具体来说,传统微调需要更新模型的全部参数,当模型规模庞大(如数十亿甚至千亿参数)时,会消耗大量计算资源和存储空间。而 LoRA 的做法是:
由于低秩矩阵的参数规模远小于原始模型参数(通常仅为原始参数的 1%-10%),LoRA 大幅降低了微调的成本,同时还能有效避免过拟合,在多种自然语言处理任务(如文本分类、翻译、问答等)中表现出色,目前已成为大模型微调的主流技术之一。
立秋了,晚上天变凉了。21点慢跑3公里,今天只是微微出汗,上周每次跑完都是汗如雨下的。