LittleBit → TSCT: дизайн самой глубокой ступени лестницы квантования (pre-registration)
Дата: 2026-10-15. Основа: docs/reviews/tsct2-design-2026-10-04.md (лестница QAT,
kill-switch), configs/small.toml (происхождение фактических форматов),
AGENTS §3.7 (--quant, max_ortho latch). Внешний источник: LittleBit:
Ultra Low-Bit Quantization via Latent Factorization (arXiv:2506.13771,
NeurIPS 2025, v5 от 2026-02-05).
0. Тезис (запрос владельца)
Section titled “0. Тезис (запрос владельца)”Вся ставка проекта — TSCT: «смесь технологий, которая максимально экономит
память И вычисления». У LittleBit ровно тот же скелет, что у TSCT: веса
W ≈ U·Vᵀ (low-rank), факторы бинаризуются sign(U), sign(V) ∈ {−1,+1},
поверх — обучаемые FP16-множители трёх масштабов: per-row, per-column и
per-rank (важность ранга). Per-rank масштаб — это наш diag(s). Их residual
компенсация — вторая бинаризованная low-rank ветка: Ŵ = Ŵ_pri + Ŵ_res.
Значит интеграция — не новый механизм, а следующая ступень уже существующей
лестницы факторов fp8 → NVFP4 → int4 → ternary: ступень sign+scales.
Мы не «смешиваем три технологии» — мы доводим одну и ту же факторизацию до
её предела по битам.
1. Биты (b1-эксперт, d 2048, r 64, f 5461)
Section titled “1. Биты (b1-эксперт, d 2048, r 64, f 5461)”| чем храним | байт на эксперта |
|---|---|
bf16 U,V (сегодня, --quant bf16) |
964 048 ≈ 964 KB |
| fp8-факторы (лестница) | ~486 KB |
| NVFP4 (2 бита + block-scales 16×16) | ~250 KB |
| ternary (2 бита) | ~245 KB |
| sign(U),sign(V) + FP16 scales | U-коды 16 384 B + V-коды 43 712 B + row/col/s FP16 ~15 500 B ≈ 75.6 KB (≈12.8×) |
| + residual-ветка (rank 32, та же схема) | +41 KB → всё ещё ≈8× |
Хранилище предшествует вычислению: kernel-ное ×11.6 LittleBit требует popcount/XNOR-ядер, которых у cubecl/LLVM-пути нет — вычисление остаётся bf16 (реконструкция и matmul), покупается ёмкость, не FLOPs. Это ровно роль TSCT на 1B (§2.2 плана: 492M параметров экспертов против 0.96 MFLOP/токен — capacity почти без compute). На том же VRAM E растёт ~10×, или 1B ёмкости экспертов стоит ~150 MB.
2. Что именно строим (в vendor/dormouse-fused/crates/burn-spectral)
Section titled “2. Что именно строим (в vendor/dormouse-fused/crates/burn-spectral)”- Формат
SignScale: у каждого фактора — латент fp32 (мастер, там живут ретракция и Muon), упакованные знаки U/V (1 бит/элемент, bit-pack u32/u64), обучаемые FP16-масштабы:su_row[d],su_col[r],sv_row[r],sv_col[f],s[r](общий diag, bf16 по TSCT2 §1). - Forward (STE, f32-граф по образцу
act_quant.rs):W = (u_row ⊙ sign(U) ⊙ u_colᵀ) · diag(s) · (v_row ⊙ sign(V) ⊙ v_colᵀ)ᵀ, градиент через straight-through от знаков; масштабы — обычные обучаемые векторы (роутинг AdamW, не Muon — 1D). - Реконструкция раз в шаг, сразу после ретракции на мастере; порядок как в
TSCT2 §1: update master → Gram-NS на мастера → Q(master) → fwd/bwd.
Ортогональность — свойство ЛАТЕНТА; на Ŵ она нарушена по построению —
метрика здоровья и так спроектирована:
‖Ŵx−Wx‖/‖Wx‖. - Residual-ветка (компенсация ошибки): вторая пара факторов rank 32 по тому же формату, суммируется в выход. Первая конфигурация для A/B — с ней (у нас факторы r=64 крупнее сжатых Llama из статьи — запас по ошибке нужен).
- Чего НЕ берём из статьи: Dual-SVID init (он для сжатия готовых сетей; у нас from-scratch = штатный ортогональный init + STE), их PTQ-калибровку (Wanda-класс), и бит-serial kernel (не на нашей дорожке компилятора).
- Повторное использование:
max_ortho-latch, форматы лестницы и bit-pack-утилиты уже в crate — новая работа: формат + масштабы + STE + pack, ориентировочно ~200-300 LOC и 3-4 гейта.
3. Известные риски НАШЕГО контура (не из статьи)
Section titled “3. Известные риски НАШЕГО контура (не из статьи)”- STE × N итераций: Ŵ дрейфует между итерациями цикла (общие латенты) — тот же риск, который TSCT2 §1 уже перечисляла для QAT-петли. Меры оттуда же: первые/последние итерации цикла в bf16, per-iteration bf16-адаптеры ранга 4-8 — это конфигурации арма, не новая механика.
- Дрейф масштабов: если масштабы уезжают, STE-градиент по знакам гаснет (знак перестаёт колебаться). Контроль: норма масштабов печатается на лог-шагах (COUNTED); дрейф — сигнал, не silent.
- Latch:
max_ortho-порог 1e-3 врёт на масштабе (история: 1/sqrt(m)) — гейты TSCT2 §3 (ε_spec) обязательны ДО включения арма на 100M (план 2026-10-15, фаза 1.5).
4. Pre-registration: гейты и kill-switch
Section titled “4. Pre-registration: гейты и kill-switch”| гейт | критерий |
|---|---|
| G-A (бит-точность) | реконструкция Ŵx против мастера Wx: rel ≤ 1e-1 на калибровочном батче до обучения |
| G-B (A/B iso-биты) | LittleBit-арм против ternary И против NVFP4 при ОДИНАКОВОМ бюджете бит: held-out BPB, 3 сида, 2k шагов; win = ΔBPB > спред контрольных сидов, ИНАЧЕ ступень не входит (tie = удаление, ADR-0002) |
| G-C (STE-смещение) | градиент-корреляция STE-vs-fp32 на фикстуре ≥ 0.9; иначе меры §3 |
| G-D (масштаб) | повторить G-B на 100M при входе в рецепт (план, фаза 2) |
| Kill-switch | если на iso-байтах узкий dense-эксперт или ternary продолжает выигрывать — ступень удаляется, лестница остаётся на NVFP4/ternary (базовый TSCT2-стек не зависит от ступени) |
Место A/B: 9.2M small-семейство, окно 81920 B (канон ByteFlow), pure CE,
равные байты, --quant расширяется --quant lbit (+--residual-rank N).
Результат — append-only в benches/history.tsv; pre-registration коммитится
ДО результатов.
5. Порядок работ
Section titled “5. Порядок работ”- Дизайн (этот документ) — до кода.
- Код в burn-spectral + гейты G-A/G-C (CPU-клетка сразу; CUDA-клетка — после освобождения карты от torch-спайка, one-heavy-thing).
- A/B G-B на 9.2M (3 сида × 2 арма × 2 arms-конфигурации). Стоимость арма НЕИЗВЕСТНА (§3.3 плана: смета AB-PROTOCOL мертва) — перемерить перед запуском.
- При win — G-D на 100M-ранге и вход в рецепт b1 (фаза 5 плана).