从零训练的中文人格化多模态小模型 · 自训 tokenizer · 自训基座 · Apache-2.0
一个独立开发者从零开始的公开实验:不用任何外部模型当基座,不用任何模型生成训练数据, 全部代码、语料准入口径与训练日志公开可查。
澈思(Chesi)是一个中文人格化的多模态小模型。与常见的「在开源基座上做 LoRA」不同, 澈思的基座从零预训练:自训 tokenizer、自训模型结构、自建训练器、自管语料准入。
理由很直接:人格核的出身必须是干净的。 如果基座带着别人的先验、 如果人格数据是另一个模型生成的,那么"这个模型是谁"这个问题永远说不清楚。 我们选择慢的那条路。
从零预训练的第一级(13.6M 参数级)的完整一次 full run,实测数据如下:
ℹ️ 本级用的是英文推理语料(OpenThoughts3 + SmallThoughts,见下方语料说明);中文基座语料走路线图 Stage-2。
| 指标 | 实测值 | 口径 / 判据 |
|---|---|---|
| 唯一参数 | 13,639,680 | 6 层 / d=384 / 8 头 / seq 512,tied head 去重 |
| 训练步数 | 20,000 步 | batch 4 · seq 512 · lr 6e-4 |
| 训练耗时 | 26.1 分钟 | 单张 RTX 4080,13 步/秒 |
| eval loss | 1.5618 | 判据 < 1.8 —— 首次达标 |
| 数值一致性 | 相对差 1.85e-07 | 与独立手写参考实现(朴素注意力/LN/GELU/CE 循环)对比,阈 15% |
| 可复现性 | bitwise 完全一致 | 同种子两次运行,逐步损失逐位相同 |
| 收敛趋势 | 首尾 2.6436 → 1.3732(降幅 48.1%) | 14 个窗口中仅 2 次回升,落在收敛噪声地板上 |
权重下载:本模型的完整权重(safetensors,54.5 MB)+ tokenizer + 训练历史已发布到 HuggingFace · Chesi-AI-Models/Chesi-AI-stage1。
图注(两个口径,别混):曲线是训练期内记录的 eval(末点 1.3694 @ step 20,000); 上表的验收 eval 1.5618 是
verify_stage1.py的独立复评(32-block held-out)。 两者口径不同,但都满足 ≤1.8。绘图脚本scripts/plot_stage1_curve.py(零依赖,纯标准库,可复现)。
诚实记录:严格的「每窗不增」判据在 full run 上微升 0.16%(落在收敛噪声地板内), 因此我们同时保留趋势式判据并双判据并存,而不是把失败藏起来。 详见
stage1/README.md§4。
训练语料(Stage-1):英文推理语料(OpenThoughts3 1,200,000 行 + SmallThoughts 102,000 行,Apache-2.0),
在澈思路线里只作推理增强组件;中文基座语料走 Stage-2。
完整语料台账(来源 / 许可 / 体量 / 准入等级 / 排除项)见 docs/CORPUS_LEDGER.md。
Tokenizer:自训 v1.1,字符级双档 —— Stage 1 词表 7,276 / 全量 11,387, 四大数据集往返一致性 100%。
设备无关:设备探测链 cuda → npu → xpu → musa → cpu;CPU 与 CUDA 通道在 bs=4 下曲线差 <0.4%(实测)。
| 阶段 | 目标 | 状态 |
|---|---|---|
| Stage-1 | 10M 级从零预训练,验证收敛与数值正确性 | ✅ 已验收(见上表) |
| Stage-2 | 澈思-1B 从零预训练(中文基座语料为主) | 🔄 语料已下载(SkyPile-150B head 层 61GB / 39 分片),token 统计与准入审计进行中 |
| Stage-3 | 自训基座 + 自有人格 SFT(目标 50 万条;候选池 80.6 万,配比与筛选待冻结) | ⏳ |
| Stage-4 | DPO / RL:情境感知诚实策略 | ⏳ |
| Stage-5 | 多模态:图像生成 + 反脸模 + 无 AI 味 | ⏳ |
三个硬指标(可测,不是口号):
- 无提示词自主七步思维链 —— 目标:把七步推理结构训练进权重,推理时不再拼提示词模板。 路径:自有模型 STaR 自蒸馏(生成 → 答案过滤 → 再训,用自己的模型当老师,不碰蒸馏禁令)。 现状:推理引擎仍是提示词注入式(level≥2 拼接七步标题),隐式化待 Stage-2(1B)跑通后启动。
- 无 AI 味 —— 真人写实金标 + 偏好对 DPO + 盲测 KPI
- 反脸模 —— 跨种子 ArcFace 余弦可测量上限,同一提示词无限次生成不出现同一张脸
完整步骤见 docs/REPRODUCE.md:含语料获取与许可确认、parquet→jsonl 转换、
验收口径,以及「哪些性质保证可复现、哪些绝对值会因语料不同而变」的诚实边界。
# 依赖:torch(CUDA 或 CPU 均可),其余为 Python 标准库
python stage1/train.py --corpus <你的语料路径> --steps 20000 --device cuda
# 四判据验收(②③④ 硬判据,① full run 才判定)
python stage1/verify_stage1.py --mode full设备无关:没有 CUDA 也能跑(--device cpu),只是慢。
- 基座语料:只用可商用的开源人类语料,按来源逐条登记许可与等级(License Ledger)
- 蒸馏禁令:不允许用外部模型生成数据训练自己的模型;外部模型仅作评测参照
- SFT / 人格 / 七步链:永远纯人工 + 自有模型 STaR 自产
- 诚实陈述:所有数字带口径(样本量 / 时间 / 来源);未实测项明确标注「未实测」
Chesi-AI/
├── tokenizer/ # 自训 tokenizer v1.1(字符级双档 7,276 / 11,387,零依赖)
├── docs/ # 复现指南 + 语料台账 + Stage-1 loss 曲线(SVG,可复现脚本)
├── scripts/ # 绘图脚本(纯标准库)+ 同步工具
├── stage1/ # 从零预训练训练器四件套(设备无关 + DDP + 断点续训)
│ ├── model.py # ChesiGPT:6 层 / d=384 / 8 头 / seq 512
│ ├── data.py # PackedCorpus:流式定长块
│ ├── train.py # 训练循环(cuda→npu→xpu→musa→cpu)
│ ├── verify_stage1.py # 四判据独立验收(朴素参考实现对照)
│ └── README.md # 详细口径与实验记录
├── LICENSE # Apache-2.0
└── .github/FUNDING.yml # 赞助入口
这个项目没有公司、没有团队、没有投资人,只有一个人的时间和一张显卡。 你的赞助直接变成:算力积分(启智社区,澈思-1B 预训练预算)与中文语料的清洗与评测。
| 通道 | 入口 |
|---|---|
| 人民币 | 爱发电(https://afdian.com/a/chesiai) |
| 美元 | Ko-fi(https://ko-fi.com/chesiai) |
每月会在赞助页面同步训练进展与 loss 曲线。
代码与权重:Apache-2.0(见 LICENSE)。
第三方依赖与语料各自遵循其原始许可,清单在 docs/ 中逐条登记。
- 所有赞助者 —— 名字会出现在 README 的「特别鸣谢」名单里
- 启智社区(OpenI)—— 提供国产算力与积分支持
- 每一个提 issue、提 PR、报 bug 的人
如果这个方向对你有意义,欢迎 star、提 issue,或者直接赞助。