Skip to content

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)”
  1. Формат 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).
  2. 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).
  3. Реконструкция раз в шаг, сразу после ретракции на мастере; порядок как в TSCT2 §1: update master → Gram-NS на мастера → Q(master) → fwd/bwd. Ортогональность — свойство ЛАТЕНТА; на Ŵ она нарушена по построению — метрика здоровья и так спроектирована: ‖Ŵx−Wx‖/‖Wx‖.
  4. Residual-ветка (компенсация ошибки): вторая пара факторов rank 32 по тому же формату, суммируется в выход. Первая конфигурация для A/B — с ней (у нас факторы r=64 крупнее сжатых Llama из статьи — запас по ошибке нужен).
  5. Чего НЕ берём из статьи: Dual-SVID init (он для сжатия готовых сетей; у нас from-scratch = штатный ортогональный init + STE), их PTQ-калибровку (Wanda-класс), и бит-serial kernel (не на нашей дорожке компилятора).
  6. Повторное использование: 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 коммитится ДО результатов.

  1. Дизайн (этот документ) — до кода.
  2. Код в burn-spectral + гейты G-A/G-C (CPU-клетка сразу; CUDA-клетка — после освобождения карты от torch-спайка, one-heavy-thing).
  3. A/B G-B на 9.2M (3 сида × 2 арма × 2 arms-конфигурации). Стоимость арма НЕИЗВЕСТНА (§3.3 плана: смета AB-PROTOCOL мертва) — перемерить перед запуском.
  4. При win — G-D на 100M-ранге и вход в рецепт b1 (фаза 5 плана).