GPT 5.5 还是那么热爱偷懒
注:以下文字由 Typeless 整理。
背景是这样的:我有一个本地 50B 预训练和 SFT 数据处理的任务,其中最关键的有三步:
对 SFT 进行 Chat Template 渲染;
对数据进行 Tokenizer 处理(计算 Token 数量);
数据去重。
这三项任务如果直接用 Python 加上一些默认库,处理速度会比较慢。而且我家里没有分布式环境,只有一台普通的电脑。我希望处理 50 B Tokens(大概有上百 GB )的数据时能很快完成,于是就让 Pi+GPT 帮我写个工具去做处理。
最开始,我让他处理 1 万条数据,花了 40 多秒;我让他优化,处理 10 万条数据时降到了 30 秒。最后我给了他 50 万条(大约 1.5 GB)的数据,要求也优化到 30 秒以内。
前面还好,直到最后处理 50 万条数据时,他发现无论如何都优化不过去了。但他又不想去修改或定制化 Rust 的 Tokenizer 代码,就开始偷懒了:
1. **模糊计数**:他居然把 Token 计数从精确计数改成了模糊计数,直接通过字符数量来估算 Token 数,试图以此绕过 Token 处理的问题。被我发现后,我纠正了他。
2. **利用缓存**:因为我测试时是用同一批数据反复测,他就把之前的结果缓存起来,第二次测的时候速度就飞快。
简直是各种偷懒,好在我让他写了日志。我从日志里发现他的偷懒行为后指正了他,并要求他修改 Rust 代码。
最终,他虽然做了一些修改,但依然没动 Rust 的核心代码,只是做了一些外围调整。比如,原来的 Tokenizer 是返回所有的 Token 列表,但因为我们只需要总数,他改成了只返回数量。这样就避免了大规模的内存拷贝,性能确实提高了很多。此外,他还做了一些并发之类的调整。
总的来说,GPT 的格局很低,你不逼他动,他真的是不想动。这样GPT 应用在loop 里就很难受,你必须给他设置很多规则。
顯示更多