---
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)
```bash
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-Instruct` — **podlega licencji modelu bazowego** (sprawdź u źródła przed użyciem komercyjnym). / Derived from `speakleash/Bielik-Minitron-7B-v3.0-Instruct` — **subject 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.)