跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 12 — LLM SFT training (trl SFTTrainer、alpaca dataset)

    视频摘要更新 2026-08-02置信度 high待阅读原始来源 ↗#深度#大模型#课程#personal-chatgpt

    本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列

    本讲展示一条完整但高资源的监督微调(SFT)流水线:加载 tatsu-lab/alpaca 数据,使用 Salesforce/xgen-7b-8k-base 的 tokenizer 和模型,以 4-bit 方式加载模型,通过 PEFT/LoRA 限制可训练参数,最后交给 TRL 的 SFTTrainer 在数据集 text 字段上训练。

    课程查看了有 input 和无 input 的样本。数据集同时提供结构化字段与已拼好的 text 字段,训练最终直接使用 dataset_text_field="text"。有输入的样本会把 instruction、input、response 组合起来;无输入样本则直接从 instruction 到 response。

    Notebook 将 tokenizer 的 pad_token 设为 eos_token,随后调用:

    model.resize_token_embeddings(len(tokenizer))

    课程借此说明 tokenizer 词表大小必须与模型输入 embedding 行数对齐。这里没有展示新增特殊 token 的完整策略,因此不能泛化为“任何场景都应把 pad token 设为 EOS”。

    模型按 4-bit、FP16 计算和 device_map="auto" 加载,再调用当时版本的 prepare_model_for_int8_training,随后配置 LoRA:r=16lora_alpha=32lora_dropout=0.05task_type="CAUSAL_LM"

    4-bit 量化减少基座模型驻留显存;LoRA 减少需更新的参数。两者解决的是不同层面的资源问题。

    课程配置 1 个 epoch、batch size 4、学习率 2e-4、FP16、线性学习率调度、最大序列长度 1024,并启用 packing=True。视频约 10:09 口述单次完整训练约 9 小时;该耗时依赖硬件和当时软件栈,不是可移植基准。

    SFT 的 token-level 交叉熵目标可写为:

    LSFT=tlogpθ(ytx,y<t)\mathcal L_{\text{SFT}}=-\sum_t \log p_\theta(y_t\mid x,y_{<t})

    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 配置 TrainingArgumentsSFTTrainer
    10:09 口述完整训练约 9 小时
    • 运行标签:conditional。 7B 模型、4-bit 加载、FP16 与 device_map="auto" 通常要求支持的 NVIDIA GPU、bitsandbytes、足够显存与模型/数据下载权限。
    • Notebook 安装未固定版本的 transformersacceleratebitsandbytestrlprepare_model_for_int8_training 和旧版 SFTTrainer 参数存在明显版本漂移风险。
    • 会下载大模型和数据,并执行真实训练、写入 xgen-7b-tuned-alpaca-l1;未设置短跑保护。
    • 代码写入本地代理地址,应按环境调整。
    • 本次未执行训练;Notebook 原有 26 个带输出的代码单元只能证明作者环境曾运行过,不等于当前环境可直接复现。
    • 承接第 11 讲: SFT 的小 batch 可与梯度累积组合形成更大的有效 batch。
    • 引出第 13 讲: 当 4-bit 与 LoRA 仍不足以控制激活显存时,可使用 gradient checkpointing。
    • 连接第 14、16 讲: 第 14 讲把相似思路应用于 Llama 2;第 16 讲把 SFTTrainer 放回 TRL 的 SFT/RM/PPO 全景中。
    1. Alpaca 样本中 instructioninputoutput 与训练用 text 字段分别承担什么作用?
    2. 4-bit 加载与 LoRA 各自减少了哪一类资源开销?
    3. 为什么 tokenizer 大小变化后需要 resize_token_embeddings
    4. packing=True 的目的是什么,可能怎样改变样本边界处理?
    5. 哪些 Notebook API 最可能因 TRL/PEFT 版本变化而失效?
    • 滴答清单抓取时学习状态:已完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。