🇷🇺 Русская версия (этот файл) · 🇬🇧 English version
🧬 kda-graft
Qwen2.5-0.5B с трансплантированным KDA — гибрид 3:1 (18 KDA + 6 GQA)
Хирургия весов · CPT · retrieval-серии · экономика длинного контекста
| 🧠 память кэшей | ⚡ decode при 512K | 📏 честный envelope | 🧪 качество |
|---|---|---|---|
| ×3.9 (асимптота ×4) | ×3.65 (паритет ≈65K) | ≤ 32K | needle 3/3 до 32K |
| 12 288 → 3 139 Б/ток | TPOT 318 → 87 мс | prefill — не доказан | 0/3 на 64K |
Хирургия весов: готовый чекпоинт Qwen2.5-0.5B разрезан по слоям, 18 из 24 слоёв attention заменены на KDA (Kimi Delta Attention / gated delta rule), 6 оставлены GQA+RoPE. Затем — CPT, дообучение на recall-сигнале и полное измерение экономики длинного контекста (память, decode-время, качество).
Это исследовательский артефакт, а не продовая модель: чекпоинт, на котором получены все числа Milestone 5, плюс полный набор доказательств и сырых прогонов.
- Память — доказано точно. KV-кэш падает с 12 288 до 3 072 Б/токен (+4.21 МиБ константы состояния); измерение кэшей сходится с формулой до байта; асимптота ×4 при 1M контекста.
- Decode — выигрыш растёт с длиной. Шаг KDA почти не зависит от L, шаг attention растёт линейно: кроссовер ≈65–79K, ×3.08 на 256K, ×3.65 на 512K (синтетические кэши, честная подпись).
- Prefill — этой реализацией НЕ выигрывает. Eager-цикл проигрывает flash-SDPA ×90–110; аналитика в пользу KDA с T ≈ 192, но нужны fused-ядра (FLA/FlashKDA).
- Качество — условие экономии. Needle-паритет с базой до 32K; на 64K дальний recall теряется.
- Отрицательная находка. На килодистанциях дальний recall несут attention-слои (копирование в окне), а не память KDA: под окном W=128 точность 0.920 при копии ответа в окне и 0.000 без неё — одинаково у графта и базы.
Что в репозитории
| Файл | Что это |
|---|---|
model.safetensors | основной артефакт — чекпоинт r2b (шаг 120), на нём сняты все числа экономики и retrieval-проб |
config.json | конфиг с layer_types (kda×18 / gqa×6) и блоком kda (conv_size=4, dk=dv=64) |
tokenizer*.json, vocab.json, merges.txt | токенизатор Qwen2.5 (унаследован, не менялся) |
synthetic/kda-graft-3to1-v2cal/ | графт после калибровки масштаба, до обучения (стартовая точка CPT-A) |
synthetic/kda-graft-3to1-v2/ | графт без калибровки (out_scale=1) — контроль |
reports/*.docx | три отчёта эксперимента: экономика, экстремальные дистанции, retrieval |
docs/RESULTS.md, docs/ECON_PLAN.md | протокол и результаты целиком |
docs/evals/*.txt | PPL-оценки вариантов инициализации |
Полная доказательная база (все runs/*.json, консоль-логи, графики, скрипты, recall-датасеты):
Rob1234567/kda-graft-econ-evidence-2026-09-12.
Идея и архитектура
Qwen2.5-0.5B (24 слоя, GQA 14/2, head_dim=64, RoPE)
│ хирургия safetensors + config.json — БЕЗ transformers
▼
KDA-гибрид 3:1: [KDA, KDA, KDA, GQA] × 6 (18 KDA + 6 GQA)
│ новые параметры инициализируются, старые — ремапятся
▼
r2b checkpoint (1.05 GB, bf16)
| база | графт | |
|---|---|---|
| слоёв attention | 24 GQA | 6 GQA (RoPE) |
| слоёв KDA | 0 | 18 (без RoPE, состояние) |
| кэш на токен | 12 288 Б | 3 072 Б + 4.42 МБ константы |
| асимптотика экономии | 1× | ×4 (потолок задан 6 attention-слоями) |
| параметров (с conv/gates) | 494 M (291 тензор) | 548 M (453 тензора) |
Хирургия: q/k/v/o-проекции переносятся из GQA (k/v реплицируются с 2 на 14 голов);
добавляются conv-4 (identity-tap), α-гейт (bias = +5 → σ≈0.993, память почти не забывает),
β, выходной гейт и RMSNorm. Каждый 4-й слой остаётся GQA — он адресуемый, с RoPE.
Результаты: экономика длинного контекста
Протокол и критерии приёмки — docs/ECON_PLAN.md; сводка — runs/econ-summary.md в evidence-репозитории.
Все замеры: bf16 + autocast, batch=1, RTX 4080 SUPER 16 GB. Уровень реализации подписан в каждом JSON
(kernel_level): attention prefill — flash-SDPA, KDA prefill — eager-цикл по T, KDA decode — eager-шаг
по O(1)-состоянию. Смешивать эти числа с fused-ядрами (FLA/FlashKDA) нельзя.
1. Память — доказано точно
| L | база, Б/ток | графт, Б/ток | база, GiB | графт, GiB | экономия × |
|---|---|---|---|---|---|
| 512 | 12 288 | 11 703 | 0.0059 | 0.0056 | 1.05 |
| 8 192 | 12 288 | 3 611 | 0.0938 | 0.0276 | 3.40 |
| 32 768 | 12 288 | 3 207 | 0.3750 | 0.0979 | 3.83 |
| 65 536 | 12 288 | 3 139 | 0.7500 | 0.1916 | 3.91 |
| 1 048 576 | 12 288 (аналитика) | 3 004 (измерено) | 12.0 | 3.0041 | 3.99 |
Измерение совпадает с формулой до байта (205 745 664 Б при L = 65 536). Точка равной памяти L* ≈ 480 токенов: ниже — константа состояния дороже KV.
2. Decode: O(1) против O(L)
Синтетические кэши (изоляция структурной разницы от цены префилла):
| L | TPOT база, мс | TPOT графт, мс | база / графт | кэш база, GiB | кэш графт, GiB |
|---|---|---|---|---|---|
| 65 536 | 27.9 | 33.4 | 0.83 | 0.750 | 0.192 |
| 131 072 | 56.5 | 32.9 | 1.72 | 1.500 | 0.379 |
| 262 144 | 143.2 | 46.5 | 3.08 | 3.000 | 0.754 |
| 524 288 | 318.5 | 87.2 | 3.65 | 6.000 | 1.504 |
| 1 048 576 | — | 171.7 | — | — | 3.004 |
У графта шаг почти плоский по L, у базы растёт ~линейно; кроссовер ≈ 65–79K, потолок ×4 (по памяти). База на 1M не мерилась — её кэш упирается в 16 ГБ карты.
3. Prefill — этой реализацией НЕ выигрывает (честно)
Аналитически (порядковые FLOPs, Kimi Linear Eq. 13–14) KDA дешевле attention начиная с T ≈ 3d = 192, к 1M отношение FLOPs KDA/attn ≈ 5.5×10⁻⁴. Но wall-clock у текущей реализации хуже: TTFT графта линейный по T (≈5.2 мс/ток, питоновский eager-цикл) против flash-SDPA у базы (≈45 мкс/ток) — то есть ×90–110 медленнее. Нужны fused-ядра — заявлены как следующий шаг, а не как результат.
4. Качество — условие легитимности экономии
| L | база (needle) | графт r2b |
|---|---|---|
| 8 192 | 3/3 | 3/3 |
| 16 384 | 3/3 | 3/3 |
| 32 768 | 3/3 | 3/3 |
| 65 536 | 2/3 | 0/3 |
Operating envelope: ≤ 32K. На 64K графт теряет дальний recall — вне этого envelope экономию не заявлять. Prefill-выигрыш и L > 32K — открытые пункты, а не достижения.
5. Свип доли KDA-слоёв
| конфигурация | KDA-слоёв | attn-слоёв | KV @128K, GiB | состояние, МиБ | итого, GiB | × к базе |
|---|---|---|---|---|---|---|
| 1:1 | 12 | 12 | 0.750 | 2.62 | 0.753 | 1.99 |
| 3:1 (графт) | 18 | 6 | 0.375 | 3.94 | 0.379 | 3.96 |
| 7:1 | 21 | 3 | 0.188 | 4.59 | 0.192 | 7.80 |

Как получен этот чекпоинт
| этап | что делали | результат |
|---|---|---|
| 1. Хирургия | safetensors → ремап + новые тензоры | загрузка без missing/unexpected; юниты prefill-vs-step 5e-7 |
| 2. Калибровка | per-layer out_scale (2.1–16.4, медиана 5.6) | PPL ↓ ~×10 без единого шага обучения |
| 3. CPT-A (wikitext-103) | 1200 шагов, 9.8M токенов, bs 64×T128, lr 2e-4 | val PPL 83 916 → 14.08 |
| 4. R1 (MQAR, T=128) | 0.8M токенов синтетики | task acc 0.996 — механизм памяти есть, LM разваливается (PPL 21 141) |
| 5. R2 (dense-passkey, T=512) | 2.4M токенов, маскированный лосс | needle 0/9 → 9/9, exact 0.906 |
| 6. R2b (парафразы) | 120 шагов, 0.74M токенов, lr 8e-5 | full exact 0.745 → 0.859, heldout 0.875 → 0.896 |
| 7. Milestone 4–5 | экстремальные дистанции + экономика | см. таблицы выше и docs/ |
Атрибуция: откуда берётся дальний recall (важная отрицательная находка)
Обнуление выходов 18 KDA-слоёв или 6 GQA-слоёв на инференсе обрывает retrieval в обоих случаях — навык распределён по всему стеку. Отдельно проверено «слепое окно» (окно внимания W=128): точность на дальних дистанциях 0.920, когда копия ответа попадает в окно, и 0.000 у обоих (графт и база), когда не попадает. То есть дальний recall на килодистанциях несут attention-слои (копирование повторов в окне), а KDA-память там затухает (∏α ≈ 10⁻³ на 950 токенах). Память KDA обучаема нести recall при слепом внимании — но на коротких дистанциях: MQAR-окно 32 даёт 0.15 → 0.994.
Границы применимости
- Все числа — на «учебных» реализациях ядер; переносимы отношения и наклоны, не абсолютные мс.
- batch=1: serving-экономика (ёмкость под конкурентные запросы) не измерена.
- Модель 0.5B: KV-часть мала в абсолюте; на больших моделях абсолютная экономия растёт.
- Качество — needle-пробы; полный RULER/LongBench не прогонялся.
transformersв окружении эксперимента сломан (конфликтhuggingface-hub) — вся работа шла на чистом torch + safetensors.config.jsonсамодостаточен, но кастомный класс модели KDA в этом репозитории не публикуется: инференс — только черезdocs-скрипты из evidence-репозитория.
Быстрый старт
pip install torch safetensors huggingface_hub
hf download Rob1234567/kda-graft-qwen2.5-0.5b-linear-attention-3to1 --local-dir kda-graft-r2b
Веса грузятся напрямую (без transformers), инференс — реализацией kda_model.py из evidence-репозитория:
git clone https://huggingface.co/datasets/Rob1234567/kda-graft-econ-evidence-2026-09-12 evidence
cd evidence
python3 code/kda_model.py --help # KDA + GQA слои, prefill/decode с кэшами
python3 code/bench_inference.py --model <путь к чекпоинту> --lengths 512,8192,65536
Ключ загрузки состояния: S хранится в fp32; при bf16-весах нужен --autocast (иначе матмулы
bf16 × fp32-состояние падают — находка при прогонах).
| Путь в датасете | Что искать |
|---|---|
reports/ | три отчёта DOCX (копии лежат и в этом репозитории) |
accounting/ | econ-accounting.json (байты, FLOPs, crossover, свип долей), реальный префилл, синтетический decode-скейл, econ-summary.md |
report_assets/ | 8 графиков отчёта об экономике (PNG) |
retrieval/ | бин-эвалы 192 блока × формулировки, gates_r*.json, абляции, passkey_blind_subset.json |
extreme/ | needle 8K–128K, абляции KDA/GQA-групп, консоль-логи |
probes/ | точечные пробы: needle, overwrite, окна window-*.json |
training/ | train_log.jsonl всех прогонов (шаг · loss · lr · val PPL · task-метрики) |
code/ | 40+ скриптов: графтинг, модель, обучение, бенчмарки, пробы, аудит отчётов |
data/ | recall-датасеты (MQAR, dense-passkey, парафразы) и wt103_val.bin |
Каждый JSON с замерами содержит kernel_level — реализацию, которой получены числа.
Ограничения и этика
Модель наследует всё от Qwen2.5-0.5B (включая предвзятости базового корпуса) и добавляет эффекты хирургии весов и CPT на публичных данных (wikitext-103 + синтетические recall-задачи). Не предназначена для продакшена, для принятия решений или для работы с персональными данными; языковые способности после графтинга деградируют (ru-PPL CPT-A ≈ 2 460 — заметно хуже базы).
Цитирование
@misc{kda_graft_qwen25_05b_2026,
title = {kda-graft: weight surgery of Qwen2.5-0.5B into a 3:1 KDA/GQA hybrid,
and the economics of long-context inference},
author = {Rob1234567},
year = {2026},
month = {9},
howpublished = {\url{https://huggingface.co/Rob1234567/kda-graft-qwen2.5-0.5b-linear-attention-3to1}},
note = {Reports: kda-graft econ / extreme / retrieval, 2026-09-11..12}
}
Лицензия
Веса — производная от Qwen/Qwen2.5-0.5B:
лицензия и условия использования наследуются от базовой модели (Apache-2.0), файл LICENSE
скопирован из неё. Код эксперимента — в evidence-репозитории.