models/tiny-gpt2/ 目录说明文档

这一整个目录可以理解成:

它不是你训练后的结果,而是:

在这套课程最小实验里,后面的训练和推理都要依赖这个目录。
因为 LoRA 的特点就是:

所以学生一定要分清楚:


一、这个目录里有哪些文件

当前目录中主要有:

每个文件作用不同,但它们共同组成了“一个可加载的 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:生成阶段的小配置

这个文件是:

当前内容很短,核心字段有:

它的作用是告诉 generate() 这类接口:

你可以把它理解成:


四、model.safetensors:真正的模型权重

这是这个目录里最“重”的文件。

它保存的是:

也就是:

为什么文件名不是 .bin

这里用的是:

这是 Hugging Face 生态里越来越常见的权重格式。

它的优点可以先简单理解成:

对初学者来说,最重要的是知道:


五、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。

对于初学者,只要记住:


七、这个目录在整个实验里扮演什么角色

你可以把这个目录想成:

后面所有操作,都是围绕这个底座展开:

  1. 01_lora_demo.ipynb 里从这里加载 tokenizer 和 base model
  2. LoRA 训练并不修改这份底座目录本身
  3. 02_eval_and_infer.ipynb 里再次从这里加载 base model
  4. 然后再把 outputs/notebook_demo 里的 adapter 挂回去

所以它不是“训练结果目录”,而是:


八、学生最容易混淆的地方

容易误解 1

其实不是。
它只是结构说明,真正参数在:

容易误解 2

也不是。
LoRA 推理时仍然需要这里的 base model。

容易误解 3

其实 tokenizer 很重要。
没有正确 tokenizer,模型就没法把文本转成正确 token。


九、这一份目录最值得学生带走的结论

  1. 一个 Hugging Face 本地模型目录,通常由“配置 + 权重 + tokenizer 文件”组成
  2. config.json 决定模型长什么样,model.safetensors 才是真正权重
  3. tokenizer.jsontokenizer_config.json 决定文本如何被切成 token
  4. 在 LoRA 场景里,这个目录是始终不变的 base model 底座