和自己训练的大模型对话:train-llm-from-scratch的chat.py完全指南
2026/9/15 17:15:53 网站建设 项目流程

和自己训练的大模型对话:train-llm-from-scratch的chat.py完全指南

【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch

train-llm-from-scratch 是一个从零训练大模型的开源项目:纯 PyTorch 手写 Transformer,覆盖预训练、SFT、奖励模型、DPO、PPO、GRPO 全流程。而 scripts/chat.py 是整条流水线的"最后一公里"——一条命令,就能和你自己训练的大模型对话,无论是 Base 模型还是经过 SFT 微调的对齐版本。

🚀 为什么需要 chat.py

训练大模型最爽的时刻,就是第一次和它说上话。但直接用生成脚本会遇到两个问题:

  • Base 模型只懂"续写",不懂"对话",直接问它问题会得到一堆文字接龙;
  • 经过 SFT 之后的模型学会了聊天模板(<|user|>/<|assistant|>角色标记),必须套上模板它才能正常回答。

chat.py 自动帮你处理这一切:它从 checkpoint 文件里自动读取模型结构(层数、维度、词表),你只需要传一个模型路径,不用手动指定任何超参。

🛠 快速上手:chat.py 的 4 种用法

先克隆仓库并安装:

git clone https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch cd train-llm-from-scratch pip install -e .

用法 1:一次性提问(chat 模式)

适用于 SFT / DPO / PPO / GRPO 微调后的模型,自动套用聊天模板:

python scripts/chat.py --ckpt models/sft.pt --prompt "What is 13 + 29?"

用法 2:贪心解码,结果可复现

--greedy关闭随机采样,每次回答完全一致,适合评估数学题等确定性任务:

python scripts/chat.py --ckpt models/grpo.pt --prompt "What is 13 + 29?" --greedy

用法 3:Base 模型原始续写(raw 模式)

预训练后的 Base 模型不会对话,只会续写。加--raw后,你的输入会被当作"前缀",模型接着往下写:

python scripts/chat.py --ckpt models/base_pretrained.pt --raw --prompt "Once upon a time"

用法 4:交互式聊天(REPL)

不带--prompt参数,直接进入多轮对话,输入exit或按 Ctrl-D 退出:

python scripts/chat.py --ckpt models/sft.pt

启动时它会打印加载信息,方便你确认状态:

loaded models/sft.pt (406M params) on cuda | mode=chat T=0.8 top_p=0.95

🎛 采样参数调优:4 个关键旋钮

chat.py 暴露了 4 个最常用的大模型推理参数(源码见 src/post_training/inference.py):

参数默认值作用建议
--temperature0.8采样随机性,越高越发散开放式聊天用 0.7~1.0
--top_p0.95核采样,砍掉长尾低概率 token保持 0.9 以上
--top_k不限只在概率最高的 k 个 token 里选可选,一般不用
--greedy取概率最大的 token,完全确定性评估/数学题必开
--max_new_tokens256单次回复最大生成长度按需调整
--device自动cuda / cpu 任选小模型 CPU 也能跑

经验法则:想让回答"稳定可复现"就--greedy;想让回答"有趣多样"就调高 temperature。

💬 免命令体验:Streamlit 聊天面板

不想敲命令行?项目自带一个 Streamlit 控制面板,其中 ui/pages/9_Chat.py 就是聊天页:

pip install -e ".[ui]" streamlit run ui/app.py

侧边栏可以选择任意 checkpoint、切换 chat/raw 模式、用滑块调节 temperature 和 top-p、填写 system prompt,右侧就是仿真的聊天气泡界面。它和 chat.py 底层调用的是同一个generate_reply函数,所以两边效果完全一致。

📈 如何看出模型真的变强了

对话只是感性体验,项目提供了量化手段:scripts/eval_post_training.py 会对 Base → SFT → DPO → PPO → GRPO 各阶段跑同一套 GSM8K 数学题评测,生成对比表格。

最直观的"SFT 前后行为变化"是:Base 模型面对问题只会继续瞎写;SFT 之后它会老老实实按<think>...</think><answer>42</answer>的结构作答(模板定义在 src/post_training/chat_template.py)——这正是后续 PPO/GRPO 强化学习的优化基础。

下面是预训练阶段真实的 loss 曲线(77M 参数,2x L40 GPU),loss 从 11.14 一路降到 3.7,模型把语言规律压缩进了权重:

❓ 常见问题速查

  • 模型加载失败/维度报错?确认 checkpoint 是本项目训练产物——chat.py 从 checkpoint 内嵌的 cfg 恢复结构,跨框架权重不兼容。
  • 回复全是乱码?大概率是对 Base 模型用了 chat 模式,Base 模型请加--raw
  • 回答太长/太短?--max_new_tokens控制长度上限。
  • GPU 不够?--device cpu,13M 参数的小模型 CPU 完全能跑。

📚 延伸阅读

  • 推理与聊天专题文档:docs/09_inference.md
  • 评测脚本:scripts/eval_post_training.py
  • 生成核心(训练/评测/聊天共用):src/post_training/evaluation.py
  • UI 说明:docs/howto/ui.md

从下载数据到和自己训练的大模型对话,train-llm-from-scratch 用一套代码打通了全链路。跑通chat.py的那一刻,你会真正体会到"这是我的模型"的重量。

【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询