models/tiny-gpt2/ 目录说明文档这一整个目录可以理解成:
它不是你训练后的结果,而是:
在这套课程最小实验里,后面的训练和推理都要依赖这个目录。
因为 LoRA 的特点就是:
所以学生一定要分清楚:
models/tiny-gpt2/
outputs/notebook_demo/
当前目录中主要有:
config.jsongeneration_config.jsonmodel.safetensorstokenizer.jsontokenizer_config.json每个文件作用不同,但它们共同组成了“一个可加载的 Hugging Face 本地模型目录”。
也就是说,当代码写:
AutoTokenizer.from_pretrained("models/tiny-gpt2")
AutoModelForCausalLM.from_pretrained("models/tiny-gpt2")时,程序就是从这个目录里读取这些文件。
config.json:模型结构说明书这个文件不是权重本身,而是:
你可以把它理解成:
"architectures": ["GPT2LMHeadModel"]这说明:
也就是说,这套最小实验不是 BERT,不是 T5,而是:
"model_type": "gpt2"这再次明确:
"n_layer": 2表示模型有 2 层 Transformer block。
这个数字很小,说明它真的是一个“极小演示模型”。
"n_head": 2表示注意力头数是 2。
"n_embd": 2表示 embedding 维度非常小。
这也进一步说明:
"n_ctx": 1024表示上下文长度相关配置是 1024。
可以先粗略理解成:
"vocab_size": 50257词表大小是 50257。
也就是说,tokenizer 最终会把文本映射到这 50257 个 token id 之一。
"bos_token_id": 50256"eos_token_id": 50256这说明:
对 GPT-2 来说,这是比较常见的情况。
"pad_token_id": null这一项非常值得学生注意。
它表示:
这就是为什么前面的 notebook 里要写:
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token也就是说,notebook 里那句代码不是“多余”,而是这个模型配置本身决定的。
"task_specific_params": {"text-generation": {"do_sample": true, "max_length": 50}}这里给了一个和文本生成相关的默认任务参数。
意思可以简单理解成:
generation_config.json:生成阶段的小配置这个文件是:
当前内容很短,核心字段有:
bos_token_ideos_token_id它的作用是告诉 generate() 这类接口:
你可以把它理解成:
model.safetensors:真正的模型权重这是这个目录里最“重”的文件。
它保存的是:
也就是:
.bin这里用的是:
safetensors这是 Hugging Face 生态里越来越常见的权重格式。
它的优点可以先简单理解成:
对初学者来说,最重要的是知道:
config.json 不是权重model.safetensors 才是权重tokenizer.json:真正的 tokenizer 规则这个文件保存的是:
也就是:
它通常比 tokenizer_config.json 更底层,也更完整。
你可以把它理解成:
tokenizer_config.json:tokenizer 的配置说明这个文件更像是 tokenizer 的“说明信息”。
"tokenizer_class": "GPT2Tokenizer"说明:
"model_max_length": 1024说明 tokenizer 默认支持的最大长度是 1024。
这和前面 config.json 里的上下文长度设置是对应的。
"pad_token": null再次说明:
所以 notebook 里手动补 pad token 是必要的。
"bos_token": "<|endoftext|>""eos_token": "<|endoftext|>""unk_token": "<|endoftext|>"说明 GPT-2 里很多特殊角色都复用了这个特殊 token。
对于初学者,只要记住:
你可以把这个目录想成:
后面所有操作,都是围绕这个底座展开:
01_lora_demo.ipynb 里从这里加载 tokenizer 和 base model02_eval_and_infer.ipynb 里再次从这里加载 base modeloutputs/notebook_demo 里的 adapter 挂回去所以它不是“训练结果目录”,而是:
config.json 是模型本身其实不是。
它只是结构说明,真正参数在:
model.safetensorsoutputs/notebook_demo 就够了也不是。
LoRA 推理时仍然需要这里的 base model。
其实 tokenizer 很重要。
没有正确 tokenizer,模型就没法把文本转成正确 token。
config.json 决定模型长什么样,model.safetensors 才是真正权重tokenizer.json 和 tokenizer_config.json 决定文本如何被切成 token