Homestead
SFTHomestead

Blog260801 · Llama 3.1 Colab LoRA

监督微调学习:
从 SFT 到 LoRA 实战

用 Llama 3.1 8B、Unsloth、Google Colab
和 Alpaca 数据集来理解 SFT。
目标是让模型稳定遵循指令,并保持统一回答格式。

2026.08.01约 8 分钟阅读SFT / LoRA / Colab

大型语言模型在预训练之后,已经具备了很强的语言理解和生成能力。但如果我们希望它更稳定地遵循指令、按照指定格式回答、适应某个领域的表达方式,通常还需要继续做一层后训练。

Supervised Fine-Tuning,简称 SFT,中文常译为“监督微调”。它可以理解为:用一批“用户输入 + 标准答案”的样本,教模型学会我们希望它怎样回答。

本文结合一次 Llama 3.1 8B + Google Colab + Unsloth + LoRA 的微调实验,整理 SFT 的核心概念、数据格式、训练流程,以及为什么 LoRA 能让普通学习者也能在免费或低成本 GPU 环境中跑通大模型微调。

一、什么是 SFT?

SFT 的完整名称是 Supervised Fine-Tuning,也就是监督微调。它的目标不是从零训练一个模型,而是在已经预训练好的大语言模型基础上,让模型适应某类下游任务。

训练时,模型看到的是用户任务和上下文,并学习生成对应的标准回答。经过大量类似样本训练后,模型会逐渐学习:

  • 如何遵循 instruction;
  • 如何使用指定回答格式;
  • 如何形成稳定的回答风格;
  • 如何处理某一类固定任务;
  • 如何用领域化语言表达已有知识。
从大模型后训练流程看,SFT 通常位于“预训练之后、偏好优化之前”:Pretraining -> SFT -> RLHF / DPO / Preference Learning。

二、为什么这次实验选择 LoRA?

完整微调一个 Llama 3.1 8B 模型非常消耗显存和算力。Llama 3.1 8B 约有 80 亿参数,如果全部参数都参与训练,普通 Colab T4 很难承受。

LoRA,Low-Rank Adaptation,是一种参数高效微调方法。它的核心思路是冻结原始大模型的大部分参数,在关键层旁边加入少量可训练 adapter 参数,训练时只更新这些 LoRA adapter。

因此,在本实验中,训练只更新约 0.52% 的参数。对学习者来说,这一点非常关键:我们不是重新训练整个 Llama,而是在原模型旁边训练一小组 adapter。

Fine-tuning targetSFT 决定模型要学习什么行为。
Efficient methodLoRA 决定如何用更低显存完成训练。
Practical valueadapter 轻量、可保存、可替换、方便迭代。
冻结原始大模型的大部分参数
在关键层旁边加入少量可训练 adapter 参数
训练时只更新这些 LoRA adapter

三、本次 Colab 实验环境

本次实验在 Google Colab 云端 GPU runtime 中运行,Colab 可以理解成一台临时云端 Linux 虚拟机。成功连接到的环境如下:

Current directory: /content
Python: 3.12.13
Platform: Linux-6.6.122+-x86_64-with-glibc2.35
Torch: 2.11.0+cu128
CUDA available: True
GPU: Tesla T4
GPU memory: 14.563 GB

四、Alpaca 数据格式:SFT 的训练材料

本次使用的数据集是 unsloth/alpaca-cleaned。它是清洗过的 Alpaca instruction tuning 数据集,本次加载结果为 train split: 51,760 examples

instruction用户任务或指令。
input补充上下文,可以为空。
output模型要学习生成的标准回答。
text格式化后真正交给 SFTTrainer 训练的文本。

五、Prompt formatting:把数据变成模型能学的文本

原始 Alpaca 数据不能直接丢给模型训练,需要先格式化成完整 prompt。官方 notebook 使用的模板做了一件很重要的事:把 instructioninputoutput 三列合并成一列新的 text。SFTTrainer 真正训练的就是这列 text

instruction
input
output
text

六、训练结果:60 steps 是 smoke test

本次训练成功完成 60 steps。这里要特别说明:60 steps 只是 smoke test,也就是为了验证流程能跑通。它说明模型能成功加载、数据能成功格式化、LoRA adapter 能成功训练、checkpoint 能成功保存。但它不代表模型质量已经充分优化。

如果要认真评估模型效果,还需要更长训练、更严格的验证集、更稳定的生成参数,以及训练前后的系统对比。

七、训练后 checkpoint 里最重要的文件

训练完成后,Trainer 在 Colab 中生成 /content/outputs/checkpoint-60。其中最重要的是:

adapter_model.safetensors
adapter_config.json
  • adapter_model.safetensors:训练后的 LoRA adapter 权重;
  • adapter_config.json:adapter 配置,说明如何把 adapter 挂载回 base model;
  • optimizer.ptscheduler.pttrainer_state.json 等文件:主要用于恢复训练。

因为 LoRA 只训练 adapter,所以保存出来的不是完整 Llama 3.1 8B 模型,而是一组轻量 adapter。后续推理时,需要 base model 加上这个 adapter 一起使用。

八、SFT、LoRA、QLoRA、Full Fine-Tuning 的关系

可以用一张简表理解它们:

方法核心含义资源需求适合场景
SFT用标注样本做监督微调取决于训练方式instruction following、领域任务、格式学习
Full Fine-Tuning更新全部模型权重最高资源充足、追求最大性能变化
LoRA冻结原模型,只训练 adapter较低学习实验、低成本微调、快速迭代
QLoRA4-bit 量化加载模型,再训练 LoRA更低小 GPU 上训练较大模型

SFT 是“训练目标”,LoRA 和 QLoRA 是“实现方式”。本次实验的关键组合是:

Llama 3.1 8B + 4-bit loading + LoRA adapter + Alpaca SFT data + SFTTrainer

九、总结

SFT 的本质,是用标准答案教模型“应该怎样回答”。它让通用大语言模型更适合特定任务、格式和领域表达。

连接 Colab GPU
安装 Unsloth / Transformers / TRL / Datasets
加载 Llama 3.1 8B
用 4-bit 降低显存占用
挂载 LoRA adapter
加载 Alpaca 数据集
格式化 instruction / input / output
添加 EOS_TOKEN
训练前保存 baseline
使用 SFTTrainer 训练 60 steps
保存 checkpoint
训练后做 before / after comparison

这次 60 steps 训练不是为了得到一个最终可上线模型,而是为了建立一条可重复的学习路径:先跑通官方 notebook,理解 SFT、LoRA、数据格式和 checkpoint,再逐步替换成自己的中文数据。

SFT 教模型如何回答,LoRA 让这个训练过程变得轻量,Colab demo 则提供了一条普通学习者也能走通的实践路线。

Blog260801 · Supervised Fine-Tuning 监督微调学习 · Llama 3.1 Colab LoRA 微调示例