资料摘要:personal chatgpt 06 — LLaMA,Alpaca LoRA 7B 推理
本讲由真实视频转录与作者 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,用 GenerationConfig 和 model.generate() 生成回答。
课程同时展示了 base model 与 adapter 在结构、dtype、target modules 和设备分布上的关系。
1. 加载基础 LLaMA-7B
Section titled “1. 加载基础 LLaMA-7B”课程代码:
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 词表。
2. 8-bit 权重与设备自动分配
Section titled “2. 8-bit 权重与设备自动分配”- 保存输出中大部分量化线性层为
torch.int8,部分参数仍是torch.float16。 - 课程环境有两张 GPU,
device_map='auto'把不同层分到不同设备;视频展示了部分层在cuda:0、部分层在cuda:1。 - 这种混合 dtype/多设备状态是 Transformers + Accelerate + bitsandbytes 的结果,不代表模型参数全都统一转换为 INT8。
3. 挂载 Alpaca-LoRA adapter
Section titled “3. 挂载 Alpaca-LoRA adapter”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 权重集合。
4. Alpaca instruction prompt 模板
Section titled “4. Alpaca instruction prompt 模板”有 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 行为。
5. 生成参数
Section titled “5. 生成参数”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。
6. 推理函数
Section titled “6. 推理函数”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()视频测试包括:
- 如何预测天气;
- 写邮件邀请朋友周末去北京并说明喜欢什么;
- 回答“为什么喜欢北京”。
生成能遵循任务格式,但存在复读、主语错位和不自然表达;课程据此展示可运行性,不等于质量已被系统评测。
公式 / 代码
Section titled “公式 / 代码”本讲的组合关系:
最终推理模型 = LLaMA-7B 基础权重 + Alpaca-LoRA adapterLoRA 目标层的逻辑仍是:
其中 W 来自基础 LLaMA,W_A/W_B 来自 adapter checkpoint。
00:00:回顾第 1–5 讲,本讲组装 LLaMA-7B 与 Alpaca-LoRA。01:03:流程概览:加载模型、加载 adapter、构造 prompt、推理。02:08:load_in_8bit=True与device_map='auto'。04:01:32 层 LLaMA 结构与 int8/fp16 参数。05:34:两张 GPU 的自动分层。06:08:加载 LLaMA tokenizer。06:37:PeftModel.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:三组实际输出及复读/表达问题。
运行边界与可复现性
Section titled “运行边界与可复现性”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 校正。
与前后讲关系
Section titled “与前后讲关系”- 综合第 1 讲:LLaMA 基础模型与 Alpaca 指令模型关系。
- 综合第 2–4 讲:LoRA 数学、PEFT 训练和 adapter 注入机制。
- 使用第 5 讲:低精度表示与 FP16/INT8 混合参数。
- 铺垫第 8 讲:bitsandbytes 8-bit 加载为何仍需要高精度 outlier 路径。
- 为什么
tloen/alpaca-lora-7b不能脱离 LLaMA-7B 基础权重单独推理? device_map='auto'和显式.cuda()同时出现时,需要检查什么设备一致性问题?- 为什么推理 prompt 应与 adapter 训练时的 Alpaca 模板一致?
- adapter 配置中的 target modules 为什么可以与 PEFT 默认映射不同?
- notebook 设置了 temperature/top-p,但为什么仍不能断言实际执行了随机 nucleus sampling?
- 视频:LLaMA,Alpaca LoRA 7B 推理
- 转录:🔒 personal chatgpt 06 视频转录
- 课件 / 代码:🔒 06_alpaca_llama_7b_lora.ipynb
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。