跳转到内容

输入关键词开始搜索

    资料摘要:personal chatgpt 06 — LLaMA,Alpaca LoRA 7B 推理

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

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

    本讲把第 1–4 讲串成一次真实推理流程:以 Hugging Face 格式的 LLaMA-7B 为 base model,用 bitsandbytes 8-bit 方式加载,再通过 PeftModel.from_pretrained 挂载 tloen/alpaca-lora-7b adapter;随后按照 Alpaca 的 instruction/input/response 模板构造 prompt,用 GenerationConfigmodel.generate() 生成回答。

    课程同时展示了 base model 与 adapter 在结构、dtype、target modules 和设备分布上的关系。

    课程代码:

    from transformers import LlamaForCausalLM, LlamaTokenizer
    model = LlamaForCausalLM.from_pretrained(
    "decapoda-research/llama-7b-hf",
    load_in_8bit=True,
    device_map="auto",
    )
    tokenizer = LlamaTokenizer.from_pretrained(
    "decapoda-research/llama-7b-hf"
    )

    视频观察到的结构包括:

    • 词表大小 32,000;
    • hidden size 4,096;
    • 32 个 decoder layers;
    • 每层包含 q/k/v/o projection、MLP、RMSNorm;
    • 输出头映射回 32,000 词表。
    • 保存输出中大部分量化线性层为 torch.int8,部分参数仍是 torch.float16
    • 课程环境有两张 GPU,device_map='auto' 把不同层分到不同设备;视频展示了部分层在 cuda:0、部分层在 cuda:1
    • 这种混合 dtype/多设备状态是 Transformers + Accelerate + bitsandbytes 的结果,不代表模型参数全都统一转换为 INT8。
    from peft import PeftModel
    model = PeftModel.from_pretrained(
    model,
    "tloen/alpaca-lora-7b",
    )
    • adapter 依赖匹配的 base model;只下载 LoRA checkpoint 不能独立推理。
    • 视频查看 adapter 配置,target modules 为 q_proj/k_proj/v_proj/o_proj
    • 课程早先展示的 LLaMA 默认映射只有 q_proj/v_proj;具体 checkpoint 配置可以覆盖默认映射。
    • 挂载后只对目标投影增加 LoRA A/B 分支,不替换整个 LLaMA 权重集合。

    有 input 时:

    Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
    ### Instruction:
    {instruction}
    ### Input:
    {input}
    ### Response:

    没有 input 时使用另一段简化模板,只保留 instruction 和 response 标记。

    课程强调模型训练时使用什么 prompt 格式,推理时最好保持相同格式;格式不匹配会影响 adapter 行为。

    generation_config = GenerationConfig(
    temperature=1.5,
    top_p=0.8,
    num_beams=4,
    )

    课程解释:

    • temperature:控制随机性/分布平滑程度;
    • top_p:限制 nucleus sampling 候选集合;
    • num_beams:beam search 宽度。

    但 notebook 没有显式设置 do_sample=True。在不同 Transformers 版本中,若生成实际走确定性 beam search,temperature/top-p 可能不生效或产生警告;不能仅凭配置字段存在就断言进行了 nucleus sampling。

    inputs = tokenizer(prompt, return_tensors="pt")
    input_ids = inputs["input_ids"].cuda()
    with torch.no_grad():
    generation_output = model.generate(
    input_ids=input_ids,
    generation_config=generation_config,
    return_dict_in_generate=True,
    output_scores=True,
    max_new_tokens=256,
    )
    output = tokenizer.decode(generation_output.sequences[0])
    return output.split("### Response:")[1].strip()

    视频测试包括:

    • 如何预测天气;
    • 写邮件邀请朋友周末去北京并说明喜欢什么;
    • 回答“为什么喜欢北京”。

    生成能遵循任务格式,但存在复读、主语错位和不自然表达;课程据此展示可运行性,不等于质量已被系统评测。

    本讲的组合关系:

    最终推理模型 = LLaMA-7B 基础权重 + Alpaca-LoRA adapter

    LoRA 目标层的逻辑仍是:

    y=xW+sxWAWBy=xW+s\cdot xW_AW_B

    其中 W 来自基础 LLaMA,W_A/W_B 来自 adapter checkpoint。

    • 00:00:回顾第 1–5 讲,本讲组装 LLaMA-7B 与 Alpaca-LoRA。
    • 01:03:流程概览:加载模型、加载 adapter、构造 prompt、推理。
    • 02:08load_in_8bit=Truedevice_map='auto'
    • 04:01:32 层 LLaMA 结构与 int8/fp16 参数。
    • 05:34:两张 GPU 的自动分层。
    • 06:08:加载 LLaMA tokenizer。
    • 06:37PeftModel.from_pretrained 挂载 adapter。
    • 08:57:adapter target modules 为 q/k/v/o projections。
    • 10:03:原始 LLaMA 续写与 Alpaca 指令跟随的区别。
    • 11:02:Alpaca instruction prompt 模板。
    • 12:05:temperature、top-p、beam 数量。
    • 12:34:tokenize、.cuda()model.generate()、截取 response。
    • 14:03:三组实际输出及复读/表达问题。
    • decapoda-research/llama-7b-hf 当前匿名 Hugging Face API 返回 401;课程中的基础模型标识不能作为无需认证的当前依赖。
    • 代码显式依赖 load_in_8bit=True、bitsandbytes CUDA 和 input_ids.cuda(),macOS/MPS 不能按原样运行。
    • 7B 权重仍有显著下载、内存和显存成本。
    • notebook 从 GitHub main 安装开发版 Transformers,历史 API 未锁定到 commit。
    • 保存输出警告 checkpoint tokenizer 类名不一致,说明 tokenizer/base checkpoint 匹配也需要审计。
    • .cuda() 把输入放到默认 CUDA 设备;在复杂 device map 下应确认输入与模型入口设备一致。
    • ASR 中 LLaMA、Alpaca、LoRA、PEFT、beam、nucleus、adapter 等术语均按 notebook 校正。
    • 综合第 1 讲:LLaMA 基础模型与 Alpaca 指令模型关系。
    • 综合第 2–4 讲:LoRA 数学、PEFT 训练和 adapter 注入机制。
    • 使用第 5 讲:低精度表示与 FP16/INT8 混合参数。
    • 铺垫第 8 讲:bitsandbytes 8-bit 加载为何仍需要高精度 outlier 路径。
    1. 为什么 tloen/alpaca-lora-7b 不能脱离 LLaMA-7B 基础权重单独推理?
    2. device_map='auto' 和显式 .cuda() 同时出现时,需要检查什么设备一致性问题?
    3. 为什么推理 prompt 应与 adapter 训练时的 Alpaca 模板一致?
    4. adapter 配置中的 target modules 为什么可以与 PEFT 默认映射不同?
    5. notebook 设置了 temperature/top-p,但为什么仍不能断言实际执行了随机 nucleus sampling?
    • 滴答清单抓取时学习状态:已完成
    • 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
    • notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。