JohnTdi's picture
Upload README.md with huggingface_hub
5e9091d verified
|
Raw
History Blame Contribute Delete
20.6 kB
metadata
license: other
language:
  - pl
  - en
base_model: speakleash/Bielik-Minitron-7B-v3.0-Instruct
tags:
  - polish
  - bielik
  - minitron
  - depth-pruning
  - gguf
  - experimental
pipeline_tag: text-generation

Bielik-Minitron Fit 6B

Depth-pruned (40L → 32L, 6.03B) wariant Bielik-Minitron-7B-v3.0-Instruct, odzyskany przez KD + R-Tuning + LoRA souping. Mniejszy i ~20–25% szybszy, do krótkich zadań po polsku. Projekt eksperymentalny/edukacyjny.

Pliki

plik rozmiar zastosowanie
Bielik-Minitron-Fit-6B-Q4_K_M.gguf 3.4 GiB mniejszy, szybszy decode — słabszy sprzęt
Bielik-Minitron-Fit-6B-Q8_0.gguf 6.0 GiB wyższa jakość

Użycie (llama.cpp)

llama-cli -m Bielik-Minitron-Fit-6B-Q4_K_M.gguf -p "Kto wygrał mistrzostwa świata w piłce nożnej w 1998 roku?" --temp 0.1
# albo serwer:
llama-server -m Bielik-Minitron-Fit-6B-Q8_0.gguf -c 4096 --temp 0.1

Szablon czatu: ChatML (<|im_start|>role … <|im_end|>). Zalecana temperatura 0–0.2.

Licencja

Model pochodny od speakleash/Bielik-Minitron-7B-v3.0-Instructpodlega licencji modelu bazowego (sprawdź u źródła przed użyciem komercyjnym). / Derived from speakleash/Bielik-Minitron-7B-v3.0-Instructsubject to the base model's license.


Bielik-fit 6B Instruct — depth-pruned recovery (eksperyment)

Dla tych, którzy nie lubią dużo czytać: Mniejszy i 20% szybszy Bielik, dobrze się wpasuje na wolniejszy hardware. Najlepiej używać z temp 0-0.2. Słabszy w długim rozumowaniu, podobny w szybkich zadaniach.

Full wersja: Ten projekt miał dla mnie głównie charakter edukacyjny — chciałem od środka poznać architekturę Bielika i przy okazji przetestować pruning.

Punkt wyjścia jest tu level hard: Bielik-Minitron-7B sam już jest skompresowany z modelu 11B. Czyli ścinałem model, który raz już przeszedł kompresję. Zadanie karkołomne — i przyznaję, trochę mi to krwi napsuło.

Wziąłem 40-warstwowego rodzica (7.48B), wyciąłem 8 warstw → 32L (−20% głębokości) i częściowo odzyskałem jakość. Mniej warstw = mniej obliczeń na token = szybszy decode na słabszym sprzęcie. Finalny model ma 6.03B parametrów.


Metoda

1. Pomiar i wybór warstw do cięcia (block-influence). Każdą warstwę oceniłem metryką wpływu: kąt między wejściem a wyjściem bloku (cosine input↔output) oraz wzrost NLL przy „identity-skip" (pominięciu warstwy). Wybrałem region środkowo-późny o najmniejszym wpływie:

CUT = [11, 12, 13, 14, 20, 21, 22, 25]   # 8 z 40 → 32L

Dodatkowo zrobiłem gradient-saliency probe (per-moduł, per-warstwa) pod ewentualny targeted LoRA. Lekcja praktyczna: 30-sample probe potrafi kłamać vs pełny lm-eval (−25pp), więc decyzje o cięciu walidowałem pełnym benchem.

2. Trening integrujący „zszyte" warstwy (knowledge distillation). Po wycięciu warstw model jest rozspojony. Odzyskałem przez online full-vocab KD: KL(teacher ‖ student) + CE, teacher = nietknięty 40L rodzic. Padded batche. Top-k KD dawało bełkot — użyłem pełnego rozkładu. Po ludzku: nietknięty duży model (nauczyciel) na bieżąco pokazuje okrojonemu (uczniowi) jaki rozkład odpowiedzi powinien dawać, a uczeń uczy się go naśladować. Tak „zszywa" wycięte warstwy z powrotem i odzyskuje większość tego, co straciło cięcie — bez uczenia od zera.

3. Trening anty-halucynacyjny (R-Tuning, closed-book abstention). Grounded-abstencja (PoQuAD z kontekstem) NIE działa — uczy „czy w tekście", nie „czy wiem". Działa R-Tuning: probuję ten checkpoint na pytaniach z gold → trafne Q→gold, błędne Q→"nie wiem". Etykiety per-checkpoint, ~50:50 known/unknown, niski udział w miksie (>12% → over-refusal). Efekt: model mówi „nie wiem" tam, gdzie wcześniej pewnie zmyślał. Po ludzku: najpierw sprawdzam, czego model naprawdę nie wie (zadaję mu pytania, do których znam odpowiedź, i patrzę gdzie się myli), a potem uczę go mówić w tych miejscach „nie wiem" zamiast pewnie zmyślać. Trzeba uważać z dawką — za dużo takich przykładów i model zaczyna odmawiać nawet na rzeczy, które zna.

4. LoRA souping. Po takim cięciu model był bardzo wrażliwy na treningi, przy kilku treningach zyskiwał coś kosztem innego zadania więc tutaj lora souping pomiędzy treningami był zbawienny. Po ludzku: LoRA souping to uśrednienie wag z kilku osobnych treningów w jeden model — zamiast wybierać „albo dobry w jednym, albo w drugim", biorę średnią i często wychodzi model dobry w obu naraz.


Wyniki — Open PL LLM Leaderboard (Q8_0)

task Minitron 7B (rodzic) Bielik-fit 32L
psc 95.73 94.34
ppc 75.60 70.70
dyk 73.37 85.42
belebele 87.33 76.67
8tags 78.29 79.69
polemo2 77.15 90.44
ŚREDNIA 81.25 82.88

Parametry wyglądają całkiem nieźle — i muszę uczciwie powiedzieć, że częściowo wynika to ze sposobu, w jaki model był trenowany. Wszystkie miksy i skrypty są dostępne na moim profilu Hugging Face. Dane kilkukrotnie sprawdzałem i filtrowałem pod kątem benchmark-leaks (dekontaminacja n-gram + embedding cosine vs test-splity — 0 verbatim leaku na wszystkich taskach).

Diabeł tkwi w szczegółach

Wysoka średnia ≠ „mądrzejszy model". Kluczowa jest regresja na belebele (87 → 77, −10.7pp) i jest ona bezpośrednio związana z redukcją warstw. belebele to długi pasaż + wielokrokowy reasoning — czyli dokładnie to, co ucięte warstwy zapewniały. Model 6B jest słabszy w dłuższym rozumowaniu i długim kontekście; lepiej nadaje się do krótkich zadań (klasyfikacja, faktografia, krótkie odpowiedzi). Wysokie polemo2/dyk to efekt dotrenowania na PL-taskach, nie ogólnej wyższości. Ponadto model był sprawdzany tylko w języku polskim, dataset zawierał elementy treningu z języka angielskiego. Obstawiam dużą regresje na innych językach ale przypominam, że moim celem był mały szybki polski Bielik.


Benchmarki angielskie (EN / math / code)

Generacyjnie, przez chat endpoint, identyczny setup dla obu modeli (n=120 dla ARC/GSM8K, 164 dla HumanEval):

benchmark Bielik-fit 6B Minitron 7B różnica
ARC-Challenge (reasoning EN) 61.7 81.7 −20.0
GSM8K (matematyka) 50.0 69.2 −19.2
HumanEval pass@1 (kod) 34.8 70.1 −35.3

Tu fit-6B wyraźnie odstaje — i to potwierdza całą narrację: cięcie warstw najmocniej kosztuje głęboki reasoning, matematykę i kod (ta sama przyczyna co regresja belebele), a do tego trening był głównie polski. Czyli zgodnie z celem: fit-6B to mały, szybki model do krótkich zadań po polsku — nie do reasoningu, kodu czy angielskiego.


Tool-calling i RAG (vs Minitron 7B)

zdolność Bielik-fit 6B Minitron 7B
Tool-calling (BFCL AST) 0.78 0.94
RAG grounded (EM) 0.60 0.69
RAG abstencja (impossible) 0.20 0.53

Cięcie warstw zachowało routing (wybór funkcji — 0 błędów nazwy), ale kosztowało precyzję argumentów i samokontrolę (rozpoznanie „nie wiem"). Spójne z belebele: pruning tnie głębokość, nie wiedzę powierzchniową.


Prędkość — fit-6B vs Minitron 7B (R9700 / RADV Vulkan, gfx1201)

llama-bench, t/s. pp512 = prefill, tg128 = decode, @dN = przy kontekście N tokenów.

Decode (tg128):

kontekst fit-6B Q4 Minitron 7B Q4 fit-6B Q8 Minitron 7B Q8
0 126 102 85 68
2048 116 94 80 65
8192 91 73 68 54

Prefill (pp512):

kontekst fit-6B Q4 Minitron 7B Q4 fit-6B Q8 Minitron 7B Q8
0 3940 3038 4726 3822
8192 1718 1345 1830 1456

Rozmiary: fit-6B Q4 3.39 GiB / Q8 5.97 GiB · Minitron 7B Q4 4.19 GiB / Q8 7.40 GiB.

Przy tym samym kwancie fit-6B jest ~24–30% szybszy od Minitron 7B (efekt −20% warstw / −19% parametrów: 6.03B vs 7.48B). Q4 = szybszy decode (memory-bound), Q8 = szybszy prefill (compute-bound, coopmat). Do interaktywnego czatu na słabszym GPU → Q4.


Rekomendacja

Model najlepiej sprawdza się przy temperaturze 0–0.2. Wtedy faktograficznie dorównuje pełnemu Minitron 7B na normalnej i trudnej wiedzy o Polsce (patrz appendix), przy −20% rozmiaru i ~25% szybszym decode. Skompresowany model ma „cieńszą" pewność, więc przy wysokiej temperaturze sampling łatwiej go wykoleja. Do dłuższego rozumowania / długiego kontekstu wybierz pełny model.


Cały projekt ma charakter czysto eksperymentalny i edukacyjny. Asysta przy kodowaniu: Claude Code. Nie odpowiadam za niego. :)


Appendix — testy faktograficzne fit-6B vs Minitron 7B przez temperatury

Każde pytanie zadane przy temperaturach 0.0 / 0.2 / 0.4 / 0.6 / 0.8 / 1.0. OK = odpowiedź trafna (lub trafna abstencja/sprostowanie), HAL/WRG = halucynacja/błąd. Anti-halu system prompt, greedy seed. (Sędzia i autor pytań: Opus 4.8 — wierzę mu na słowo.)

Poziom 1 — adversarialne (pułapki, niszowe fakty, fałszywe przesłanki)

Q1  Pierwszy kolarz z 5× Tour de France?
    fit-6B  OK  OK  OK  OK  HAL HAL      Minitron 7B  HAL HAL HAL HAL HAL HAL
Q2  Jaką jednostkę temp. wprowadził polski naukowiec?
    fit-6B  OK  OK  OK  HAL HAL HAL      Minitron 7B  HAL HAL HAL HAL HAL HAL
Q3  Burmistrz Pacanowa 14 marca 1632?
    fit-6B  OK  OK  OK  HAL HAL HAL      Minitron 7B  HAL HAL HAL HAL HAL HAL
Q4  Imię kota Bolesława Chrobrego?
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q5  Dlaczego Polska graniczy z Hiszpanią?
    fit-6B  HAL HAL HAL HAL HAL HAL      Minitron 7B  OK  OK  OK  OK  OK  OK
Q6  Czy Warszawa jest stolicą Francji?
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q7  Ile Oscarów zdobył Armageddon?
    fit-6B  OK  OK  HAL OK  OK  HAL      Minitron 7B  HAL OK  OK  OK  OK  OK
Q8  Kiedy Mickiewicz zdobył Oscara?
    fit-6B  OK  OK  OK  OK  OK  HAL      Minitron 7B  OK  OK  OK  OK  OK  OK
Q9  Dlaczego Księżyc jest większy od Słońca?
    fit-6B  HAL HAL HAL HAL HAL HAL      Minitron 7B  OK  OK  OK  OK  OK  OK
Q10 W którym roku Sobieski założył Facebooka?
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  HAL HAL HAL
    WYNIK: fit-6B 37/60 (62%) | Minitron 7B 41/60 (68%)

Poziom 2 — normalne fakty o Polsce

Q1 Pierwszy koronowany król? (Chrobry)            fit OK×6   Minitron 7B OK×6
Q2 Rok wstąpienia do UE? (2004)                   fit OK×6   Minitron 7B OK×6
Q3 Najwyższy szczyt? (Rysy)                        fit OK×6   Minitron 7B OK×6
Q4 Autor "Quo Vadis"? (Sienkiewicz)                fit OK×6   Minitron 7B OK×6
Q5 Rok bitwy pod Grunwaldem? (1410)                fit OK×6   Minitron 7B OK×6
Q6 Pierwszy polski papież? (Jan Paweł II)          fit OK×6   Minitron 7B OK×6
Q7 Morze na północy? (Bałtyk)                      fit OK×6   Minitron 7B OK×6
Q8 Wódz pod Wiedniem 1683? (Sobieski)              fit OK×6   Minitron 7B OK×6
Q9 Ile województw? (16)                            fit OK×6   Minitron 7B OK×6
Q10 Autor mazurków/polonezów? (Chopin)             fit OK×6   Minitron 7B OK×6
    WYNIK: fit-6B 60/60 (100%) | Minitron 7B 60/60 (100%)

Poziom 3 — średnio-trudne fakty o Polsce

Q1 Rok Konstytucji 3 Maja? (1791)                  fit OK×6   Minitron 7B OK×6
Q2 Ostatni król Polski? (Poniatowski)              fit OK×6   Minitron 7B OK×6
Q3 Autor "Lalki"? (Prus)                           fit OK×6   Minitron 7B OK×6
Q4 Noblistka literacka 1996? (Szymborska)          fit OK×6   Minitron 7B OK×6
Q5 Rok III rozbioru? (1795)                        fit OK×6   Minitron 7B OK×6
Q6 Druga rzeka po Wiśle? (Odra)                    fit OK×6   Minitron 7B OK×6
Q7 Rok Powstania Warszawskiego? (1944)             fit OK×6   Minitron 7B OK×6
Q8 Pierwszy premier po 1989? (Mazowiecki)          fit OK×6   Minitron 7B OK×6
Q9 Rok unii lubelskiej? (1569)                     fit OK×6   Minitron 7B OK×6
Q10 Malarz "Bitwy pod Grunwaldem"? (Matejko)       fit OK×6   Minitron 7B OK×6
    WYNIK: fit-6B 60/60 (100%) | Minitron 7B 60/60 (100%)

Poziom 4 — trudne fakty o Polsce (chronologia, precyzyjne daty)

Q1  Prezydent przed Wałęsą? (Jaruzelski)
    fit-6B  OK  OK  OK  OK  OK  WRG      Minitron 7B  OK  OK  OK  OK  OK  OK
Q2  Prezydent po Wałęsie 1995? (Kwaśniewski)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q3  Pierwszy prezydent II RP? (Narutowicz)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q4  Rok chrztu Polski? (966)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q5  Dowódca Westerplatte 1939? (Sucharski)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q6  Rok stanu wojennego? (1981)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q7  Bitwa 1920 "Cud nad Wisłą"? (Warszawska)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
Q8  Matematyk od przestrzeni unormowanych? (Banach)
    fit-6B  OK  OK  WRG WRG WRG WRG      Minitron 7B  OK  OK  OK  OK  OK  OK
Q9  Rok hołdu pruskiego? (1525)
    fit-6B  OK  WRG WRG WRG WRG WRG      Minitron 7B  OK  WRG WRG WRG WRG WRG
Q10 Rok śmierci Piłsudskiego? (1935)
    fit-6B  OK  OK  OK  OK  OK  OK       Minitron 7B  OK  OK  OK  OK  OK  OK
    WYNIK: fit-6B 50/60 (83%) | Minitron 7B 55/60 (92%)



═══════════════════════════════════════════════════════════════

🇬🇧 English version

Bielik-Minitron Fit 6B — depth-pruned recovery (experiment)

TL;DR: a smaller, ~20% faster Bielik that fits on slower hardware. Best used at temp 0–0.2. Weaker at long-form reasoning, comparable on short tasks.

Full version: This was mainly an educational project — I wanted to understand Bielik's architecture from the inside and test pruning along the way.

Starting point on hard mode: Bielik-Minitron-7B is already compressed from an 11B model. So I was cutting a model that had already been compressed once. A tough task — and I'll admit it cost me some nerves.

I took the 40-layer parent (7.48B), cut 8 layers → 32L (−20% depth) and partially recovered quality. Fewer layers = less compute per token = faster decode on weaker hardware. Final model: 6.03B params.

Method

1. Layer selection for cutting (block-influence). I scored each layer by influence: input↔output cosine angle and the NLL increase under "identity-skip". I cut the mid-to-late region of lowest influence: CUT = [11,12,13,14,20,21,22,25]. A practical lesson: a 30-sample probe can lie vs full lm-eval (−25pp), so cut decisions were validated with the full benchmark.

2. Layer-integration training (knowledge distillation). After cutting, the model is "unstitched". I recovered it with online full-vocab KD: KL(teacher‖student) + CE, teacher = the untouched 40L parent. In plain terms: the intact big model (teacher) shows the trimmed one (student) what answer distribution it should produce, and the student learns to imitate it — re-stitching the cut layers and recovering most of what was lost, without training from scratch.

3. Anti-hallucination training (R-Tuning, closed-book abstention). Grounded abstention does NOT work (teaches "is it in the text", not "do I know"). R-Tuning works: probe this checkpoint on gold questions → correct Q→gold, wrong Q→"I don't know". In plain terms: I first check what the model genuinely doesn't know, then teach it to say "I don't know" there instead of confidently making things up. Dose carefully — too much and it starts refusing even things it knows.

4. LoRA souping. After cutting, the model was very sensitive to training — gains in one task came at the cost of another. In plain terms: souping averages the weights of several separate training runs into one model — instead of picking "good at A or good at B", I take the average and often get a model good at both.

Results — Open PL LLM Leaderboard (Q8_0)

task Minitron 7B (parent) Bielik-fit 32L
psc 95.73 94.34
ppc 75.60 70.70
dyk 73.37 85.42
belebele 87.33 76.67
8tags 78.29 79.69
polemo2 77.15 90.44
AVG 81.25 82.88

The numbers look quite good — and honestly, that's partly due to how the model was trained. All training mixes and scripts are on my Hugging Face profile. Data was checked and filtered several times for benchmark leaks (n-gram + embedding-cosine decontamination vs test splits — 0 verbatim leakage on all tasks).

The devil is in the details

A high average ≠ "smarter model". The key signal is the belebele regression (87 → 77, −10.7pp), directly caused by the layer reduction. belebele = long passage + multi-step reasoning — exactly what the cut layers provided. The 6B model is weaker at long-form reasoning and long context; better suited to short tasks (classification, factual lookup, short answers). The high polemo2/dyk come from fine-tuning on PL tasks, not general superiority. The model was tested only in Polish; the dataset had some English. I expect large regression in other languages — but the goal was a small, fast Polish Bielik.

English benchmarks (EN / math / code)

Generative, via chat endpoint, identical setup for both models (n=120 for ARC/GSM8K, 164 for HumanEval):

benchmark Bielik-fit 6B Minitron 7B diff
ARC-Challenge (EN reasoning) 61.7 81.7 −20.0
GSM8K (math) 50.0 69.2 −19.2
HumanEval pass@1 (code) 34.8 70.1 −35.3

Here fit-6B clearly lags — confirming the whole narrative: layer cutting costs deep reasoning, math and code the most (same cause as belebele), and training was mostly Polish. As intended: fit-6B is a small, fast model for short Polish tasks — not for reasoning, code or English.

Tool-calling & RAG (vs Minitron 7B)

capability Bielik-fit 6B Minitron 7B
Tool-calling (BFCL AST) 0.78 0.94
RAG grounded (EM) 0.60 0.69
RAG abstention (impossible) 0.20 0.53

Cutting preserved routing (function choice — 0 name errors) but cost argument precision and self-control (recognizing "I don't know"). Consistent with belebele: pruning cuts depth, not surface knowledge.

Speed — fit-6B vs Minitron 7B (R9700 / RADV Vulkan, gfx1201)

llama-bench, t/s. pp512 = prefill, tg128 = decode, @dN = at context N tokens.

Decode (tg128):

context fit-6B Q4 Minitron 7B Q4 fit-6B Q8 Minitron 7B Q8
0 126 102 85 68
2048 116 94 80 65
8192 91 73 68 54

Prefill (pp512):

context fit-6B Q4 Minitron 7B Q4 fit-6B Q8 Minitron 7B Q8
0 3940 3038 4726 3822
8192 1718 1345 1830 1456

Sizes: fit-6B Q4 3.39 GiB / Q8 5.97 GiB · Minitron 7B Q4 4.19 GiB / Q8 7.40 GiB.

At the same quant fit-6B is ~24–30% faster than Minitron 7B (effect of −20% layers / −19% params: 6.03B vs 7.48B). Q4 = faster decode (memory-bound), Q8 = faster prefill (compute-bound, coopmat). For interactive chat on weaker GPUs → Q4.

Recommendation

The model works best at temperature 0–0.2. There it matches full Minitron 7B on normal and hard Polish knowledge (see appendix), at −20% size and ~25% faster decode. A compressed model has "thinner" confidence, so high temperature lets sampling derail it more easily. For long-form reasoning / long context, use the full model.

This project is purely experimental and educational. Coding assistance: Claude Code. Not responsible for it. :)

(For the temperature-by-temperature factual test appendix — fit-6B vs Minitron 7B across 40 questions in 4 difficulty tiers — see the Polish appendix above; the OK/HAL marks are language-agnostic.)