outputs/notebook_demo/ 目录说明文档这个目录是:
也就是说,它不是原始模型目录,而是 01_lora_demo.ipynb 跑完以后生成的结果。
对 LoRA 实验来说,这个目录尤其重要,因为它最能说明一件事:
很多初学者会以为训练完会得到一个“全新的完整模型目录”。
但在 LoRA 里,通常更重要的是:
这就是这个目录存在的意义。
当前目录里主要有:
README.mdadapter_config.jsonadapter_model.safetensorstokenizer.jsontokenizer_config.jsontraining_args.bin这些文件共同构成:
adapter_config.json:LoRA 配置说明书这个文件非常关键。
它不是权重本身,而是:
"base_model_name_or_path": "/root/course_lora/models/tiny-gpt2"这说明:
这也是 LoRA 最重要的证据之一:
"peft_type": "LORA"明确告诉你:
"r": 8这对应训练时的低秩大小。
"lora_alpha": 16这对应训练时的缩放系数。
"lora_dropout": 0.05这对应训练时的 LoRA dropout。
也就是说,这些参数并不是只在训练时临时存在,它们会被写进配置文件里,方便以后重新加载。
"bias": "none"表示这次 LoRA 没有额外训练 bias。
"task_type": "CAUSAL_LM"说明这次任务类型是因果语言模型。
"target_modules": ["c_attn"]这一项特别值得学生注意。
它表示:
这里写的是:
c_attn可以先粗略理解成:
这条信息非常重要,因为它说明:
"inference_mode": true说明这个 adapter 当前被保存成适合推理加载的状态。
adapter_model.safetensors:LoRA 真正学到的增量参数这个文件是:
如果说:
models/tiny-gpt2/model.safetensors
那么:
adapter_model.safetensors
这是学生最该真正理解的一点:
这也正是 LoRA 节省存储和微调成本的原因之一。
tokenizer.json 和 tokenizer_config.json这两个文件和 base model 目录里同名文件的作用类似:
因为在真实工程里,训练结果目录通常希望尽量自包含。
也就是说,你后面如果拿到这个目录做推理,最好能直接:
而不是再去猜该用哪份 tokenizer 配置。
在这套课程最小实验里,代码就是这样做的:
tokenizer = AutoTokenizer.from_pretrained(adapter_dir)这说明:
training_args.bin:训练参数快照这个文件保存的是:
也就是 TrainingArguments(...) 里的那一整组设置。
比如:
对初学者来说,不需要直接打开这个二进制文件。
你只需要知道:
这有助于以后做复现和排查。
README.md:自动生成的模型卡这个文件看起来很长,而且有很多:
[More Information Needed]这是正常的。
它通常是 Hugging Face / PEFT 在保存模型时自动生成的一份模板型模型卡。
base_model: /root/course_lora/models/tiny-gpt2再次告诉你:
library_name: peft说明这份训练输出来自:
pipeline_tag: text-generation说明这个结果主要面向:
tags:里面有:
loratransformers这些标签更多是元信息。
因为这是自动生成模板,课程实验没有专门把模型卡完整填写。
所以学生不需要被这份长 README 吓到。
真正重要的信息主要是:
在 02_eval_and_infer.ipynb 里,核心代码是:
base_model = AutoModelForCausalLM.from_pretrained(base_model_name)
model = PeftModel.from_pretrained(base_model, adapter_dir)这里的 adapter_dir 就是:
outputs/notebook_demo也就是说:
这正是为什么这个目录不能单独替代 base model 目录:
models/tiny-gpt2 的关系这是学生最容易混淆的点。
models/tiny-gpt2表示:
outputs/notebook_demo表示:
所以:
两者加在一起,才构成完整推理能力。
adapter_model.safetensorsadapter_config.json 记录了这次 LoRA 是怎么配的base_model_name_or_path 说明 adapter 必须依赖原始模型整体结构大体还是类似的:
adapter_config.jsonadapter_model.safetensors变化的主要会是:
但核心思想不变: