资料摘要:personal chatgpt 12 — LLM SFT training (trl SFTTrainer、alpaca dataset)
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
本讲展示一条完整但高资源的监督微调(SFT)流水线:加载 tatsu-lab/alpaca 数据,使用 Salesforce/xgen-7b-8k-base 的 tokenizer 和模型,以 4-bit 方式加载模型,通过 PEFT/LoRA 限制可训练参数,最后交给 TRL 的 SFTTrainer 在数据集 text 字段上训练。
1. Alpaca 52K 数据
Section titled “1. Alpaca 52K 数据”课程查看了有 input 和无 input 的样本。数据集同时提供结构化字段与已拼好的 text 字段,训练最终直接使用 dataset_text_field="text"。有输入的样本会把 instruction、input、response 组合起来;无输入样本则直接从 instruction 到 response。
2. Tokenizer 与 embedding 对齐
Section titled “2. Tokenizer 与 embedding 对齐”Notebook 将 tokenizer 的 pad_token 设为 eos_token,随后调用:
model.resize_token_embeddings(len(tokenizer))课程借此说明 tokenizer 词表大小必须与模型输入 embedding 行数对齐。这里没有展示新增特殊 token 的完整策略,因此不能泛化为“任何场景都应把 pad token 设为 EOS”。
3. 4-bit 加载与 LoRA
Section titled “3. 4-bit 加载与 LoRA”模型按 4-bit、FP16 计算和 device_map="auto" 加载,再调用当时版本的 prepare_model_for_int8_training,随后配置 LoRA:r=16、lora_alpha=32、lora_dropout=0.05、task_type="CAUSAL_LM"。
4-bit 量化减少基座模型驻留显存;LoRA 减少需更新的参数。两者解决的是不同层面的资源问题。
4. SFTTrainer
Section titled “4. SFTTrainer”课程配置 1 个 epoch、batch size 4、学习率 2e-4、FP16、线性学习率调度、最大序列长度 1024,并启用 packing=True。视频约 10:09 口述单次完整训练约 9 小时;该耗时依赖硬件和当时软件栈,不是可移植基准。
公式 / 代码
Section titled “公式 / 代码”SFT 的 token-level 交叉熵目标可写为:
Notebook 核心配置:
train_dataset = load_dataset("tatsu-lab/alpaca", split="train")model_ckpt = "Salesforce/xgen-7b-8k-base"model = AutoModelForCausalLM.from_pretrained( model_ckpt, load_in_4bit=True, torch_dtype=torch.float16, device_map="auto",)peft_config = LoraConfig( r=16, lora_alpha=32, lora_dropout=0.05, bias="none", task_type="CAUSAL_LM",)trainer = SFTTrainer( model=model, train_dataset=train_dataset, dataset_text_field="text", max_seq_length=1024, tokenizer=tokenizer, args=training_args, packing=True, peft_config=peft_config,)| 时间 | 内容 |
|---|---|
| 00:27 | 加载 Alpaca 52K 数据集 |
| 00:57 | 区分带 input 与不带 input 的样本 |
| 03:19 | 确认训练最终使用数据集的 text 字段 |
| 03:35 | 加载 XGen tokenizer 与模型 |
| 04:28 | 讨论 load_in_4bit |
| 07:03 | 调整 token embedding 与 tokenizer 大小 |
| 07:40 | 进入 LoRA/PEFT 配置 |
| 08:16 | 配置 TrainingArguments 与 SFTTrainer |
| 10:09 | 口述完整训练约 9 小时 |
- 运行标签:conditional。 7B 模型、4-bit 加载、FP16 与
device_map="auto"通常要求支持的 NVIDIA GPU、bitsandbytes、足够显存与模型/数据下载权限。 - Notebook 安装未固定版本的
transformers、accelerate、bitsandbytes、trl;prepare_model_for_int8_training和旧版SFTTrainer参数存在明显版本漂移风险。 - 会下载大模型和数据,并执行真实训练、写入
xgen-7b-tuned-alpaca-l1;未设置短跑保护。 - 代码写入本地代理地址,应按环境调整。
- 本次未执行训练;Notebook 原有 26 个带输出的代码单元只能证明作者环境曾运行过,不等于当前环境可直接复现。
与前后讲关系
Section titled “与前后讲关系”- 承接第 11 讲: SFT 的小 batch 可与梯度累积组合形成更大的有效 batch。
- 引出第 13 讲: 当 4-bit 与 LoRA 仍不足以控制激活显存时,可使用 gradient checkpointing。
- 连接第 14、16 讲: 第 14 讲把相似思路应用于 Llama 2;第 16 讲把
SFTTrainer放回 TRL 的 SFT/RM/PPO 全景中。
- Alpaca 样本中
instruction、input、output与训练用text字段分别承担什么作用? - 4-bit 加载与 LoRA 各自减少了哪一类资源开销?
- 为什么 tokenizer 大小变化后需要
resize_token_embeddings? packing=True的目的是什么,可能怎样改变样本边界处理?- 哪些 Notebook API 最可能因 TRL/PEFT 版本变化而失效?
- 视频:LLM SFT training (trl SFTTrainer、alpaca dataset)
- 转录:🔒 personal chatgpt 12 视频转录
- 课件 / 代码:🔒 llm_training_sft.ipynb
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。