本次实际验证记录¶
2026-10-11:加入 GPU 租用推荐(智川云邀请链接)¶
| 检查 | 实际结果 |
|---|---|
| 内容 | 首页新增“租 GPU:作者在用的智川云”,第 3.1 节新增“在哪里租”(价格、新人券、选型、数据盘与镜像源经验),第 0.4 节准备表的账号与预算两行改为人民币示例;均附邀请链接与邀请码 zt4f01m0,并注明是作者邀请链接及代金券领取规则 |
| 价格来源 | 用户提供的 2026-10-11 页面截图:RTX 4090D 24 GB 按量 ¥1.25/时,包日 ¥29、包周 ¥200、包月 ¥800;邀请规则取自用户提供的邀请页截图。gpuhome.cc 为前端渲染页面,内置浏览器打开为空白,未能直接核对 |
| 回归测试 / 电子书 | 106 passed;mkdocs build --strict 通过,52 个页面、27,728 处链接与资源检查通过 |
| 价格截图 | 用户提供的租用页截图转为 images/gpuhome-rtx4090d-price-2026-10-11.png,嵌入首页与第 3.1 节价格表下方 |
2026-10-11:首页加入作者介绍,读者定位改为非算法开发者¶
| 检查 | 实际结果 |
|---|---|
| 内容 | 首页新增“关于作者”(简介、X、微信公众号、小红书及两个二维码);首页、教程开头、README、站点描述、CLAUDE.md 的读者定位改为“不做算法、想从零学习 LoRA 微调的开发者”;第 1 章标题与“后端类比”改为通用的开发类比 |
| 图片 | images/author-wechat-qrcode.jpg;小红书二维码从名片截图中裁出为 images/author-xiaohongshu-qrcode.jpg;book/build.py 改为同时发布 images/ 下的 PNG 和 JPG |
| 回归测试 / 电子书 | 106 passed;mkdocs build --strict 通过,52 个页面、27,716 处链接与资源检查通过;本地预览目测桌面与手机宽度排版正常 |
2026-10-11:Notebook 第 13 节改为 curl 调用¶
| 检查 | 实际结果 |
|---|---|
| 内容 | Notebook 第 13 节去掉 Python 示例,改为 5 组 curl:健康检查、最小请求、按训练格式(system = 角色 + 学段 + 事实卡)、多轮、流式;教程第 5.5 节新增同样的“先用 curl 直接调用”,原 Python 与 SDK 示例保留 |
| 请求体 | 两个 JSON 文件由 build_messages 生成;用 Qwen 分词器算得单轮请求 prompt_tokens 为 395;在本机用 bash 实际执行 heredoc,生成的文件都是合法 JSON |
| 测试 | test_tutorial.py 新增 curl 测试:模型名与 --served-model-name 一致、temperature=0、含流式示例,且文件中的 messages 与 build_messages 输出完全相同;Python 调用示例改从 plan.md 读取并执行。106 passed |
| 电子书 / 打包 | mkdocs build --strict 通过,52 个页面、27,708 处链接与资源检查通过;GPU 上传包重新生成 |
| 尚未核对 | 真实 vLLM 服务上的 curl 响应 |
2026-10-11:RTX 4090 上首次完整 1 Epoch 训练(用户在 GPU 主机实测)¶
| 检查 | 实际结果 |
|---|---|
| 环境 | RTX 4090 24 GB(驱动 580.119.02,CUDA 上限 13.0);镜像 2.7.1-CUDA12.6-Py3.11-Ubuntu22;官方 PyTorch 源不可达,改用国内镜像安装 torch |
| 加载 | NF4 基座加载后 nvidia-smi 显示 4353 MiB |
| 训练 | runs/science-002,72/72 步,耗时 26:19;训练平均 loss 2.233;逐步训练 loss 首/末 5.813 → 1.55 |
| 验证 loss | 第 12/24/36/48/60/72 步:2.506 / 2.186 / 2.034 / 1.976 / 1.961 / 1.960;Mean Token Accuracy 0.462 → 0.573 |
| 失败教训 | 此前两次未重启内核就重复执行训练格,在已训练模型上继续训练:训练 loss 降到约 0.5,验证 loss 回升到 2.3(过拟合);runs/science-001 已删除 |
| 文档 | 曲线截图存为 images/loss-curve-rtx4090-2026-10-11.png,加入第 4.5 节并附逐段解读;book/build.py 改为发布 images/ 下全部 PNG |
| 尚未核对 | 第 8 步完成记录(峰值显存、adapter 文件)、关闭 LoRA 的基座验证 loss、第 10 步回答对比、合并与 vLLM |
2026-10-10:PyTorch 官方源不可达时的阿里云镜像备用¶
| 检查 | 实际结果 |
|---|---|
| 触发 | GPU 主机执行 pip install torch==2.8.0 --index-url https://download.pytorch.org/whl/cu126 报 Network is unreachable(用户实际输出) |
| 镜像核对 | 在开发机查询 mirrors.aliyun.com/pytorch-wheels:cu126 目录有 torch-2.8.0+cu126-cp311-manylinux_2_28_x86_64;cu129 目录有 vLLM 0.21.0 所需的 torch 2.11.0、torchaudio 2.11.0、torchvision 0.26.0 的 cp311 Linux 包(依赖版本取自 PyPI 上 vLLM 0.21.0 元数据)。尚未在 GPU 主机上实际用镜像安装 |
| 文档 | 第 3.3 节、第 5.4 节、Notebook 部署格、GPU_UPLOAD_README.md 加入 -f https://mirrors.aliyun.com/pytorch-wheels/... 备用命令;GPU 上传包重新生成(31 个文件,3.89 MiB) |
| 回归测试 / 电子书 | 105 passed;mkdocs build --strict 通过,52 个页面、27,600 处链接与资源检查通过 |
2026-10-10:第 3.3 节说明上传包内容¶
| 检查 | 实际结果 |
|---|---|
| 内容 | 第 3.3 节新增打包命令和“上传包里有什么”:按 unzip -l 实际列出的 31 个文件写目录树与用途,另列包里没有的内容及来源;requirements-train.txt 注释中的旧章节号改为 3.1 |
| 打包 | tools/build_gpu_zip.py 重新生成:31 个文件,3.89 MiB |
| 回归测试 / 电子书 | 105 passed;mkdocs build --strict 通过,52 个页面、27,594 处链接与资源检查通过 |
2026-10-10:精简第 2 章后半部分¶
| 检查 | 实际结果 |
|---|---|
| 内容 | 第 2.4 节补充“多轮对话是否训练多次”和多轮历史累积;原 2.6~2.11 改为 2.6 七步回顾、2.7 改数据与换数据、2.8 可选本地检查;重复的观察题说明删除(第 4.5 节已有);审核要求移到第 6.1 节,命令行快照说明移到第 4.6 节,few-shot 选取说明移到第 6.4 节;相关章节号引用同步 |
| 回归测试 | 105 passed(教程中示例命令少了两条重复的 lab.prepare/lab.audit,每个 CLI 仍至少有一条示例) |
| 电子书 | mkdocs build --strict 通过;52 个页面、27,561 处本地链接与资源检查通过 |
2026-10-10:补充“为什么需要事实卡”¶
| 检查 | 实际结果 |
|---|---|
| 内容 | 第 2.2 节新增“为什么需要事实卡:三个常见疑问”(基座已懂常识为何还要卡;卡是输入不是学习目标、训练后不能依赖它记住;为何训练时也必须放),data/README.md 同步;第 0.1 节、第 2.5 节加指向;第 2.1 节表格下补充“为什么还要一份 val” |
| 回归测试 | 107 passed |
| 电子书 | mkdocs build --strict 通过;52 个页面、27,594 处本地链接与资源检查通过;本地预览目测第 2 章引用块与对比表排版正常 |
2026-10-10:dataset.json 改为 train/val/test 平级(schema 4)¶
| 检查 | 实际结果 |
|---|---|
| 数据转换 | 顶层改为 facts、train、val、test 四个平级数组,对话内删除 split 字段,内容不变;lab.data --allow-draft --formal 输出 {'train': 500, 'val': 50, 'test': 50} |
| 读取逻辑 | lab.data.tag_splits 按所在数组在内存中补 split;旧版 episodes 布局和对话自带 split 都会报错;validate、prepare、infer 不变 |
| 命令行快照 | 用固定 Qwen 分词器执行 lab.prepare --allow-draft --formal:9 个文件,train 1150 条、val 115 条 SFT 样本,val.episodes.jsonl 中 50 段均为 split: val |
| 文档 | 第 2.2 节新增“事实卡有什么用、在哪里用到”(校验、提示词拼装、Notebook、快照、A/B/C 推理、盲评、部署调用);data/README.md、README、GPU 上传说明同步 |
| 回归测试 | 107 passed(新增平级布局、旧布局拒绝、Notebook D1 读取三项测试) |
| 电子书 | mkdocs build --strict 通过;52 个页面、27,571 处本地链接与资源检查通过;GPU 上传包重新生成(31 个文件,3.88 MiB) |
2026-10-10:章节重排,取消“进阶与参考”折叠¶
| 检查 | 实际结果 |
|---|---|
| 结构 | 原 0~13 章合并为 0~8 章 + 附录:0 目标与准备(新写全流程、两台机器配合、准备清单)、1 概念、2 训练数据(原 3~5 章)、3 GPU、4 训练、5 部署、6 效果评估(原 8~9 章)、7 成本排错验收、8 开发者参考(原 11、13 章);侧栏为一层平铺目录,正文内折叠块改为普通小节 |
| 新增说明 | 第 2~6 章开头加“本章速览”(做什么/需要准备/做完得到/耗时);第 2.5 节加入用固定 Qwen 分词器实际渲染的 day-night-01:0(408 Token,监督 22 Token);第 4.1 节解释一个 step 内部流程;第 5 章开头画出一次 API 请求的路径 |
| 引用同步 | plan.md、Notebook、README、GPU_UPLOAD_README、todo.md、book/README.md 中的章节号按新编号更新;GPU 上传包重新生成(31 个文件,3.88 MiB) |
| 回归测试 | 103 passed |
| 电子书 | mkdocs build --strict 通过;52 个页面、28,089 处本地链接与资源检查通过;本地预览目测第 0、2、4、5 章的图示与速览框排版正常 |
2026-10-04:面向部署学习的改版¶
| 检查 | 实际结果 |
|---|---|
| 训练量 | Notebook 由样本数算出步数:1150 条 train ÷ 累积 16 → 72 步(1 Epoch);新增 115 条 val 的 eval loss(每 12 步)和 loss-curve.png |
| 数据清理 | 662 条回答去掉拼接留下的半角空格;increase_depth_when_requested、ask_for_evidence_without_blame、explain_then_invite_exploration 各 60 条改写;lab.data --allow-draft --formal 通过 |
| 真实分词 | 固定 Qwen tokenizer 重新生成:1150 条 train、115 条 val;最长 550 Token,平均 459 Token,平均监督 36 Token |
| CLI 草稿门槛 | lab.train --allow-draft 可跑 epoch 对照,manifest 记录 draft;冻结候选和测试集推理仍要求审核后的数据 |
| 部署章节 | 第 10 章新增 KV Cache 估算(每 Token 144 KiB)、参数说明、挂载 adapter、OpenAI SDK 流式调用、vllm bench serve 压测、上线检查 |
| 调用示例 | 本地 API 示例改用 build_messages,提示词与训练一致;仍由 test_tutorial.py 用临时 HTTP 服务执行 |
| GPU 上传包 | 新增 tools/build_gpu_zip.py 生成:31 个文件,约 3.88 MiB,不含权重;拒绝打包有输出的 Notebook |
| 回归测试 | 103 passed(含微型 CPU 模型执行 Notebook 的 eval 与 loss 曲线格) |
| 电子书 | mkdocs build --strict 通过;57 个页面、28,387 处本地链接与资源检查通过;主导航改为 学习路线 → 概念 → GPU → 训练 → 部署 |
| 零基础可读性(2026-10-08) | 第 2 章重写为 8 节渐进概念课(模型目录、Token 实例、loss 数值直觉、LoRA 的 diff 类比、七个库分工);第 6 章新增 nvidia-smi/驱动/CUDA 一节和 Jupyter 操作表;第 4 章治理内容折叠为进阶;Notebook 每个代码格新增“执行后你会看到”与逐参数表(BitsAndBytesConfig、generate、LoraConfig、SFTConfig);Notebook 中的预期输出数值为估计,待 GPU 实测核对 |
本轮仍没有在 RTX 4090 上运行:72 步的实际耗时与显存、vLLM 0.21 的启动日志、vllm bench serve 的参数与结果都以 GPU 主机实测为准。
2026-09-29:小学科学探索,500 段训练对话¶
| 检查 | 实际结果 |
|---|---|
| 唯一可编辑数据源 | data/dataset.json:60 张事实卡;500 train、50 val、50 test;每段 2~3 轮 |
| 覆盖 | 五类各 100/10/10 段;train 的 1–2、3–4、5–6 年级分别为 167、167、166 段 |
| 生成方法 | 50 个训练主题各 10 条教学路径,逐主题撰写知识、误解、比喻边界、观察及追问,再组合完整对话;同主题部分回答复用,不是 500 个独立知识题 |
| 数据状态 | 全部 synthetic/draft;35 张卡记录参考入口阅读,25 张仍标 pending;所有逐项事实、儿童适读性和真实探索效果仍待审核 |
| 监督数量 | 1150 个 train 回答目标,val/test 各 115;训练只筛选 train |
| 参考卡独立性 | 事实改为独立摘要,未发现任何整条 assistant 目标原样包含在对应事实 text 中;这不等于排除了全部语义相似 |
| 真实分词与掩码 | 固定 Qwen tokenizer 和真实 TRL collator 检查 1150/1150 条通过,最长 553 Token;首条 408 Token,其中 22 个监督位置 |
| 数据快照 | 最终对应 data/processed/science-v3,9 个自动生成文件;v1/v2 是本轮整理过程的旧快照,正式使用以源数据重新 prepare 为准 |
| 输入与隔离 | grade_band 进入提示词;behavior/review/source_url 不进入;同主题及同事实不能跨 split;未来问答不能泄漏 |
| 评估协议 | B/C 保持相同输入;few-shot 优先覆盖三个学段且只取 train;盲评保留学段,bootstrap 按主题聚类,各评估集合仅 5 个独立主题 |
| Notebook 与教程 | 46 格/16 个代码格,输出为空,每格附解释;科学观察题、数据说明、正式对照、vLLM 与中文 API 示例同步 |
| 实验目录 | 新场景默认 runs/science-001,避免与原场景的 lesson/gpu 目录混淆 |
| 回归测试 | 101 passed,10 warnings;含微型 CPU LoRA 更新/保存/重载/合并及教程 API 请求和历史传递 |
| 发布边界 | 本轮没有运行真实 4B CUDA 训练或 vLLM,也没有儿童使用研究;本地检查不能证明 LoRA 比完整提示词基线更好 |
电子书、GPU ZIP 的最终构建与一致性检查随本轮交付完成。下方均为历史版本记录,旧场景和旧数量不代表当前数据。
2026-09-29:单文件数据与 D1~D7 使用说明¶
| 检查 | 实际结果 |
|---|---|
| 数据合并 | data/dataset.json 保存原来的 10 张事实卡、30 段对话、60 个参考回答和全部元信息;迁移前后对象完全一致,删除重复的两个源 JSONL |
| 主线入口 | Notebook 直接读取单文件、在内存中构造样本,不依赖 processed 目录;D1~D7 标出读取、筛选、上下文、目标、训练器、labels、保存位置 |
| 训练内容 | 用真实固定 Qwen tokenizer 执行 Notebook 生成样本格;60 条 prompt/completion/input_ids/completion_mask 全部与旧 seed-v2 一致。首条仍为 302 Token,其中 53 个监督位置 |
| 防泄漏 | 测试确认 val/test 不进入训练、当前目标和未来轮次不进入 prompt、历史正确保留;出处 URL 和审核字段不作为模型输入 |
| 回归测试 | 95 passed,0 skipped,10 warnings;真实微型 CPU LoRA 训练、保存、重载、合并和教程 API 示例通过 |
| Notebook 格式 | nbformat 验证通过,46 格/16 个代码格;代码格下方均有解释,交付输出为空 |
| 实验复查 | 训练前保存内存中的数据到 runs/实验名/dataset.json,并在 manifest 记录该副本 SHA-256;日常只编辑 data/dataset.json |
| CLI | data/prepare 改为 --input data/dataset.json;进阶实验按需生成快照;历史 seed-v1/v2 和 runs 保留 |
| 上传包 | 31 文件,约 3.82 MiB;只含一份源数据,不含 processed 中间文件;解压后验证 30 段对话与 60 个训练目标,文件与源码逐字节一致 |
| 轻量 CLI | 在不含 Torch 的 .venv-data 里用 --input 准备单文件数据,生成的 60 条样本与旧快照一致;随后真实 TRL collator 校验 mask/EOS/padding 通过 |
| 电子书 | 严格构建通过;54 个页面、5,987 处本地链接和资源检查通过;数据页展示一段完整对话及其引用的事实,旧双文件源码页已清除 |
10 条警告仍来自微型模型的 PEFT 配置路径及检查点时间排序。本轮没有执行 RTX 4090 的真实 4B CUDA 训练或 vLLM 服务;数据与本地代码验证不代表模型质量提升。
以下是此前版本的记录,旧数据入口与文件数量以本节为准。
2026-09-29:电子书、Notebook 与代码最终对应检查¶
| 检查 | 实际结果 |
|---|---|
| 完整回归 | 91 passed,0 skipped,10 warnings;包含实际 Notebook 微型训练和教程 API 示例的本地 HTTP 检查 |
| 教程命令 | README、数据说明及正文中的 lab.* 命令均通过对应真实 CLI 解析器;每个保留的 CLI 都有可执行示例 |
| 入口与解释 | 第 13 章逐项对应现存模块;补齐进阶训练环境切换和 A/B/C 数据、提示词差异;Notebook 与第 10 章部署/调用代码逐块一致 |
| 源码同步 | 训练附录与实际两个训练模块一致;构建时清除旧的自动生成源码页及下载副本 |
| 清理 | 删除 lab/client.py 和对应旧测试;改为直接测试教材中的标准库 API 示例。保留仍用于正式对照、盲评、恢复和导出的 CLI |
| 下载版本 | 修正首次从 Hugging Face 下载可能取得新 revision 的问题;三个下载来源统一到教程固定版本,旧版本目录不会被悄悄改写 |
| 实际数据 | 固定 Qwen tokenizer 与 TRL collator 重新检查 seed-v2,60/60 条样本的监督范围、EOS 与 padding 通过 |
| GPU 上传包 | 已更新为 38 文件,约 3.85 MiB;解压后的冻结数据可读取 60 条训练样本,已移除旧客户端 |
| 电子书与交付包 | 严格构建通过;55 个页面、4,880 处本地链接与资源通过。GPU ZIP 中 37 个源文件、通用源码 ZIP 中 53 个文件逐字节对应当前文件;通用源码 ZIP 解压后可独立构建并通过链接检查 |
| 文档片段 | 32 个 Bash 块、3 个 Python 块、10 个 JSON 块语法通过;SSH 隧道的地址/端口占位值按文中要求替换后检查,没有连接远端 |
以上是本地可验证的对应关系。10 条警告来自微型模型的 PEFT 配置路径及检查点时间排序。没有连接 RTX 4090,不能据此宣称真实 4B 下载、CUDA/NF4 训练、质量评审或 vLLM 服务已通过;GitHub Pages 工作流也未在本轮发布。
以下记录对应此前版本,文件数量、入口和测试数量以本节为准。
2026-09-29:教学 Notebook 重写与国内下载¶
| 检查 | 实际结果 |
|---|---|
| 完整回归 | 51 passed,0 skipped,10 warnings;本机端口测试在允许监听的环境运行 |
| Notebook 格式 | 官方 nbformat 校验通过;44 格,其中 15 个 Python 代码格;每格下方有用途与原因,交付输出为空 |
| Notebook 真实代码 | 提取实际代码格,使用微型 Qwen3 CPU 模型执行 LoRA 配置、TRL 监督校验、两步训练、保存、重新加载、生成、合并及重新加载完整模型;重载 logits 一致,合并 logits 在容差内一致 |
| 设备边界 | CPU 测试只替换 CUDA 设备/精度设置;没有用命令返回值模拟训练。显式固定 PEFT 加载设备,避免 CPU 合并被自动迁移到 GPU;CLI 合并同步修正 |
| 下载来源 | ModelScope 1.34.0 真实下载 9 个配置/分词器文件,逐个 SHA-256 与固定 HF revision 对齐;真实 Qwen tokenizer 指纹与 seed-v2 一致 |
| 权重可访问性 | 三个 safetensors 分片分别读取 64 字节,均返回 HTTP 206;Content-Range 总大小与冻结清单一致。没有下载完整 8 GB 权重 |
| 下载失败保护 | 测试部分本地缓存、同大小损坏文件、远端版本变化、分词器变动、版本锁保护、镜像 endpoint 与离线完整性检查 |
| 电子书 | 第 6 章负责环境和国内下载;第 7 章对应直接训练;第 10 章解释导出、vLLM 和本地单轮/多轮调用;严格构建与本地链接检查通过 |
| 上传包 | 39 文件,约 3.85 MiB;解压后 60 条冻结样本完整,Notebook/代码/下载锁及依赖同步,不含环境、缓存、完整权重或训练结果 |
| 清理 | 删除旧 Notebook 子进程辅助模块、可选流程开关和结果 ZIP 自动打包;保留正式评估、训练恢复等仍被教程使用的 CLI |
参考资料:ModelScope 模型仓库、vLLM 0.21 GPU 安装、IPython 内核注册。用户提供的知乎文章触发安全验证,未能读取正文;镜像接口使用 SDK 和官方文档核对,没有声称已阅读全文。
10 条警告来自微型模型的 PEFT 配置路径及检查点时间排序。测试中发现 PEFT 默认自动分配设备会使 CPU 合并离开 CPU,已显式指定设备并通过完整回归。未连接用户的 RTX 4090;真实 4B 下载、CUDA/NF4 训练、效果评审和 vLLM 服务尚未在该主机执行。vLLM 使用独立环境,须先核对宿主机驱动对 CUDA 12.9 的支持。
以下是此前版本的历史记录,旧 Notebook 流程已由本次重写替代。
2026-09-29:GPU Notebook 与教程入口¶
| 检查 | 实际结果 |
|---|---|
| 完整回归测试 | 46 passed,0 skipped,6 warnings;新增 Notebook 子进程中断清理、错误返回、输出保护、文件语法、下载一致性以及仅审计结果拒绝打包的检查 |
| Notebook 格式 | notebooks/01_gpu_train.ipynb 通过官方 nbformat 校验,33 个单元格(18 个代码格),交付文件的执行计数与输出均为空 |
| 单元格衔接 | 在本地真实 Jupyter 内核中,以模拟命令结果分别执行默认流程和全部可选流程;调用参数由真实 CLI 解析器验证,结果读取、回答 HTML 转义与 ZIP 备份通过。安装、下载和 GPU 运算均使用测试替身 |
| 电子书 | 第 6 章以 Notebook 为主要入口,第 7、10 章提供对应步骤;严格构建和本地链接检查通过,Notebook 下载文件与源文件一致 |
| GPU 上传包 | llm-lora-tutorial-gpu.zip 更新为 37 个文件、约 3.84 MiB;ZIP 完整性、解压导入、60 条冻结训练样本检查通过,包含 Notebook 及其执行辅助模块,不含完整权重或本地环境 |
根据用户截图复现了“只有 token-audit.json 仍可生成结果 ZIP”的问题,已修正第 13 步:先检查 A/B/C 回复、10 步训练记录和 adapter 文件,再允许打包。默认与可选流程重新通过本地内核模拟检查,GPU 上传包已更新;用户机器上的现有 Notebook 需要另行同步。
本轮没有连接用户的 RTX 4090,没有下载 4B 完整权重或执行真实 GPU 训练。Notebook 流程模拟与 CPU 微型训练回归只能验证本地可检查的部分,真实 CUDA、NF4、显存、耗时和训练效果仍以 GPU 上运行后的记录为准。6 条警告来自已有微型模型保存与检查点时间排序;HTTP 测试在允许本机临时端口的环境完成。
2026-09-26:数据与教程精简¶
| 检查 | 实际结果 |
|---|---|
| 完整回归测试 | 38 passed,0 skipped,6 warnings;包含新旧数据包、缺失集合、数据浏览页及原有微型训练检查 |
| 轻量数据环境 | 新建 .venv-data,按 requirements-data.txt 安装 Transformers 4.57.3 与 Jinja2 3.1.6 及其依赖;确认未安装 torch、trl、peft、datasets、accelerate |
| 轻量环境准备数据 | 生成 30 段对话、60 条训练样本;5 个清单内文件与完整 CPU 环境生成的 seed-v2 逐字节一致 |
| 数据包结构 | 新版 schema=2 共 6 个文件;旧版 seed-v1 的 13 个文件保留,完整性检查通过 |
| 数据与监督 | 源数据内容保持原样;真实 Qwen tokenizer 与 TRL collator 检查 60/60 条通过,报告见 runs/token-audit-v2.json |
| 书中样例 | 故宫样例来自真实首条记录;palace-01:0 共 302 Token,249 个上下文位置、53 个监督位置 |
| 文档代码 | README、教程、数据说明的 30 个 Bash 块、2 个 Python 块、1 段嵌入 Python、10 个 JSON 块语法通过;训练代码附录与源码一致 |
| 电子书构建 | mkdocs build --strict 通过;51 个 HTML 页面、4192 个本地链接与资源检查通过 |
| 浏览器检查 | 桌面与 390px 手机宽度检查数据章节;长 JSON 自动换行,页面无横向溢出,EOS 字段显示完整;源数据页先显示用途与首条记录,默认折叠全量原稿 |
首次轻量运行发现聊天模板缺少 Jinja2,已补入依赖后重新准备成功。Transformers 提示没有模型计算库属于此环境的预期状态,分词与模板渲染均可用。HTTP 测试在允许本机临时端口的环境完成;沙箱内的监听限制未通过跳过测试处理。
6 条警告来自微型模型保存配置和检查点时间排序,与此前验证类型一致。此次只验证数据处理、CPU 训练机制和书籍网页;没有运行 4B GPU 训练,也没有审核通过候选对话。
2026-09-23:首次验证记录¶
以下保留首次执行记录。
环境¶
- 本地 Darwin 25.3.0 arm64,Python 3.11.15。
- 测试使用临时隔离环境
/tmp/beijing-lora-env,没有改系统 Python。 - Torch 2.8.0、Transformers 4.57.3、TRL 0.24.0、PEFT 0.18.0、Accelerate 1.11.0、Datasets 4.3.0、pytest 8.4.2。
uv pip check检查 52 个已安装包通过。这是 Mac CPU 环境,不含 bitsandbytes;不能据此声称 Linux CUDA 组合已联调。
已执行¶
| 检查 | 结果 |
|---|---|
完整 python -m pytest -q tests |
27 passed,0 skipped,6 warnings,本次约 3.92 秒 |
| CLI 入口 | download/data/prepare/audit/train/infer/evaluate/merge/client 共 9 个 --help 成功 |
| Python 语法 | 全部 lab 与 tests 文件解析通过 |
| 教程静态检查 | 31 个 Bash 代码块语法、2 个完整 Python 代码块、1 个 JSON 示例及全部本地 Markdown 链接通过 |
| 原始数据 | 10 张卡、30 段对话、60 个目标回复,五类各 6 段;全部 draft |
| 真实 Qwen tokenizer | 固定 revision,下载配置与分词器,没有下载 4B 权重 |
| 准备数据 | seed-v1,train=30 段,60 条展开样本;val/test 为空 |
| 真实 TRL collator 审核 | 60/60 监督范围正确,EOS 恰好一个;两条不同长度一起检查 padding |
| Token 长度 | 总长度 285~382;目标监督长度 18~54,含 EOS;这是当前种子,不是正式数据估计 |
| 微型模型训练 | 随机初始化的极小 Qwen3,真实 Torch/PEFT/TRL 执行两步,只有 LoRA 参数改变 |
| 微型模型恢复与合并 | 总计划 4 步,第 2 步保存;恢复到 4;重载 logits 一致,合并 logits 在容差内一致 |
| HTTP 客户端 | 临时本地服务验证历史、正常响应、503、错误结构、非法 JSON;超时边界测试 |
| 评估与完整性 | 盲评配对、缺失评分、平局、按对话聚类;修改 adapter 配置使指纹改变;修改准备结果被拒绝 |
模型 revision:cdbee75f17c01a7cc42f958dc650907174af0554。
分词器指纹:5cc703e3e68312a345b0aa88aed16fd37eb4ca2d871900402275514280124405。
当前本地详细记录位于 runs/token-audit.json 与 data/processed/seed-v1/manifest.json;它们是可重建的生成文件。代码修改期间的中间 CPU 数据包已移到临时目录,最终 seed-v1 使用当前提示词代码重新构建。
测试中遇到的情况¶
- 最初 HTTP 测试受沙箱监听限制而失败;在允许本机端口的环境重跑后通过,没有删除或跳过测试。
- 修复了单段对话被显示为零宽度不确定性区间的问题:少于两段时返回空区间。
- adapter 指纹同时包含参数文件和配置,避免只改 alpha 仍通过冻结检查。
- 模型文件哈希采用流式读取,避免将多 GB 分片额外复制进 RAM。
- 6 条警告来自微型随机模型没有预训练配置路径,以及快速保存的检查点文件时间不可靠。检查点按数字步数排序后恢复成功;没有屏蔽这些警告。
尚未执行,不能声称通过¶
- 30 段数据的逐段人工/独立审核;目前没有 approved 对话。
- 30 张卡、150 段正式数据的扩充与审核。
- 4B 模型权重下载、Linux CUDA/bitsandbytes 联调、真实 QLoRA。
- GPU 10 步冒烟、20 条过拟合、1 Epoch 与 r8/r16 对照。
- 真实生成质量、事实支持率、盲评胜率、GPU 显存/耗时/成本。
- 真实 4B BF16 合并、vLLM 镜像拉取/启动、真实模型 API 与负载。
CPU 小模型测试不是 4B 实验的替代。后续完成一项,就附上相应日志/结果并更新 todo;没有实际运行的指标保持空缺。