Skip to content

TSCT 2.0 — дизайн с kill-switch (pre-registration)

Дата: 2026-10-04. Автор: внешний агент (стратег, без кода) + владелец. Основа: tsct-spec, лист №6. Kill-switch: если fine-grained dense-MoE при равных active и total параметрах бьёт TSCT — спектральная часть удаляется, остаётся MoE с узкими dense-экспертами + QAT + fused-ядро.

0. Что следует из 689k (дыра №1)

Section titled “0. Что следует из 689k (дыра №1)”

Эксперт: 768 → 64 (z₁) → GLU(3072) → 64 → 768. gate/up сидят на общем 64-мерном латенте. 86% параметров — в подъёме/спуске, хотя вход/выход 64-мерные. Дыра №1: dense SwiGLU-эксперт с m≈299 (3·768·299 ≈ 689k) даёт те же параметры и FLOPs, но бутылочное горлышко 299, а не 64. «10.3×» — это эффект уменьшения эксперта, НЕ низкого ранга. TSCT обязан бить fine-grained dense-MoE (гранулярность ≈10) при равных active и total.

1. QAT-квантование (главное)

Section titled “1. QAT-квантование (главное)”
  • Две цели: (T) скорость обучения на sm_120, (D) размер/скорость деплоя.
  • Расписание (D): 0–85% bf16 → 85–100% лестница fp8 (3%) → NVFP4 (12%) с ретуном LR. Ternary — отдельной веткой от fp4-чекпоинта, бюджет ≥10%.
  • Масштабы: NVFP4 2D-блоки 16×16 для весов; обучаемый диапазон для int4/ternary; диагональ s в bf16 (s₀ = √(d_out/r)).
  • Порядок: update master → Gram-NS на мастере fp32 → Q(master) → fwd/bwd. Ретракция всегда ДО квантования; ретракция+квант+pack в одном ядре.
  • Орто: проверяется на мастере; на Ŵ нарушена по построению (~10% ошибка записи → Gram ≈1e-2, в 10× выше порога). Метрика здоровья Ŵ: ‖Ŵx−Wx‖/‖Wx‖ на калибровочном батче.
  • Петля: детерминированный Ŵ виден QAT на всех N проходах; риск смещения STE×N. Меры: γ_t на итерацию в bf16 → depth-wise адаптеры ранга 4–8 → первая/последняя итерации bf16.
  • Железо: sm_120 имеет block-scaled MMA mxf4nvf4, ~99 КБ smem, нет tcgen05. Пока нет своего ядра — квант в f32-графе доказывает качество, не скорость.

Гейты: G1 M_q×S_hw > 1 · G2 PTQ-разрыв ≥ 3× QAT-разрыва · G3 экспорт ±1e-3 BPB, fallback=0 · G4 g(4)/g(1) ≲ 2.5 · G5 ΔBPB ≤ max(2σ, Δ_cost) · G6 доля меняющихся кодов 0.1–5%, нулей у ternary ≲60%.

2. Ретракция в Gram-пространстве

Section titled “2. Ретракция в Gram-пространстве”
  • Итерация: X_{j+1} = X_j·q(G_j), q(G) = (15I−10G+3G²)/8, G_j = X_jᵀX_j. Все n итераций на 64×64 в smem; в высоких размерах — два матмула (Gram + apply).
  • Ошибка: ε′ = 0.625ε³ − 0.234ε⁴. n=1 хватает при ε₀ ≤ (τ/0.625)^{1/3} = 0.117 (τ=1e-3). n=2 — до ε₀≈0.6. Сходимость при σ²≲2.3, иначе пренормировка.
  • Дрейф: ε растёт ≤ 2η_t за шаг → ретракция по накопленному ρ·Ση_t, не «каждые k». Расписание η_t известно хосту, sync не нужны. ε_trig = 0.05.
  • Нужна ли вообще: кривая BPB(ε) при ε∈{0.01…0.5}; ε_crit = наибольшее ε с ΔBPB ≤ 2σ_seed.
  • Батчинг: группы по форме [E,768,64], [E,6144,64], [E,3072,64]. Ядро A: Gram; B: поли-итерации в smem + ε-гейдж; C: apply+квант+pack.

Гейты: нарушений ε над прогнозной границей ровно 0 · после ретракции ε ≤ τ на ≥1/16 шагов · A/B вариантов на 3 сидах (самый дешёвый в пределах спреда) · доля ретракции ≤ 8% шага · арм «без ретракции» = A/B or death для ограничения.

3. Latch — спектральный критерий

Section titled “3. Latch — спектральный критерий”
  • Метрика: ε_spec = ‖G−I‖₂ (Gram уже посчитан, 8 степенных итераций ≈3·10⁴ FLOPs). Логировать ε_rms = ‖G−I‖_F/√r и ε_max.
  • Порог: ε_trip = 2γ/√P, γ=2% допустимой ошибки активаций, P = число применений (4N). При N=4 → 0.01, на 100+ факторах сам ужесточается как 1/√P. ε_hard = 5·ε_trip.
  • Состояние: GPU-буфер [F,4] (ε_now, ε_peak, trips, last_trip_step) из эпилога ядра B. Хост читает раз в 64–256 шагов асинхронно (pinned+event, без sync), дописывает ortho_log.tsv. LOUD: первый trip по фактору — один раз, итоговая сводка, ненулевой код при trips > бюджета. COUNTED: счётчики в метаданных чекпоинта.
  • Эскалация только у нарушителя: deep-ретракция (n=3 + пренормировка) с grid по помеченным срезам.

Гейты: fault injection в CI (ε=0.05 → рост счётчика ≤ интервал чтения, stderr, ε≤τ ≤ 2 интервала, ненулевой код при провале) · тест «молчащего горения» (отключённый лог-синк, код всё равно отражает trips) · nsys: ноль cudaStreamSynchronize в шаге.

  • A (гранулярность, iso-active/iso-total): (E,k,r) ∈ {(8,1,128), (16,2,64), (32,4,32), (64,8,16)}.
  • B (ранг против ширины, равные параметры): r ∈ {64,128,192} при m ≈ 3072/1280/683 + узкий dense (m≈299). Если BPB монотонно улучшается к dense — низкий ранг не окупается.
  • C (R_act): R_act = r_shared + k·r_routed ∈ {64,128,256,512}. CoLA-прайор: нелинейность между факторами держит full-rank перплексию при ~half FLOPs (r≈d/4). Цель R_act ∈ [192,256], E·r ≥ d.
  • Модификации: два латента по 32 вместо общего; RMSNorm или SiLU на z₁.
  • Распределение ранга: старт равномерный → перераспределение по |s_j|·√load корзинами по 16 на 25%/50%.

Гейты: сравнения iso-FLOPs включая роутер · оптимум = колено BPB(log R_act) · порядок на 2k и 20k согласован (Спирмен ≥ 0.8).

  • KDA на каждой итерации, глобальная рука только на t∈S. N=4 S={4} = Kimi 3:1, N=8 S={4,8}. Веса KDA общие по итерациям, у глобальной — свои. Глобальная после ≥1 KDA-прохода: shift/short-conv, потом content-match.
  • На патчах (K≈n/4≈1k) полное каузальное внимание копеечное. MSA — для 1M-трека.
  • NoPE в глобальной руке (Kimi), позиция в decay/гейтах KDA.
  • Точное копирование: match — глобальная рука, spell — локальный байтовый декодер → латент патча нести байтовую идентичность.

Гейты: MQAR (пар {16,64,256} × длина 0.5k–8k) · BPB на повторах отдельно · гибрид лучше pure-KDA, если выигрыш на повторах >3σ при iso-params/iso-FLOPs, общий BPB не хуже, throughput ≥90% при 4k · NoPE vs RoPE по BPB(позиция) до 4× длины.

  • Свип ρ = P_table/B ∈ {0,10,25,50%} (U-кривая, минимум 4 точки).
  • Порядки: токен ≈ 4 байта → токенные [2,3] ≈ байтовые [8,12]. Свип при равном числе бакетов: {[2,3,4], [3,4,6], [4,6,8], [4,6,8,12]}, 2–4 hash-головы на порядок. Бакеты для n-грамм с частотой ≥2 (HyperLogLog).
  • ByteFlow: патчи — непрерывные векторы, хэшировать нельзя; ключ = хэш сырых байтов патчей k−1 и k. Каузально безопасно только если границы патчей каузальны и lookup патча k влияет лишь на предсказание k+1. bfverify должен покрыть и ключи Engram.
  • Дублирование: локальный энкодер (sliding-window + Canon) уже моделирует короткие n-граммы; Engram [2,3,4] вероятно избыточен, его ниша — длинные точные строки.

Гейты: A/B or death на чистом held-out (окна по 64 байта, найденные в train, исключены) · BPB по стратам (ключ виден в train ≥2/1/0 раз; ценность в ≥2) · разрыв train/held-out не больше, чем у ρ=0 · средний w_mem > 0.05 · RAM ≤ 5% шага.

  • Tucker-2: W_i = U·C_i·Vᵀ, U∈R^{d×R}, V∈R^{f×R} общие, C_i = diag(s_i) + A_iB_iᵀ, A,B∈R^{R×ρ}.
  • Память: M_ind = E·r(d+f) против M_sh = R(d+f) + E·R(1+2ρ). Предел E→∞: S∞ = r(d+f)/(R(1+2ρ)). При r=64, R=256, ρ=8 ≈56× (одна матрица).
  • Ретракция одна на базу (в E раз дешевле). Квант: база один раз в NVFP4, C_i в bf16.
  • Роутинг в R-мерном латентном пространстве (в 3 раза меньше трафика при R=256). Но база плотная, её FLOPs R(d+f) тратятся всегда. TileQ = «shared-expert + routed-ядра в одном латенте».
  • Предупреждение: параметрический шеринг ухудшал масштабирование в поиске структурированных слоёв. Прайор против TileQ как рычага качества, его роль — размер артефакта.

Гейты: BPB(TileQ) − BPB(независимые) ≤ 2σ при iso-active · разнообразие экспертов (средний попарный косинус W_i) не ниже · выигрыш в байтах артефакта при равном BPB (ось Parameter Golf).

Базис = plain byteflow после bfverify. Оси и армы:

  • Последовательность: {KDA, KDA+full(S), MSA, full}
  • Память: {нет, Engram[2,3,4], Engram длинные, Engram по патчам}
  • Канал: {dense, fine-grained dense-MoE, TSCT, TSCT+shared, TileQ}
  • Глубина: {PreNorm, ReZero, GR, AttnRes, mHC} × N∈{2,4,8}

Координатный спуск при фиксированном контроле. Этап 1: 4–5 армов × 3 спаренных сида × 2k. Этап 2: топ-2 × 3 сида × 20k. Этап 3: финалисты на следующем размере. Порядок осей: канал → последовательность → глубина → память. Сиды спарены (порядок данных и init).

Гейты: рука остаётся, если её удаление хуже на >2σ_pooled с одним знаком на всех 3 спаренных сидах · порядок на 2k и 20k согласован (Спирмен ≥ 0.8), иначе верим только 20k · композиция бьёт main по compute-множителю с CI > 1 и без регресса (MQAR, скобки).

9. Compute-множитель и лестница

Section titled “9. Compute-множитель и лестница”
  • L(C) = E + A·C^(−α). Одиночный A/B: M = (1 − Δ/(L_B−E))^(−1/α). При L_B−E ≈ 1 бит, α ≈ 0.1: M=1.1 ↔ ΔBPB≈0.01, M=1.3 ↔ ≈0.026.
  • Сиды при мощности 80%: n ≈ (2.8·σ_d/Δ)². При σ_d=0.005: M≳1.1 → 3 сида, 1.05 → ~8.
  • Лестница IsoFLOP: бюджеты C ∈ {3e16, 1e17, 3e17}, размеры N ∈ {10M, 30M, 100M} = 9 прогонов на арм. Подгонка E + A·C^(−α) с profile-likelihood по E. Ориентир: Kimi Linear ~1.16×.
  • Остановка: M(C) против log C с bootstrap; стоп если 80%-верхняя граница наклона <0 и M(C_max) < 1.15.
  • CI: bootstrap по клеткам (сид × размер), публикуем нижнюю границу M.

Гейты: α устойчива при выбрасывании любого бюджета (±25%) · LR-свип из 5 точек на каждом размере, оптимум внутри · идентичны порядок данных, окна eval, токены на шаг · предрегистрированный прогноз следующего бюджета в пределах 2σ.

  • Стек: fine-grained TSCT-эксперты r=16–32, E=64–256, k=2–4 + shared-эксперт. При E≳256 — product-key роутер (PEER: >1M крошечных экспертов, закон «выше гранулярность — лучше»).
  • Предел гранулярности на карте: арифметическая интенсивность ≈ 2τ/b FLOP/байт. Ridge ≈ 25 TFLOPS/448 ГБ/с ≈ 56 → τ ≥ 28 при fp8, E ≤ T·k/28 (T=4096, k=4 → E ≲ 580). Выше — память, не FLOPs. Для batch 1: токенов/с ≲ BW/(активные параметры·b).
  • Совмещение с TSCT: эксперты-тайлы общей базы (TileQ), роутинг в латентном пространстве.
  • Предел качества: ρ_act = N_dense/N_act при равном BPB по лестнице. Прайор: при скромных бюджетах MoE сравнивался с dense при ~4× меньшем compute, разрыв сужается с масштабом.

Гейты: ρ_act ≥ 3 на ≥3 размерах с CI · токенов/с при равном BPB не ниже dense (wall-clock) · utilization-энтропия ≥ 0.9·ln E, мёртвых ≤ 5%.

11–12. Одно изменение к качеству / эффективности

Section titled “11–12. Одно изменение к качеству / эффективности”
  • Качество: shared always-on эксперт ранга 192–256 рядом с routed r=32–64 (R_act в зону CoLA-паритета, идея shared-эксперта из DeepSeekMoE). Если контроль «узкий dense» победит — заменить низкоранговые на узкие dense.
  • Эффективность: персистентное fused-ядро эксперта в стиле flash-MLP: x→z₁→GLU по тайлам→z₂→y, h (3072 на токен) не покидает smem, в backward пересчитывается. + graph capture. Убирает ~6 запусков на эксперта ×E×N, бьёт в 87% простоя. При r=64 тайлы влезают в ~99 КБ smem.

13. Что сломано концептуально

Section titled “13. Что сломано концептуально”
  1. Нет контроля «узкий dense».
  2. Ортонормальность без A/B-вердикта: стоит 22% шага + latch, а при QAT на Ŵ не соблюдается.
  3. Общий латент gate/up.
  4. Запись в 64-мерное подпространство даёт слишком малый R_act.

Fine-grained эксперт с двумя латентами для gate и up, запись через shared-эксперт ранга ~192–256 плюс routed r=32–64 (R_act≥192), общие базы-тайлы и роутинг в латентном пространстве. Веса без жёсткого Stiefel (или с ослабленным DGram) и обучаемым s. Ретракция по накопленному Ση_t в Gram-пространстве, только если A/B докажет пользу. Обучение в bf16, на последних 15% QAT-лестница fp8→NVFP4 с ретракцией, квантом и pack в одном ядре. Fused flash-MLP и graph capture. Kill-switch: если fine-grained dense-MoE при равных active и total бьёт TSCT — спектральная часть удаляется, остаётся MoE с узкими dense-экспертами, QAT и fused-ядро.