Fractal-64
Jak działa
Blok (block_q2_0, 30 bajtów) koduje 64 wagi w hierarchii 8×8: jedna nadrzędna skala FP16 (d) i osiem 4-bitowych podskali, po jednej na 8-wagowy podblok, co daje podskalę dwukrotnie gęściej niż w Q3_K/MXFP4 (co 16–32 wag). Surowe 4-bitowe kody podskali {0..15} są przesuwane do dodatniego okna mult = 4 + sc ∈ {4..19}, co eliminuje „martwe" kody i zwiększa rozdzielczość podskali o ~31% bez dodatkowych bitów. Same wagi to nieliniowe 3-bitowe indeksy dekodowane tablicą LUT {-14,-8,-4,-1,+1,+4,+8,+14} przez VPSHUFB. Kluczowy trik wydajnościowy: mnożenie podskali jest wtopione w pojedynczą instrukcję AVX2 vpmaddwd (_mm256_madd_epi16(p01, vmult01)) zamiast mnożenia przez jedynki, a rozpakowywanie bitów korzysta z jednocyklowych zmiennych przesunięć (_mm256_sllv/srlv_epi32) i strumieniowania _MM_HINT_NTA omijającego cache L3. Jądro dot_q2_0_q8_0 skraca czas z 86,5 ms do 55,8 ms na 10 mln bloków (+55%). Pliki buduje skrypt build_fractal_moe_gguf.sh (profil fractal64 z wag BF16); gałąź attention/SSM/output pozostaje w Q8_0.
Rozwiązany problem
Wewnętrzne wymiary ekspertów MoE (np. 1856 = 29×64 i 2688 = 42×64 w Nemotron-3.5-30B-A3B) nie są podzielne przez QK_K = 256, więc standardowe sub-4-bitowe K-quanty i I-quanty w llama.cpp (Q3_K, IQ3_S, IQ3_XXS) tracą wyrównanie i degradują się do Q4_0 (4,50 bpw). Fractal-64 dzieli te tensory na bloki po 64 (bez tensorów fallback), osiągając ~3,75 bpw przy zachowaniu jakości (100/100 w teście Quality Gate dla Nemotron-3.5) i redukując rozmiar GGUF oraz zużycie RAM, co umożliwia inferencję dużych MoE na CPU z ograniczoną pamięcią.
Komponenty
Struktura bloku: ggml_half d (nadrzędna skala FP16, 2 B), scales[4] (osiem 4-bitowych podskali, 4 B), qs[16] (dolne 2 bity 64 indeksów), qh[8] (górny 1 bit 64 indeksów). sizeof == 30 bajtów → ~3,75 bitu na wagę. Identyfikator typu GGML: 40.
Super-blok 64 wag dzielony na 8 podbloków po 8 wag, z jedną 4-bitową podskalą na podblok. Rozwiązuje „pułapkę geometrii QK_K = 256" (1856 = 29×64, 2688 = 42×64) i podwaja rozdzielczość przestrzenną wychwytywania lokalnych outlierów względem Q3_K/MXFP4.
Surowy 4-bitowy kod podskali sc ∈ {0..15} jest przesuwany do mult = 4 + sc ∈ {4..19}, aby wyeliminować martwe kody {0..3} i zwiększyć efektywną rozdzielczość podskali o ~31% bez dodatkowych bitów.
Oficjalna
Wagi to 3-bitowe nieliniowe indeksy dekodowane tablicą {-14,-8,-4,-1,+1,+4,+8,+14} przez VPSHUFB. Jądro iloczynu skalarnego dot_q2_0_q8_0 wtapia mnożenie podskali w pojedynczą instrukcję AVX2 vpmaddwd i używa zmiennych przesunięć _mm256_sllv/srlv_epi32 — przyspieszenie o +55% (86,5 ms → 55,8 ms na 10 mln bloków).
Implementacja
Pliki Fractal-64 używają własnego typu tensora GGML_TYPE_Q2_0 (id 40) i jąder deepseek4/Stockfish-PVS. Niezałatane llama.cpp, Ollama i LM Studio odrzucają je błędem „unknown tensor type 40".
Profil fractal64 jest projektowany do transkodowania z wag BF16 master. Budowanie z gotowego Q4_0 (jak przy profilu mxfp4) nie wykorzystuje pełnej informacji z oryginału.
Ewolucja
Block-64 Q2_0 (3,75 bpw) dla „zimnych" ekspertów routowanego MoE w NVIDIA-Nemotron-3.5-30B-A3B; GGUF 17,59 → 14,35 GiB, 100/100 Quality Gate.
Transkodowanie gęstych tensorów MLA i indeksera (attn_q_b, attn_output_a/b, kompresory) do block_q2_0; GGUF 76,87 → 56,56 GiB, mieści 284B MoE w 64 GB RAM.
Hiperparametry (konfigurowalne osie)
Liczba wag na super-blok. W Fractal-64 ustalona na 64 (8 podbloków po 8 wag).
Efektywna liczba bitów na wagę wynikająca z 30 bajtów na blok 64 wag.
Liczba wag przypadających na jedną 4-bitową podskalę.
Warstwy GQA attention, ssm_out i output.weight pozostają w Q8_0 poza kwantyzacją Fractal-64.
Złożoność obliczeniowa
Złożoność przestrzenna: ~3.75 bpw (30 B / 64 weights).
Wąskie gardło obliczeniowe
Dekodowanie na CPU jest ograniczone przepustowością pamięci — format zmniejsza liczbę bajtów wag strumieniowanych na token (~3,75 bpw) i izoluje cache L3 przez _MM_HINT_NTA, co bezpośrednio podnosi przepustowość dekodowania.
Paradygmat wykonania
Tryb odnosi się do kodowania/dekodowania bloku wag, nie do rzadkości modelu.
Fractal-64 to format kodowania wag (gęsty blok), a nie mechanizm routingu. Jest jednak stosowany przede wszystkim do tensorów ekspertów routowanego MoE oraz do tensorów MLA.
Wymagania sprzętowe
Format zaprojektowany pod inferencję CPU: jądro dot_q2_0_q8_0 wykorzystuje AVX2/AVX-512 (zmienne przesunięcia _mm256_sllv/srlv_epi32, fuzja podskali w vpmaddwd) oraz izolację cache _MM_HINT_NTA. Geometria bloku 64 pasuje do cache L1D/L2 CPU.
Fractal-64 jest formatem CPU-first (3,75 bpw). Akceleracja GPU w projekcie dotyczy przede wszystkim siostrzanego formatu Fractal-MXFP4 (natywne shadery Vulkan), nie Fractal-64.