Downloads · 30 days
4
8% of all-time downloads
GPTcn/GPT_teacher-3.37M-cn
GPT_teacher-3.37M-cn is a text generation model from GPTcn. Use it when you need the model to write or continue text. It is set up for pytorch. The card lists the license as mit.
本项目面向课堂教学,目标是让初学者用一台普通 CPU 电脑,在 45 分钟内从零跑通一个小参数的中文 GPT:看清核心流程、跑通训练、得到“可用的中文回答”,并支持简单的推理演示。
Downloads · 30 days
4
8% of all-time downloads
All-time downloads
53
Public
Repo size
17.8 MB
Likes
3
Public
Click a slice to open those files.
.pt17.8 MB · 100%
From the Hugging Face model README
本项目面向课堂教学,目标是让初学者用一台普通 CPU 电脑,在 45 分钟内从零跑通一个小参数的中文 GPT:看清核心流程、跑通训练、得到“可用的中文回答”,并支持简单的推理演示。
src/model.py:GPT 核心(Embedding/自注意力/前馈/RMSNorm/RoPE/权重共享)src/data.py:分词器加载、指令和 LM 数据处理、批处理与目标构造src/train.py:CPU 训练主循环、评估、保存与动态量化、耗时统计src/infer.py:推理 CLI(温度、top-k、top-p、重复惩罚、停止词、输出清理)src/build_tokenizer.py:构建 HF ByteLevel BPE 中文分词器(带解码器,避免乱码)config.yaml:统一管理模型、训练、数据、分词器与保存路径data/*.jsonl:教学数据({"prompt": "...", "completion": "..."})jsonl+HF ByteLevel BPE(显式设置 ByteLevel 解码器,避免乱码)n_layer=4, n_head=4, n_embd=256, seq_len=128batch_size=16, micro_batch=4(有效批 64)torch.set_num_threads(os.cpu_count()),DataLoader 禁用多进程(macOS 下更稳)src/model.py:98)src/data.py:24–31)len(prefix)-1,确保第一个答案 token 参与训练(src/data.py:28–31)CrossEntropyLoss(ignore_index=-100)(src/train.py:50)src/build_tokenizer.py:6–8)len(prefix)-1,避免答案错位(src/data.py:28–31)PAD/BOS/UNK,前若干步屏蔽EOS,避免空答(src/infer.py:41–50, 68–73)src/infer.py:26–30, 82–83)src/infer.py:35–37)src/infer.py:68–73)eval loss与elapsed,课时内可观测质量(src/train.py:71–82)python -m pip install -r requirements.txt
python -m src.build_tokenizer
config.yaml 中:
data.train_path: data/train.jsonldata.val_path: data/val.jsonltokenizer.type: hf_tokenizerstokenizer.path: tokenizer/tokenizer.jsontraining.max_steps: 1500–2000(课堂机器允许的话)python -m src.train
eval_interval步打印eval loss与累计elapsed Xscheckpoints/last.pt、checkpoints/quantized.pt、checkpoints/train_time.txt# Question1
python -m src.infer --prompt "什么是注意力机制?" --ckpt checkpoints/last.pt --temperature 0.0 --show_label
# Question2
python -m src.infer --prompt "解释蒸馏水与纯水区别?" --ckpt checkpoints/last.pt --temperature 0.0 --show_label
注意力机制通过分配权重让模型关注关键位置,从而更好地理解序列中的关系。蒸馏水是通过蒸馏获得的水,去除了大部分杂质;纯水是指杂质含量极低的水,制备方式可以是蒸馏、反渗透等。python -m src.infer --prompt "什么是注意力机制?" --stop_strings "。" ";" "\n" --temperature 0.0 --show_label
python -m src.infer --prompt "什么是注意力机制?" --ckpt checkpoints/quantized.pt --temperature 0.0 --show_label
src/model.py:95–103)src/model.py:18–31)src/model.py:41–58)src/data.py:24–31)src/train.py:56–80)src/infer.py:32–83)src/build_tokenizer.py:6–8)说明:
src/model.py核心约百行即可完整呈现 GPT 最小闭环;其余文件各自职责清晰,便于教学与修改。
整体架构
src/model.py:定义 GPT 的模块化组件(RMSNorm、RoPE、自注意力、前馈、残差与权重共享)src/data.py:将{"prompt","completion"}样本转换为模型输入与训练目标(teacher forcing)src/train.py:CPU 训练主循环、评估与保存(含动态量化与耗时统计)src/infer.py:命令行推理与采样策略(含输出清理与停止词)src/tokenizer.py/src/build_tokenizer.py:HF ByteLevel BPE 分词器加载与构建(含 ByteLevel 解码器)训练流程(管线)
src/train.py:21–26,src/tokenizer.py:20–39)src/data.py:66–70,src/train.py:39–40)src/train.py:60–62)→ 反向与梯度累积(src/train.py:62–68)→ 优化与调度(src/train.py:65–69)src/train.py:71–80)→ 导出量化(src/train.py:81–82)模型方法级解析
RMSNorm.forward(src/model.py:13–16)用均方根缩放激活,结构简洁、计算高效rope(src/model.py:18–31)将相对位置信息旋转注入 Q/K,提高位置泛化SelfAttention.forward(src/model.py:41–58)Q/K/V 分解 → 注意力权重 → 输出投影;含因果 mask 与 DropoutBlock.forward(src/model.py:81–84)注意力与前馈的残差堆叠,RMSNorm 在前GPT.forward(src/model.py:95–103)嵌入 → 堆叠 Block→ 归一化 →LM Head(共享权重)数据与目标(方法级)
InstructDataset.__init__(src/data.py:10–35)拼接用户:prompt\n助手:为前缀,答案接在后;截断至seq_lentar = ids[1:] + [EOS](src/data.py:24–27)并忽略len(prefix)-1位置(src/data.py:28–31),只对答案段计算损失collate(src/data.py:54–64)按seq_len补齐并返回张量,忽略目标用-100推理与采样(方法级)
generate(src/infer.py:32–83):
src/infer.py:35–37)EOS,首步屏蔽PAD/BOS/UNK(src/infer.py:41–50, 68–73)src/infer.py:26–30, 82–83)可用性策略(总结)
src/build_tokenizer.py:6–8)len(prefix)-1确保第一个答案 token 参与训练(src/data.py:28–31)EOS与无效 token;必要时添加--stop_stringssrc/model.py:103 行src/data.py:70 行src/train.py:104 行src/infer.py:122 行src/tokenizer.py:58 行src/build_tokenizer.py:27 行config.yaml:23 行(不计入核心代码合计)n_layer=4, n_head=4, n_embd=256, seq_len=128;HF ByteLevel BPE 分词器(设置 ByteLevel 解码器);权重共享、RMSNorm、RoPE;AdamW+预热+余弦;梯度累积与裁剪。EOS、提示规范化、输出清理与停止词,避免空答与乱码。d=256、层数 L=4、词表大小 V=824(从 tokenizer/tokenizer.json 读取)。Total = V*d + L*(12*d^2 + 11*d) + dV*d:词嵌入(每个词一个长度为 d 的向量)12*d^2 + 11*d:注意力的线性与投影、前馈两层线性与偏置、两处 RMSNorm 权重合计+ d:最终 RMSNorm 权重V*d = 824*256 = 210,944d^2 = 256*256 = 65,53612*d^2 + 11*d = 12*65,536 + 11*256 = 786,432 + 2,816 = 789,248L*(...) = 4*789,248 = 3,156,992210,944 + 3,156,992 + 256 = 3,368,192params_model=3,368,192)。src/build_tokenizer.py,且其设置了 ByteLevel 解码器;查看推理是否使用 HF 分词器路径--stop_strings祝学习顺利!如需更高质量中文问答效果,可在不改代码的前提下扩充data/train.jsonl至数百条,并将training.max_steps提升到2000左右。课堂演示请选择temperature=0.0与适当stop_strings,确保“答案可用、与问题相关”。
python -m pip install -r requirements.txtpython -m src.build_tokenizerpython -m src.trainpython -m src.infer --prompt "什么是注意力机制?" --temperature 0.0 --show_labelpython -m src.infer --prompt "解释蒸馏水与纯水区别?" --temperature 0.0 --show_labelcheckpoints/last.pt, checkpoints/quantized.pt)由 Git LFS 管理,保证代码仓库轻量且权重传输高效。brew install git-lfssudo apt install git-lfsgit lfs installgit clone <仓库地址>git lfs pullgit lfs ls-files 显示被 LFS 管理的权重文件列表--force 强推一次,其后正常 git push/git pull 即可;协作者如历史被重写,建议重新克隆或 git fetch && git reset --hard origin/main。pip install huggingface_hubhuggingface-cli loginhuggingface-cli repo create gpt_teacher-ckpt -ycheckpoints/last.pt、checkpoints/quantized.pt、tokenizer/tokenizer.json、config.yaml、简要说明 README.mdgit init && git lfs installgit remote add origin https://huggingface.co/<你的用户名>/gpt_teacher-ckptgit add -A && git commit -m "Upload CPU GPT teacher checkpoints"git push -u origin mainhuggingface_hub 的 upload_file/upload_folder 接口,适合脚本化批量上传。license: mit tags:
本仓库包含用于课堂教学的中文小参数 GPT 的权重与资源:
last.pt(非量化)、quantized.pt(动态量化,CPU推理更快)tokenizer.json(HF ByteLevel BPE,带 ByteLevel 解码器,避免乱码)config.yaml(模型与训练超参)使用建议:
temperature=0.0 以保证稳态相关性;如需风格演示可开启 top_p/top_k/temperature。--stop_strings "。" ";" "\n" 控制尾部冗余。