Robocikowo>ROBOCIKOWO
Wnioskowanie

Fractal-64

2026EksperymentalnyOpublikowano: 9 listopada 2026Aktualizacja: 9 listopada 2026Opublikowany
Projektowy format kwantyzacji wag w blokach po 64 (GGML_TYPE_Q2_0, ~3,75 bpw) z projektu llama-modchip (autor: synchopate), przeznaczony do inferencji dużych modeli MoE na CPU.
Kluczowa innowacja
Format kwantyzacji wag w blokach po 64 (QK2_0 = 64) z dwupoziomowym, nieliniowym schematem Q2_0 (~3,75 bitu na wagę), który kwantyzuje tensory ekspertów MoE o wymiarach niepodzielnych przez 256 — tam, gdzie standardowe K-/I-quanty w llama.cpp degradują się do Q4_0 — a mnożenie podskali wtapia w pojedynczą instrukcję AVX2 vpmaddwd.
Kategoria
Wnioskowanie
Poziom abstrakcji
Wzorzec
Poziom operacji
InferencjaUdostępnianieWdrożenie
Zastosowania
Kwantyzacja tensorów ekspertów MoE o wymiarach niepodzielnych przez 256Inferencja dużych modeli MoE (np. Nemotron-3.5-30B-A3B, DeepSeek-V4-Flash 284B) na CPU z ograniczoną pamięcią RAMTranskodowanie gęstych tensorów MLA i indeksera w DeepSeek-V4-Flash do ~3,75 bpwZmniejszenie rozmiaru pliku GGUF i VmRSS przy zachowaniu jakości (100/100 Quality Gate)

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

block_q2_0 (GGML_TYPE_Q2_0, 30 B / 64 wag)Jednostka przechowywania skwantyzowanych wag

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.

Hierarchia 8×8 (super-blok 64, podbloki po 8)Dwupoziomowe skalowanie blokowe

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.

Przesunięte dodatnie okno podskali (mult = 4 + sc ∈ {4..19})Kodowanie podskali

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

Nieliniowy 3-bitowy LUT + jądro dot_q2_0_q8_0Dekodowanie i obliczenia SIMD

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

Pułapki implementacyjne
Niezgodność środowiska uruchomieniowego („unknown tensor type 40")Wysoka

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".

Rozwiązanie:Używaj załatanej binarki (./modchip lub standalone llama-server-modchip-linux-x86_64 z repozytoriów Hugging Face / Release v2.4.0).
Kwantyzacja z wag już skwantyzowanychŚrednia

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.

Rozwiązanie:Dla profilu fractal64 używaj wejścia BF16 (--profile fractal64 --input bf16.gguf).

Ewolucja

2026
Wprowadzenie Fractal-64 w llama-modchip (v2.1)
Punkt przełomowy

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.

2026
Rozszerzenie na DeepSeek-V4-Flash 284B (v2.4.0)

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)

Rozmiar bloku (QK2_0)Krytyczna

Liczba wag na super-blok. W Fractal-64 ustalona na 64 (8 podbloków po 8 wag).

64
Bity na wagęWysoka

Efektywna liczba bitów na wagę wynikająca z 30 bajtów na blok 64 wag.

3.75
Rozmiar podblokuŚrednia

Liczba wag przypadających na jedną 4-bitową podskalę.

8
Precyzja pnia (attention/SSM/output)Średnia

Warstwy GQA attention, ssm_out i output.weight pozostają w Q8_0 poza kwantyzacją Fractal-64.

Q8_0

Złożoność obliczeniowa

Złożoność przestrzenna: ~3.75 bpw (30 B / 64 weights).

Wąskie gardło obliczeniowe

Przepustowość pamięci (strumieniowanie wag)

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 główny
Gęsty

Tryb odnosi się do kodowania/dekodowania bloku wag, nie do rzadkości modelu.

Wzorzec aktywacji
Wszystkie ścieżki aktywne
Mechanizm routingu

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

Podstawowe

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.

Ograniczony

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.