01后训练是个数据问题
很多后训练项目最后拼的不是 PPO、GRPO 还是 DPO,而是你能不能持续造出好数据:合成轨迹、自我博弈、拒绝采样,再加一个足够可靠的裁判。
这里会长期记录我拆解系统、训练模型、打磨工具时留下的笔记:从一行日志到一次架构取舍,从工程细节到人的判断。写给未来的自己,也写给同样愿意把问题追到底的人。
后训练不只是换一个优化器。这里写数据怎么长出来、奖励怎么骗人、RL 什么时候值得上,以及模型到底学到了什么。
很多后训练项目最后拼的不是 PPO、GRPO 还是 DPO,而是你能不能持续造出好数据:合成轨迹、自我博弈、拒绝采样,再加一个足够可靠的裁判。
难任务上直接从 base 模型做纯 RL,常常只会得到高方差的噪声。先用一小批 SFT 样本把策略拉到可探索的区域,再用 GRPO 放大好轨迹。
RL 不会替你理解目标,它只会认真优化你写下来的那个数。奖励和真实意图之间的缝隙,就是 reward hacking 生长的地方。
记录一次用 DPO 搞定多角色出戏(OOC)的踩坑局。没有在线 Rollout 确实爽,但被 Loss 曲线骗过的坑也是真的痛。
有些任务没有现成示范,但游戏至少告诉你谁赢了。让搜索器把局打完,再把赢下来的轨迹留下,数据就从环境里长出来了。
租来的机器会消失,训练留下的东西不能消失。这个系列写一次运行怎样从 shell 会话变成可复现的工件。
租来的 GPU 很快会消失,但一次训练不能只活在 SSH 会话里。ORBIT 的核心想法,是把运行变成可复现的产物。
执行器越懂业务,越容易被业务拖进分支地狱。ORBIT 的内核只认 bundle、放置和产物收集,把训练、评测、采集都留给插件。
远程机器跑完就没了,留下来的 bundle 必须能替它作证。目录结构、日志分层、依赖来源和黑盒边界,都应该写进这份契约。
离开 CUDA 以后,很多平时理所当然的东西都要重新做一遍:缓存、批处理、带宽账,还有第一帧声音。
脱离了 CUDA 的舒适区,vLLM 隐藏的复杂性全部暴露。本文以 Ultra x7 358h 为例,深度剖析在异构 AI PC 上从零重构大模型推理栈的框架级、算子级与代码级优化。
TTS 并非齐次的单流前向传递。在向 OpenVINO 移植时,如何依据计算形状(Compute Shape)将模型切割为 Talker、Subcode 和 Decoder,并实现非对称流式块调度。
模型切片仅仅是静态执行单元。当长上下文、并发请求和核显内存预算同时压迫时,在 Ultra x7 358h 上用纯 C++ 构建的 Paged-KV、U8 缓存与连续批处理调度器才是真正的胜负手。
从包名、系统特性、日志到硬件证明,一条通道一条通道地看:哪些能藏,哪些最好早点承认撞墙。
Play Integrity 过了 STRONG,Wallet 还是拒绝加卡。问题不在本地伪装,而在支付后端对硬件证明的校验。
HideMyApplist 藏得住包名,藏不住系统特性。更稳的办法是在 system_server 里按调用方过滤回答,而不是把钩子塞进每个 App。
包名和系统特性都藏好了,logcat 却还在漏。只要第三方 App 拿到 READ_LOGS,Magisk、Lineage 和你自己的调试输出都会变成线索。
shell 看到的世界,普通 App 未必看得到。要审计检测面,得从 App 自己的 UID、命名空间和 SELinux 域里看。
包名、特性、权限、日志、服务、硬件证明,每条通道都有自己的边界。能藏的要藏干净,藏不了的要早点承认。