BPE Tokenizer 训练与推理
BPE Tokenizer Training & Inference
从零训练 BPE tokenizer 并高效服务推理的完整方案
子问题
1.训练后端与推理后端分离
2.特殊 token 体系设计
3.对话渲染与 mask 生成
4.多线程批量编码
5.split pattern 数字分组位数对小词表 token 效率的影响
6.token_bytes 缓存实现词表大小无关的 bits-per-byte 评估
7.system 消息到 user 消息的合并策略
8.RL 场景下 prompt 渲染与 SFT 渲染的差异处理
各项目的解法1 solutions
Signals
横向对比
| 维度 | nanochat |
|---|---|
| 执行架构 | rustbpe 训练 + tiktoken 推理的双后端架构,pickle 序列化桥接 |
| 决策管道 | SPLIT_PATTERN 预分词 → rustbpe BPE merge → tiktoken Encoding 构造 |
| 模拟执行 | tok_eval.py 对比 GPT-2/GPT-4 基线的 6 类文本压缩率评估 |
| 训练推理分离 | 训练用 rustbpe(Rust 速度),推理用 tiktoken(多线程批量编码) |
| 特殊 token 体系 | 9 个特殊 token(bos + 4 对 start/end),训练后追加不干扰 merge |
| 对话渲染策略 | render_conversation 生成 ids+mask,精确控制 SFT 监督范围 |
| 数字分组优化 | \p{N}{1,2} 替代 GPT-4 的 {1,3},32K 词表下最优甜点 |
最佳实践
1.rustbpe 训练 + tiktoken 推理的组合兼顾速度与灵活性
2.特殊 token 不参与 BPE 训练,训练后按 offset 追加到词表末尾
3.python_output 类型的 token mask=0 不参与监督,因为推理时由外部工具生成
4.训练后立即做 encode→decode roundtrip sanity check 验证正确性
5.预计算 token_bytes 张量用于 bits-per-byte 评估,特殊 token 记为 0 字节