本文全面解析了大模型SFT(监督微调)技术,阐述了SFT与预训练、RLHF等技术的区别,介绍了SFT的分类、基座模型选择、训练数据构建、训练过程及参数调整等关键环节,并提供了代码示例。文章还讨论了评估方法、不良后果及应对策略,帮助读者掌握大模型微调技术,提升特定领域能力,是学习大模型面试和实战的宝贵资料。

(1)为什么会有SFT?

预训练、SFT、RLHF是大模型的标配。

预训练让大模型获得了通用能力,SFT让大模型提升了某个特定领域的能力,RLHF则是让大模型的输出和人类意图对齐和接近。

(2)SFT和预训练的区别是什么?

预训练是让大模型获得通用能力,SFT是为了提升大模型在特定领域的能力。

(3)SFT和RLHF的区别是什么?

第一,SFT是为了提升大模型特定领域的能力,RLHF则是为了让大模型的输出和人类意图接近,尤其是在宗教、政治、道德等方面进行一定的约束。SFT在预训练的基础上增强了模型在特定领域的表达能力, RLHF则约束了模型的表达。

第二,SFT是监督学习,RLHF是强化学习。监督学习的上限是老师,而强化学习可以通过学习经验超越老师。

第三,SFT给大模型提供正向反馈,而RLHF可以给大模型提供负反馈。SFT并没有告诉模型说,我不想要什么答案,只有我想要什么答案,这个时候就需要RLHF进行纠错,打造一个尽量不出错的领域大模型。

第四,训练优化方式不同。前者通过loss函数来对token进行优化和反向传播,每一个token相同的贡献,而后者可以对整个语句进行优化和反向传播。

(4)SFT和RAG的区别是什么?

第一,SFT是通过一定量的监督训练数据提升大模型特定领域的能力,RAG是指通用大模型本身没有特定领域的能力,但通过检索资料提升特定领域的能力。

第二,RAG只能提取只是表层的特征,微调能够让模型的底层认知真正的去对齐行业领域。

第三,从应用场景角度:RAG是外挂一个知识库,适合动态数据、相比于微调在处理幻觉、可解释性高、通用能力更强。微调适合给模型定制能力、延迟低、但会造成模型遗忘。从实现的难易程度而言:promopt<RAG<微调,微调难度最大。

(5)SFT和continue-pretrain区别是什么?

第一,从目的角度:SFT是为了提升或者激发通用大模型在特定领域或某个task的能力,而continue-pretrain是为了解决应用场景需求能力与通用大模型能力不匹配的问题,即基础模型支持的domain和要解决的domain差异很大,这个时候要考虑增量预训练。

第二,从流程角度:continue-pretrain在pretrain之后,在SFT之前。

第三,从训练数据量角度:增量预训练所需要的数据略少于pretrain,但远远大于SFT所需要的数据,99%的情况下通常不会使用增量预训练。

(6)SFT和in-context learning的区别是什么?

In-context learning目的是通过一个或者几个例子激发大模型对任务的能力(也就是prompt)。In-context learning在GPT3论文中提出,并不会修改模型的参数和梯度,不参与反向传播过程。

(7)SFT和LoRA、PEFT区别是什么?

SFT通常是指全参数微调,优点是精度上限更高,缺点是在训练过程中对计算资源和存储资源的需求高、容易产生过拟合、遗忘和幻觉。

PEFT是一种微调方法的总称,主要包括Prefix Tuning(在模型输入层添加可训练的前缀嵌入),LoRA(通过低秩矩阵近似模型参数更新),以及Adapter Tuning(在模型层间插入小型神经网络adapters)。

LoRA是PEFT的一种,模型的参数不变,但对模型中在每个线性层引入额外的低秩矩阵进行参数微调。优点是降低SFT过程对硬件内存的消耗(省内存),缺点是精度上限低于全量参数微调。

此外,模型部分参数微调部分参数冻结也是微调的一种方式,目前应用较少。

(8)SFT有哪些分类?

第一,按照任务不同可以划分为:对话任务、分类任务、相似性判定任务等。

第二,按照模型参数是否变化可以分为:

  • • 全部参数微调,这也是大公司日常使用最多的方案。
  • • PEFT微调。包括LoRA,Adapter等。摘抄-在实际工作中几乎没用过 lora,身边同事也不怎么用。
  • • 部分模型参数冻结部分模型参数微调。

(9)SFT的前提条件是什么?

共有3个基础条件,第一是选择基座模型,第二是微调数据,第三是微调环境。

微调基座模型可以直接从modelscope网站下载。

微调数据主要包括-特定的模型输入格式、数据数量、数据质量等。

微调环境主要包括-微调硬件、微调软件、微调工具等。

  • • 训练工具包括-Megatron-LM、Deepspeed、Accelerate、Unsloth。
  • • LLaMA-Factory是一个开源平台,是一个比较完善的微调工具,提供便捷的大型语言模型微调环境。
  • • hugging face transformers是一个开源的Python库,提供了数以千计的预训练transformer模型。
  • • DeepSpeed训练框架通过将模型参数拆散分布到各个GPU上,可以利用更少的硬件资源训练更大的模型,不再受限于单个GPU的显存限制。
  • • Unsloth 是一款开源的大语言模型(LLM)微调工具,基于优化计算步骤和 GPU 内核,显著提升模型训练速度并减少内存使用。
  • • 注意环境依赖,不要造成版本冲突。
  • • 硬件环境包括-GPU、CPU、内存、存储、操作系统、cuda等。

(10)如何选择SFT的基座模型?

第一,选择base模型还是chat模型作为SFT基座?Base模型提供了基本的语言理解和生成能力,而Chat模型通过指令微调和人工反馈强化学习等方法,使模型更加符合人类的价值观和指令要求。一般情况下选择chat模型为微调基座,因为base模型还没有指令遵循或对话能力。

第二,基座模型选择大模型还是小模型?例如Qwen3-235B或0.6B。取决于应用场景,对于单一任务来说,小模型已经够用。

第三,modelscope社区一般会给出3种类型的模型,第一种是预训练模型,第二种有chat能力的微调模型,第三种是在chat能力基础上的量化模型(量化模型通俗来说就是把大模型中某些层参数由float16变为int8等)以节省显存。

(11)SFT的训练数据集如何构建?**

**第一,对于不同的微调任务和微调基座模型,生成特定输入格式的数据。

通常,微调任务主要包括根据指令简单对话,根据指令实现上下文对话(更加关注上下文的逻辑与联系)这两种。

目前被大家广泛使用的是两种微调数据格式为Alpaca(JSON结构)和share GPT,前者使用较多,后者更加关注长对话。

微调数据中的COT更加适用的场景是-数学、证明等需要逻辑推理的场景,而COT数据通常包括question、COT-thinking、Answer这三个部分。多轮对话通常在最后一轮问答时使用思维链。

第二,微调数据获得方式主要包括人工生成,人工和大模型协助(RAG或大模型prompt)生成两种。

摘抄:要想尽各种办法去扩充 prompt 的任务多样性和表达方式多样性,甚至去刻意加一些 noisy prompt 去提升抗噪性。

摘抄-选一个默认的 json 格式:带不带 markdown,indent 设置成几,是否输出在一行,然后把 sft 中所有涉及到的 json 数据全部清洗成这种格式。

第三,获得高质量的微调训练数据是SFT的核心。作为SFT从业者,日常95%以上的时间就是生产数据、分析数据、清洗数据。摘抄:这段时间天天sft,怎么整都提不了效果,最后老老实实用规则+人工把数据一条条洗一遍,模型才终于稳定了。特别是复杂推理任务,数据里answer有conflict的点的话,模型经常学疯。

四,Instructions这个一定要给出,让大模型明确自身的定位。input可以不给,模型也可以直接通过instructions给输出。

(12)SFT需要多少数据量?

2K-10W,当然要具体任务具体分析。

摘抄:通常情况下,仅需约“一万份样本”便足以达成理想的微调成果。这一理念在Meta发布的《LIMA: Less Is More for Alignment》论文中得到了有力阐述,该文献强调了在指令微调过程中,高品质微调数据的决定性作用。据此,我们应当将重心放在提升样本质量的打磨上,而非单纯追求数量的增长。

InstructGPT在微调阶段使用数据~1万组。

(13)如何评价SFT训练数据集的质量?

有多个维度,包括样本多样性、答案质量、回答一致性等多项指标。

(14)SFT过程对硬件有什么要求?

第一,微调大模型需要多少显存?训练过程中的显存取决于:模型参数、梯度、优化器、中间激活变量,主要显存消耗在前三个。经验来说,显存大概是模型参数量的12倍,例如模型是1B,总共显存占用12GB。

第二,V100不支持flash attention。

第三,V100不支持bf16,但支持GPTQ模型和FP8。V100不支持fp16,但是可以通过修改config.json中的dtype将bf16变为float32或float16。

第四,对于LORA微调而言,train和test代码不同。在test时候,因为保存的checkpoint只有linear层,需要先把模型合并到一起。

第五,一般情况下GPTQ模型可以用来微调,但是不能全参数微调,必须和PEFT一起使用。尽量不要使用量化后的模型进行SFT,因为LORA是float16,而量化后的模型不一定是float16,这样串联在一起是有问题的。例如,GPTQ是mixed int4/fp16,其中激活函数是fp16,GPTQ的模型没法和LORA层合并,因为LORA层都是fp16的。

(15)SFT训练过程是什么样?

第一,从loss角度,随着steps增加,train loss先急剧下降,而后平缓;evl loss先急剧下降,而后上升(过拟合)。

第二,为什么SFT通常在epoch=2时突然loss急剧降低?大模型参数量很大,在第一个epoch基本记住了整个训练集,所以在第二个epoch会突然下降,出现过拟合现象。

第三,摘抄-训10 个 epoch,如果某些case还学不会,说明模型的能力就是不够。

(16)SFT过程如何调参?

关于checkpoint的选择:在欠拟合和过拟合之间找到临界点

learning rate一般设置为预训练阶段的0.1倍。小模型大学习率,大模型小学习率。降低学习率某种程度上可以缓解过拟合。

epoch和数据量成反比,数据量越大,epoch个数越少。较大的epoch会造成过拟合,epoch 基本上就是 1~3个。

batchsize主要取决于使用的硬件内存。

起始训练适当做点 warmup,几种主流的 lr_scheduler 可以都试一下。

gradient_accumulation_steps -16 / 32 / 64 / 128 等数字都可以尝试下(梯度累加就是,每次获取1个batch的数据,计算1次梯度,梯度不清空,不断累加,累加一定次数后,根据累加的梯度更新网络参数,然后清空梯度,进行下一次循环)。

按需求决定是否使用 dropout。

(17)如何评价SFT之后的效果?

对于模型效果的评估,我们可以用客观+主观的标准来衡量。

主观的标准是根据自己对产品的预期,确定预期目标效果的评估框架。

客观的评价就是loss曲线。

(18)SFT有哪些不良后果?如何避免?

第一,模型的特定领域能力增加,通用能力会降低。如何缓解SFT后模型通用能力的下降?使用数据配比(增加一些通用生成的数据)。

第二,出现过拟合现象,出现大模型幻觉。

什么是大模型幻觉?大模型乱说,上下文矛盾,prompt与事实矛盾,泛化能力弱、荒谬的回复等。

如何避免过拟合现象?可以考虑PEFT的方法、学习率调整、正则化技术。

(19)如何评估SFT的推理耗时?

摘抄:模型的预测时间可以近似理解为:k*x+b,其中 b 是首个 token 的耗时,k 是后续每个 token 的耗时,x 是生成 token 的总数量。更具体的,b 会是 k 的十几倍或更多,和 prompt 的长度几乎呈正相关。这个耗时的近似估算和 KV_cache 机制有关,不熟悉的可以自行搜索。

这也就是为什么众人都知 cot 效果好,众人又都不使用 cot,因为我们可以几乎下断言“模型的生成速度和生成 token 数量呈正相关”,而 cot 恰恰又引入了大量的生成 token。

(20)什么是SFT packing?

SFT packing指的是在训练sft的过程中,将多个sft数据pack到一个样本内进行训练的方式,这种方式会加快模型训练速度。如果不进行SFT packing,那么对于短文本sft,需要padding到一个batch的最长长度,会浪费很多计算token。

优点:充分利用GPU算力。

缺点:不利于短文本和多轮对话,一般情况下不建议使用。

(21)一句话形容SFT的原理?

预训练是next token prediction的自监督学习,SFT是next token prediction的监督学习,二者的反馈粒度都是token。

SFT像是在背书,一般不存在学不会,只存在不会泛化。

(22)代码部分:

第一,大模型model和分词器tokenizer是配套的。

第二,最终结果的输出,可以启用思考的模式,也可以不使用思考的模式。要启用思考模式,您可以通过设置 enable_thinking 参数来实现。在 Qwen3 模型中,您可以通过调用 tokenizer.apply_chat_template() 方法,并将 enable_thinking 参数设置为 True 来启用思考模式。

第三,模型加载代码:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "./Mistral-7B-Instruct-v0.3-GPTQ-4bit"
tokenizer = AutoTokenizer.from_pretrained(model_path,trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    torch_dtype="auto",  
    device_map="auto" ,   
    trust_remote_code=False, 
    cache_dir = "./model", 
    load_in_4bit=True 
)

第四,推理代码:

input_text = "Hello, World!"
input_ids = tokenizer.encode(input_text,return_tensors="pt").to(model.device)
with torch.no_grad():
    output_ids = model.generate(
        input_ids=input_ids,
        max_length=50,
    )
output_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)

第五,微调训练代码。

有两种常用的方式,一种是transformers中的TrainingArguments和Trainer,另一种是TRL库中的SFTTrainer。

from transformers import AutoTokenizer, TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir='./results',          
    overwrite_output_dir=True,       
    evaluation_strategy="steps",
    num_train_epochs=3,              
    per_device_train_batch_size=8,   
    per_device_eval_batch_size=1,   
    save_steps=1000,                
    eval_steps=100,
    save_total_limit=2,      
    run_name="Qwen3-0.5B", 
    save_on_each_node = True,
    logging_steps = 10,
    gradient_checkpointing=True,
    gradient_accumulation_steps=4,#batch size大小等于per_device_train_batch_size * gradient_accumulation_steps
    learning_rate=1e-4,
    weight_decay = 0,
    max_steps=1000, #覆盖num_train_epochs。
    lr_scheduler_type = "linear",
)
trainer = Trainer(
    model=model,                        
    args=training_args,                
    train_dataset=inputs_ids,            
    eval_dataset=inputs_ids,             
    tokenizer=tokenizer,             
)
trainer.train()

第六,tokenizer.eos_token一定要给出,否则大模型不知道什么时候结束。EOS token一定要加在文字的末尾。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2025 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐