lmeval
This commit is contained in:
parent
d4b00793b3
commit
581ae22dbb
802
README_lmeval_updated.md
Normal file
802
README_lmeval_updated.md
Normal file
@ -0,0 +1,802 @@
|
||||
# Instruction fine-tuning slovenského Mistral 7B modelu
|
||||
|
||||
## Použitý model
|
||||
|
||||
Ako základný model bol použitý:
|
||||
|
||||
- `slovak-nlp/mistral-sk-7b`
|
||||
|
||||
Výsledný adaptér z prvého experimentu je dostupný na Hugging Face:
|
||||
|
||||
- `Jakub1320/mistral-sk-7b-slovak-alpaca-qlora`
|
||||
|
||||
---
|
||||
|
||||
## Hardvér
|
||||
|
||||
Experimenty boli realizované na dvoch serveroch.
|
||||
|
||||
### Titan
|
||||
|
||||
- 2× NVIDIA TITAN RTX
|
||||
- 24 GB VRAM na GPU
|
||||
- výpočty v `fp16`
|
||||
|
||||
### Hruška
|
||||
|
||||
- 2× NVIDIA RTX A4500
|
||||
- približne 20 GB VRAM na GPU
|
||||
- výpočty v `bf16`
|
||||
|
||||
---
|
||||
|
||||
# Prvý experiment – Slovak Alpaca
|
||||
|
||||
## Použitý dataset
|
||||
|
||||
Na supervised fine-tuning bol v prvom experimente použitý slovenský inštrukčný dataset:
|
||||
|
||||
- `saillab/alpaca-slovak-cleaned`
|
||||
|
||||
Dataset obsahuje polia:
|
||||
|
||||
- `instruction`
|
||||
- `input`
|
||||
- `output`
|
||||
|
||||
Dáta boli formátované v Alpaca štýle:
|
||||
|
||||
```text
|
||||
### Inštrukcia:
|
||||
...
|
||||
|
||||
### Vstup:
|
||||
...
|
||||
|
||||
### Odpoveď:
|
||||
...
|
||||
```
|
||||
|
||||
## Metóda dotrénovania
|
||||
|
||||
Model bol dotrénovaný pomocou supervised fine-tuningu cez:
|
||||
|
||||
- Unsloth
|
||||
- TRL `SFTTrainer`
|
||||
- PEFT LoRA
|
||||
- QLoRA štýl trénovania
|
||||
|
||||
Výsledkom tréningu je PEFT LoRA adaptér, ktorý sa pripája k základnému modelu `slovak-nlp/mistral-sk-7b`.
|
||||
|
||||
## Hlavné hyperparametre prvého experimentu
|
||||
|
||||
| Parameter | Hodnota |
|
||||
|---|---:|
|
||||
| Epochs | 1 |
|
||||
| Max sequence length | 1024 |
|
||||
| Batch size | 1 |
|
||||
| Gradient accumulation | 8 |
|
||||
| Effective batch size | 8 |
|
||||
| Learning rate | 2e-4 |
|
||||
| Optimizer | AdamW 8-bit |
|
||||
| Scheduler | cosine |
|
||||
| Warmup steps | 150 |
|
||||
| LoRA rank | 16 |
|
||||
| LoRA alpha | 32 |
|
||||
| LoRA dropout | 0.05 |
|
||||
| Quantization | 4-bit |
|
||||
| Compute type | fp16 |
|
||||
|
||||
Použité LoRA cieľové moduly:
|
||||
|
||||
```text
|
||||
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
||||
```
|
||||
|
||||
## Vyhodnotenie pomocou vlastného evaluačného skriptu
|
||||
|
||||
Model bol vyhodnotený na testovacích príkladoch z datasetu `saillab/alpaca-slovak-cleaned` pomocou metrík ROUGE, BLEU, eval loss a perplexity.
|
||||
|
||||
| Metrika | Výsledok |
|
||||
|---|---:|
|
||||
| ROUGE-1 | 0.3710 |
|
||||
| ROUGE-2 | 0.1702 |
|
||||
| ROUGE-L | 0.2732 |
|
||||
| BLEU | 6.2850 |
|
||||
| Eval loss | 0.8081 |
|
||||
| Perplexity | 2.2435 |
|
||||
|
||||
## Vyhodnotenie pomocou lm-evaluation-harness
|
||||
|
||||
Hodnotený bol PEFT LoRA adaptér pripojený k základnému modelu:
|
||||
|
||||
```text
|
||||
slovak-nlp/mistral-sk-7b
|
||||
+
|
||||
Jakub1320/mistral-sk-7b-slovak-alpaca-qlora
|
||||
```
|
||||
|
||||
### Použité benchmarky
|
||||
|
||||
| Benchmark | Popis |
|
||||
|---|---|
|
||||
| `arc_sk` | slovenské vedecké/školské otázky s výberom odpovede |
|
||||
| `hellaswag_sk` | commonsense reasoning a výber najpravdepodobnejšieho pokračovania |
|
||||
| `m_mmlu_sk` | slovenský všeobecný vedomostný benchmark |
|
||||
| `truthfulqa_sk_mc1` | hodnotenie pravdivosti odpovedí, multiple choice MC1 |
|
||||
| `truthfulqa_sk_mc2` | hodnotenie pravdivosti odpovedí, multiple choice MC2 |
|
||||
| `sklegal` | slovenské právne otázky s výberom odpovede |
|
||||
| `skquad` | slovenský question-answering benchmark |
|
||||
|
||||
Úlohy `sklegal` a `skquad` boli doplnené ako custom tasky.
|
||||
|
||||
## Výsledky lm-evaluation-harness
|
||||
|
||||
Poznámka: výsledky `arc_sk`, `hellaswag_sk`, `m_mmlu_sk` a TruthfulQA pochádzajú z prvého behu. `sklegal` a `skquad` boli následne dopočítané v druhom samostatnom behu nad tým istým Alpaca QLoRA adaptérom, pretože v pôvodnom behu tieto dve custom úlohy nefungovali.
|
||||
|
||||
| Task | Počet vzoriek | Metrika | Výsledok |
|
||||
|---|---:|---|---:|
|
||||
| `arc_sk` | 1169 | acc | 0.3259 |
|
||||
| `arc_sk` | 1169 | acc_norm | 0.3473 |
|
||||
| `hellaswag_sk` | 9485 | acc | 0.4134 |
|
||||
| `hellaswag_sk` | 9485 | acc_norm | 0.5106 |
|
||||
| `m_mmlu_sk` | 13062 | acc | 0.2928 |
|
||||
| `truthfulqa_sk_mc1` | 778 | acc | 0.2391 |
|
||||
| `truthfulqa_sk_mc2` | 778 | acc | 0.3942 |
|
||||
| `sklegal` | 1334 | acc | 0.2841 |
|
||||
| `sklegal` | 1334 | acc_norm | 0.4693 |
|
||||
| `skquad` | 9583 | exact | 1.9722 |
|
||||
| `skquad` | 9583 | f1 | 27.7994 |
|
||||
| `skquad` | 9583 | HasAns_exact | 2.4106 |
|
||||
| `skquad` | 9583 | HasAns_f1 | 34.1456 |
|
||||
| `skquad` | 9583 | NoAns_exact | 0.0561 |
|
||||
| `skquad` | 9583 | NoAns_f1 | 0.0561 |
|
||||
| `skquad` | 9583 | best_exact | 18.6163 |
|
||||
| `skquad` | 9583 | best_f1 | 28.3012 |
|
||||
|
||||
---
|
||||
|
||||
# Experiment so strojovým prekladom datasetu
|
||||
|
||||
Cieľom experimentu bolo vyskúšať postup, pri ktorom sa anglické polia datasetu:
|
||||
|
||||
- `instruction`
|
||||
- `input`
|
||||
- `output`
|
||||
|
||||
automaticky preložia do slovenčiny a uložia do novej dátovej množiny so zachovaním pôvodnej štruktúry.
|
||||
|
||||
Výstupný formát obsahoval pôvodné anglické texty aj slovenské preklady:
|
||||
|
||||
```json
|
||||
{
|
||||
"instruction_en": "...",
|
||||
"input_en": "...",
|
||||
"output_en": "...",
|
||||
"instruction_sk": "...",
|
||||
"input_sk": "...",
|
||||
"output_sk": "..."
|
||||
}
|
||||
```
|
||||
|
||||
Vznikla preložená vzorka datasetu s 1000 príkladmi.
|
||||
|
||||
Umiestnenie:
|
||||
|
||||
```text
|
||||
strojovy_preklad/translated_datasets/alpaca_translated_en_sk_1000.jsonl
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Experiment s datasetom Aya Collection
|
||||
|
||||
Pre ďalšie experimenty bol použitý dataset:
|
||||
|
||||
- `CohereLabs/aya_collection_language_split`
|
||||
- subset: `slovak`
|
||||
|
||||
Používané polia boli mapované nasledovne:
|
||||
|
||||
| Pôvodné pole | Použitie pri tréningu |
|
||||
|---|---|
|
||||
| `inputs` | prompt / inštrukcia |
|
||||
| `targets` | odpoveď |
|
||||
|
||||
---
|
||||
|
||||
|
||||
# Prvý dlhý Aya tréning na serveri Titan – manuálne ukončený pokus
|
||||
|
||||
Pred úspešným 225 000-krokovým tréningom bol na serveri Titan spustený prvý dlhý tréning nad slovenskou časťou datasetu Aya Collection.
|
||||
|
||||
Tento experiment bežal na jednej NVIDIA TITAN RTX a používal streaming datasetu.
|
||||
Konfiguráčny súbor je
|
||||
```text
|
||||
train_mistral_sk_aya_slovak_full_lora.yaml
|
||||
```
|
||||
|
||||
## Konfigurácia prvého dlhého tréningu
|
||||
|
||||
| Parameter | Hodnota |
|
||||
|---|---:|
|
||||
| Base model | `slovak-nlp/mistral-sk-7b` |
|
||||
| Dataset | `aya_slovak_full` |
|
||||
| Template | `alpaca` |
|
||||
| Fine-tuning | LoRA |
|
||||
| GPU | 1× NVIDIA TITAN RTX |
|
||||
| Max sequence length | 1024 |
|
||||
| Streaming | áno |
|
||||
| Streaming buffer | 16 384 |
|
||||
| Batch size per device | 1 |
|
||||
| Gradient accumulation | 4 |
|
||||
| Effective batch size | 4 |
|
||||
| Max steps | 1 037 000 |
|
||||
| Learning rate | 2e-4 |
|
||||
| Scheduler | cosine |
|
||||
| Warmup steps | 500 |
|
||||
| Max grad norm | 1.0 |
|
||||
| Optimizer | AdamW 8-bit |
|
||||
| LoRA rank | 16 |
|
||||
| LoRA alpha | 32 |
|
||||
| LoRA dropout | 0.05 |
|
||||
| Compute type | fp16 |
|
||||
| Unsloth | áno |
|
||||
| Unsloth gradient checkpointing | áno |
|
||||
| Validation size | 1000 |
|
||||
| Eval interval | každých 50 000 krokov |
|
||||
| Save interval | každých 10 000 krokov |
|
||||
| Save total limit | 2 |
|
||||
|
||||
Použité LoRA cieľové moduly:
|
||||
|
||||
```text
|
||||
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
||||
```
|
||||
|
||||
|
||||
|
||||
Konfigurácia počítala približne s jedným prechodom cez celý slovenský Aya subset:
|
||||
|
||||
```text
|
||||
4 148 187 príkladov / effective batch 4 ≈ 1 037 000 krokov
|
||||
```
|
||||
|
||||
## Dôvod manuálneho ukončenia
|
||||
|
||||
Tréning technicky nespadol. Po približne 94 000 krokoch sa však začala výrazne zhoršovať stabilita optimalizácie.
|
||||
|
||||
V logu sa objavili extrémne hodnoty `grad_norm`, napríklad:
|
||||
|
||||
```text
|
||||
grad_norm = 125.6
|
||||
grad_norm = 105.9
|
||||
grad_norm = 24000
|
||||
grad_norm = 772.1
|
||||
grad_norm = 11410
|
||||
grad_norm = 2714
|
||||
grad_norm = nan
|
||||
```
|
||||
|
||||
Súčasne začal výrazne kolísať aj training loss, napríklad:
|
||||
|
||||
```text
|
||||
loss = 3.232
|
||||
loss = 7.081
|
||||
loss = 5.206
|
||||
loss = 14.82
|
||||
```
|
||||
|
||||
Neskôr sa v logu objavila aj kombinácia:
|
||||
|
||||
```text
|
||||
loss = 0.0
|
||||
grad_norm = nan
|
||||
```
|
||||
|
||||
Keďže tréning vykazoval známky numerickej nestability, bol manuálne ukončený približne pri kroku `104 238` z plánovaných `1 037 000`, teda približne po 10 % tréningu.
|
||||
|
||||
V čase ukončenia bol runtime približne:
|
||||
|
||||
```text
|
||||
44 hodín 48 minút
|
||||
```
|
||||
|
||||
Tento experiment ukázal, že pôvodné nastavenie nebolo vhodné na pokračovanie v takto dlhom tréningu bez ďalších úprav.
|
||||
|
||||
---
|
||||
|
||||
# Dlhý Aya tréning na serveri Titan
|
||||
|
||||
Na serveri Titan bol spustený dlhý LoRA fine-tuning nad slovenskou časťou Aya Collection.
|
||||
|
||||
Na rozdiel od prvého QLoRA experimentu nebola použitá 4-bit kvantizácia.
|
||||
|
||||
## Hlavná konfigurácia
|
||||
|
||||
| Parameter | Hodnota |
|
||||
|---|---:|
|
||||
| Base model | `slovak-nlp/mistral-sk-7b` |
|
||||
| Dataset | Aya Collection – Slovak |
|
||||
| Fine-tuning | LoRA |
|
||||
| Unsloth | áno |
|
||||
| GPU | 2× NVIDIA TITAN RTX |
|
||||
| Batch size per device | 1 |
|
||||
| Gradient accumulation | 8 |
|
||||
| Effective batch size | 16 |
|
||||
| Max sequence length | 1024 |
|
||||
| Max steps | 225 000 |
|
||||
| Learning rate | 5e-5 |
|
||||
| Scheduler | cosine |
|
||||
| Warmup steps | 10 000 |
|
||||
| LoRA rank | 16 |
|
||||
| LoRA alpha | 16 |
|
||||
| LoRA dropout | 0.0 |
|
||||
| Compute type | fp16 |
|
||||
| Streaming | áno |
|
||||
|
||||
Použité LoRA cieľové moduly:
|
||||
|
||||
```text
|
||||
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
||||
```
|
||||
|
||||
Tréning úspešne dobehol do kroku `225000`.
|
||||
|
||||
Pri effective batch size 16 bolo do tohto bodu spracovaných približne:
|
||||
|
||||
```text
|
||||
225 000 × 16 = 3 600 000 príkladov
|
||||
```
|
||||
|
||||
To predstavuje približne 86,8 % slovenského Aya datasetu s približne 4,148 milióna príkladmi. Nešlo teda o úplný jeden epoch.
|
||||
|
||||
## Eval loss počas Titan tréningu
|
||||
|
||||
| Krok | Eval loss |
|
||||
|---:|---:|
|
||||
| 25 000 | 1.0599 |
|
||||
| 50 000 | 1.174 |
|
||||
| 75 000 | 1.284 |
|
||||
| 100 000 | 1.429 |
|
||||
| 125 000 | 1.342 |
|
||||
| 150 000 | 1.323 |
|
||||
| 175 000 | 1.321 |
|
||||
| 200 000 | 1.213 |
|
||||
| 225 000 | 1.221 |
|
||||
|
||||
Najnižší validačný loss bol zaznamenaný pri kroku `25000`. Tento checkpoint bol samostatne zachovaný pre ďalšie benchmarkové porovnanie s finálnym modelom.
|
||||
|
||||
---
|
||||
|
||||
# Hruška – 10 porovnávacích experimentov
|
||||
|
||||
Na serveri Hruška bola vytvorená séria menších experimentov s cieľom porovnať vplyv vybraných hyperparametrov LoRA fine-tuningu.
|
||||
|
||||
Cieľom bolo porovnať vplyv:
|
||||
|
||||
- learning rate,
|
||||
- LoRA rank,
|
||||
- LoRA alpha,
|
||||
- optimalizátora,
|
||||
- LoRA target modulov,
|
||||
- batch size a gradient accumulation.
|
||||
|
||||
## Fixný dataset
|
||||
|
||||
Pre férové porovnanie všetkých experimentov bol vytvorený fixný dataset:
|
||||
|
||||
```text
|
||||
aya_slovak_100k_fixed.jsonl
|
||||
```
|
||||
|
||||
Dataset obsahuje presne `100 000` slovenských príkladov z Aya Collection.
|
||||
|
||||
Pri jeho vytvorení bol použitý fixný seed. Samotné experimenty už nepoužívali streaming, takže všetky konfigurácie pracovali s rovnakým poolom dát.
|
||||
|
||||
Dáta boli uložené vo formáte:
|
||||
|
||||
```json
|
||||
{
|
||||
"instruction": "...",
|
||||
"input": "",
|
||||
"output": "..."
|
||||
}
|
||||
```
|
||||
|
||||
Pri tréningu bolo `1000` príkladov použitých na validáciu.
|
||||
|
||||
## Spoločné nastavenia experimentov
|
||||
|
||||
| Parameter | Hodnota |
|
||||
|---|---:|
|
||||
| Base model | `slovak-nlp/mistral-sk-7b` |
|
||||
| Dataset | `aya_slovak_100k_fixed` |
|
||||
| GPU | 2× NVIDIA RTX A4500 |
|
||||
| Fine-tuning | LoRA |
|
||||
| Unsloth | áno |
|
||||
| Streaming | nie |
|
||||
| Max sequence length | 1024 |
|
||||
| Max steps | 6250 |
|
||||
| Effective batch size | 16 |
|
||||
| Scheduler | cosine |
|
||||
| Warmup steps | 500 |
|
||||
| Max grad norm | 0.5 |
|
||||
| LoRA dropout | 0.0 |
|
||||
| Compute type | bf16 |
|
||||
| Eval interval | každých 1250 krokov |
|
||||
| Validation size | 1000 |
|
||||
| Seed | 42 |
|
||||
|
||||
Štandardné LoRA cieľové moduly:
|
||||
|
||||
```text
|
||||
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
|
||||
```
|
||||
|
||||
Výnimkou je experiment 08, ktorý používa iba:
|
||||
|
||||
```text
|
||||
q_proj, k_proj, v_proj, o_proj
|
||||
```
|
||||
|
||||
## Porovnávané konfigurácie
|
||||
|
||||
| Experiment | Hlavná zmena |
|
||||
|---|---|
|
||||
| `01_baseline_r16_a16_lr5e5_adamw` | baseline: rank 16, alpha 16, LR 5e-5, AdamW |
|
||||
| `02_optimizer_adamw8bit_r16_a16_lr5e5` | AdamW 8-bit |
|
||||
| `03_rank8_a16_lr5e5` | LoRA rank 8 |
|
||||
| `04_rank32_a32_lr5e5` | LoRA rank 32, alpha 32 |
|
||||
| `05_r16_alpha32_lr5e5` | alpha 32 pri rank 16 |
|
||||
| `06_lr1e4_r16_a16` | learning rate 1e-4 |
|
||||
| `07_lr2e5_r16_a16` | learning rate 2e-5 |
|
||||
| `08_attention_only_r16_a16_lr5e5` | LoRA iba na attention projekciách |
|
||||
| `09_batch2_accum4_r16_a16_lr5e5` | batch size 2, gradient accumulation 4 |
|
||||
| `10_r16_a32_lr1e4` | kombinácia alpha 32 + learning rate 1e-4 |
|
||||
|
||||
## Výsledky Hruška experimentov
|
||||
|
||||
| Experiment | Train loss | Eval loss | Runtime |
|
||||
|---|---:|---:|---:|
|
||||
| `01_baseline_r16_a16_lr5e5_adamw` | 0.9290 | 0.7567 | 7:18:05 |
|
||||
| `02_optimizer_adamw8bit_r16_a16_lr5e5` | 0.9248 | 0.7521 | 7:20:23 |
|
||||
| `03_rank8_a16_lr5e5` | 0.9308 | 0.7586 | 7:16:23 |
|
||||
| `04_rank32_a32_lr5e5` | 0.9003 | 0.7292 | 7:22:33 |
|
||||
| `05_r16_alpha32_lr5e5` | 0.9026 | 0.7323 | 7:17:44 |
|
||||
| `06_lr1e4_r16_a16` | 0.8890 | 0.7184 | 7:17:30 |
|
||||
| `07_lr2e5_r16_a16` | 0.9674 | 0.7912 | 7:18:25 |
|
||||
| `08_attention_only_r16_a16_lr5e5` | 0.9808 | 0.8094 | 6:51:25 |
|
||||
| `09_batch2_accum4_r16_a16_lr5e5` | 0.9290 | 0.7563 | 8:24:57 |
|
||||
| `10_r16_a32_lr1e4` | 0.8612 | 0.6918 | približne 7:15 h |
|
||||
|
||||
Najnižší finálny `eval_loss` dosiahol experiment:
|
||||
|
||||
```text
|
||||
10_r16_a32_lr1e4
|
||||
```
|
||||
|
||||
s hodnotou:
|
||||
|
||||
```text
|
||||
eval_loss = 0.6918
|
||||
```
|
||||
|
||||
V tomto experimente bola použitá kombinácia:
|
||||
|
||||
```text
|
||||
LoRA rank = 16
|
||||
LoRA alpha = 32
|
||||
learning rate = 1e-4
|
||||
optimizer = AdamW
|
||||
effective batch size = 16
|
||||
```
|
||||
|
||||
## Pozorované rozdiely
|
||||
|
||||
Z doterajších výsledkov:
|
||||
|
||||
- zvýšenie learning rate z `5e-5` na `1e-4` znížilo eval loss z `0.7567` na `0.7184`,
|
||||
- zvýšenie LoRA alpha z `16` na `32` pri rank 16 znížilo eval loss na `0.7323`,
|
||||
- kombinácia `alpha=32` a `learning_rate=1e-4` dosiahla najnižší eval loss `0.6918`,
|
||||
- rank 32 priniesol eval loss `0.7292`,
|
||||
- rank 8 dosiahol výsledok veľmi blízky baseline,
|
||||
- attention-only LoRA bola rýchlejšia, ale mala vyšší eval loss,
|
||||
- zmena z batch size 1 / accumulation 8 na batch size 2 / accumulation 4 nepriniesla zlepšenie validačného lossu ani runtime.
|
||||
|
||||
---
|
||||
|
||||
# Súbory Hruška experimentov
|
||||
|
||||
Výsledky experimentov sú uložené v priečinku:
|
||||
|
||||
```text
|
||||
hruska_10_experiments_results/
|
||||
```
|
||||
|
||||
Súčasťou sú:
|
||||
|
||||
```text
|
||||
hruska_10_experiments_results/
|
||||
├── aya_slovak_100k_fixed/
|
||||
├── hruska_10_experiments_results/
|
||||
│ ├── 01_baseline_r16_a16_lr5e5_adamw/
|
||||
│ ├── 02_optimizer_adamw8bit_r16_a16_lr5e5/
|
||||
│ ├── 03_rank8_a16_lr5e5/
|
||||
│ ├── 04_rank32_a32_lr5e5/
|
||||
│ ├── 05_r16_alpha32_lr5e5/
|
||||
│ ├── 06_lr1e4_r16_a16/
|
||||
│ ├── 07_lr2e5_r16_a16/
|
||||
│ ├── 08_attention_only_r16_a16_lr5e5/
|
||||
│ ├── 09_batch2_accum4_r16_a16_lr5e5/
|
||||
│ └── 10_r16_a32_lr1e4/
|
||||
├── hruska_experiment_eval_loss_ranking.png
|
||||
├── hruska_experiment_train_loss_ranking.png
|
||||
└── hruska_experiment_summary.csv
|
||||
```
|
||||
|
||||
Každý experiment obsahuje:
|
||||
|
||||
```text
|
||||
<experiment>.yaml
|
||||
training.log
|
||||
training_loss.png
|
||||
training_eval_loss.png
|
||||
```
|
||||
---
|
||||
|
||||
## Reprodukcia tréningových experimentov
|
||||
|
||||
Jednotlivé experimenty je možné zreplikovať pomocou uložených YAML konfiguračných súborov.
|
||||
|
||||
Pred spustením tréningu je potrebné aktivovať prostredie s LLaMA-Factory a prejsť do jeho adresára:
|
||||
|
||||
```bash
|
||||
conda activate llama_factory_unsloth
|
||||
cd /home/schwarc/LLaMA-Factory
|
||||
```
|
||||
|
||||
Pre 2-GPU experimenty bol tréning spúšťaný pomocou:
|
||||
|
||||
```bash
|
||||
CUDA_VISIBLE_DEVICES=0,1 FORCE_TORCHRUN=1 \
|
||||
llamafactory-cli train /cesta/ku/configu.yaml
|
||||
```
|
||||
|
||||
Napríklad pre experiment:
|
||||
|
||||
```text
|
||||
10_r16_a32_lr1e4
|
||||
```
|
||||
|
||||
možno použiť:
|
||||
|
||||
```bash
|
||||
CUDA_VISIBLE_DEVICES=0,1 FORCE_TORCHRUN=1 \
|
||||
llamafactory-cli train \
|
||||
/home/schwarc/diplomovka/configs/hruska_compare9_100k_fixed/10_r16_a32_lr1e4.yaml
|
||||
```
|
||||
|
||||
Ak má byť terminálový výstup zároveň uložený do logu:
|
||||
|
||||
```bash
|
||||
CUDA_VISIBLE_DEVICES=0,1 FORCE_TORCHRUN=1 \
|
||||
llamafactory-cli train \
|
||||
/home/schwarc/diplomovka/configs/hruska_compare9_100k_fixed/10_r16_a32_lr1e4.yaml \
|
||||
2>&1 | tee /home/schwarc/diplomovka/logs/10_r16_a32_lr1e4.log
|
||||
```
|
||||
|
||||
|
||||
|
||||
# Výsledky benchmarkovania pomocou lm-evaluation-harness
|
||||
|
||||
Po dokončení tréningov boli vyhodnotené:
|
||||
|
||||
- všetkých 10 Hruška experimentov,
|
||||
- Titan checkpoint po 25 000 krokoch,
|
||||
- finálny Titan model po 225 000 krokoch,
|
||||
- starší QLoRA model trénovaný na `saillab/alpaca-slovak-cleaned`.
|
||||
- Kompletné výsledky a výstupné súbory z evaluácie pomocou lm-evaluation-harness sú dostupné v priečinku lmeval/
|
||||
|
||||
Použité benchmarky:
|
||||
|
||||
```text
|
||||
arc_sk
|
||||
hellaswag_sk
|
||||
m_mmlu_sk
|
||||
truthfulqa_sk_mc1
|
||||
truthfulqa_sk_mc2
|
||||
sklegal
|
||||
skquad
|
||||
```
|
||||
|
||||
Počet hodnotených vzoriek bol:
|
||||
|
||||
| Benchmark | Počet vzoriek |
|
||||
|---|---:|
|
||||
| `arc_sk` | 1169 |
|
||||
| `hellaswag_sk` | 9485 |
|
||||
| `m_mmlu_sk` | 13062 |
|
||||
| `truthfulqa_sk_mc1` | 778 |
|
||||
| `truthfulqa_sk_mc2` | 778 |
|
||||
| `sklegal` | 1334 |
|
||||
| `skquad` | 9583 |
|
||||
|
||||
Pri úlohách, kde `lm-evaluation-harness` poskytuje `acc` aj `acc_norm`, je v súhrnných tabuľkách použitá najmä hodnota `acc_norm`. Pri `skquad` je ako hlavná súhrnná metrika použitá hodnota `F1`.
|
||||
|
||||
Hruška benchmarky boli počítané v `bfloat16`, Titan a starší Alpaca model v `float16`. Batch size pri evaluácii bol 1.
|
||||
|
||||
## Poznámka k staršiemu Alpaca benchmarku
|
||||
|
||||
Starší model `Jakub1320/mistral-sk-7b-slovak-alpaca-qlora` bol vyhodnotený v dvoch behoch. V prvom boli vyhodnotené:
|
||||
|
||||
```text
|
||||
arc_sk
|
||||
hellaswag_sk
|
||||
m_mmlu_sk
|
||||
truthfulqa_sk_mc1
|
||||
truthfulqa_sk_mc2
|
||||
```
|
||||
|
||||
Úlohy `sklegal` a `skquad` vtedy nefungovali, preto boli neskôr spustené samostatne. Výsledky uvedené v README sú zlúčením týchto dvoch behov nad tým istým adaptérom.
|
||||
|
||||
Pri porovnávaní starého Alpaca modelu s novšími behmi treba brať do úvahy, že bol použitý iný softvérový stav. Najdôležitejšie je, že starý výsledok `truthfulqa_sk_mc2` má v uloženom výsledku verziu úlohy 2.0, zatiaľ čo novšie Hruška a Titan behy používajú verziu 1.0. Preto výsledok MC2 starého Alpaca modelu nie je vhodné považovať za úplne priamo porovnateľný s novými behmi. Ostatné hlavné verzie benchmarkov sa zhodujú.
|
||||
|
||||
---
|
||||
|
||||
## Výsledky 10 Hruška experimentov
|
||||
|
||||
| Experiment | Eval loss | ARC acc_norm | HellaSwag acc_norm | M-MMLU acc | TQA MC1 | TQA MC2 | SKLegal acc_norm | SKQuad F1 |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| `01_baseline_r16_a16_lr5e5_adamw` | 0.7567 | 0.3405 | 0.5209 | 0.3550 | 0.1799 | 0.3439 | 0.4685 | 36.6797 |
|
||||
| `02_optimizer_adamw8bit_r16_a16_lr5e5` | 0.7521 | 0.3379 | 0.5212 | 0.3544 | 0.1928 | 0.3537 | 0.4715 | 36.2178 |
|
||||
| `03_rank8_a16_lr5e5` | 0.7586 | 0.3311 | 0.5167 | 0.3455 | 0.1838 | 0.3425 | 0.4715 | 36.3638 |
|
||||
| `04_rank32_a32_lr5e5` | 0.7292 | 0.3353 | 0.5201 | 0.3450 | 0.1902 | 0.3367 | 0.4730 | 36.0228 |
|
||||
| `05_r16_alpha32_lr5e5` | 0.7323 | 0.3336 | 0.5190 | 0.3571 | 0.1967 | 0.3555 | 0.4670 | 37.8735 |
|
||||
| `06_lr1e4_r16_a16` | 0.7184 | 0.3311 | 0.5207 | 0.3550 | 0.1902 | 0.3473 | 0.4655 | 37.5796 |
|
||||
| `07_lr2e5_r16_a16` | 0.7912 | 0.3276 | 0.5225 | 0.3379 | 0.1671 | 0.3246 | 0.4723 | 33.8381 |
|
||||
| `08_attention_only_r16_a16_lr5e5` | 0.8094 | 0.3524 | 0.5218 | 0.3448 | 0.1877 | 0.3674 | 0.4768 | 43.3752 |
|
||||
| `09_batch2_accum4_r16_a16_lr5e5` | 0.7563 | 0.3379 | 0.5209 | 0.3514 | 0.1864 | 0.3402 | 0.4693 | 35.3128 |
|
||||
| `10_r16_a32_lr1e4` | 0.6918 | 0.3293 | 0.5157 | 0.3448 | 0.2057 | 0.3480 | 0.4618 | 37.7561 |
|
||||
|
||||
### Najlepší výsledok Hruška podľa jednotlivých benchmarkov
|
||||
|
||||
| Metrika | Najlepší Hruška experiment | Výsledok |
|
||||
|---|---|---:|
|
||||
| ARC acc_norm | `08_attention_only_r16_a16_lr5e5` | 0.3524 |
|
||||
| HellaSwag acc_norm | `07_lr2e5_r16_a16` | 0.5225 |
|
||||
| M-MMLU acc | `05_r16_alpha32_lr5e5` | 0.3571 |
|
||||
| TruthfulQA MC1 | `10_r16_a32_lr1e4` | 0.2057 |
|
||||
| TruthfulQA MC2 | `08_attention_only_r16_a16_lr5e5` | 0.3674 |
|
||||
| SKLegal acc_norm | `08_attention_only_r16_a16_lr5e5` | 0.4768 |
|
||||
| SKQuad F1 | `08_attention_only_r16_a16_lr5e5` | 43.3752 |
|
||||
|
||||
|
||||
Najvýraznejší výsledok dosiahol experiment:
|
||||
|
||||
```text
|
||||
08_attention_only_r16_a16_lr5e5
|
||||
```
|
||||
|
||||
Ten mal síce zo všetkých 10 experimentov najvyšší, teda najhorší validačný `eval_loss = 0.8094`, ale súčasne dosiahol najlepší Hruška výsledok na:
|
||||
|
||||
- `arc_sk` podľa `acc_norm`,
|
||||
- `truthfulqa_sk_mc2`,
|
||||
- `sklegal` podľa `acc_norm`,
|
||||
- `skquad` podľa F1.
|
||||
|
||||
Na `skquad` dosiahol F1 `43.3752`, zatiaľ čo baseline experiment 01 dosiahol `36.6797`.
|
||||
|
||||
Naopak experiment:
|
||||
|
||||
```text
|
||||
10_r16_a32_lr1e4
|
||||
```
|
||||
|
||||
mal najlepší validačný `eval_loss = 0.6918`, ale nebol najlepší vo väčšine externých benchmarkov. Jeho najlepší výsledok v rámci Hruška experimentov bol `truthfulqa_sk_mc1 = 0.2057`.
|
||||
|
||||
To ukazuje dôležitý rozdiel medzi validačným lossom a downstream benchmarkmi: nižší loss na validačnej časti Aya datasetu neznamená automaticky najlepší výkon na nezávislých úlohách. Validačný loss meria predovšetkým prispôsobenie dátovej distribúcii použitej pri tréningu, zatiaľ čo benchmarky merajú odlišné schopnosti modelu.
|
||||
|
||||
Ďalšie pozorovania:
|
||||
|
||||
- `07_lr2e5_r16_a16` dosiahol najlepší HellaSwag `acc_norm = 0.5225`, ale mal slabší eval loss `0.7912`.
|
||||
- `05_r16_alpha32_lr5e5` dosiahol najlepší M-MMLU výsledok `0.3571`.
|
||||
- AdamW 8-bit v experimente 02 dal benchmarkové výsledky veľmi podobné klasickému AdamW baseline.
|
||||
- zmena batch size / gradient accumulation v experimente 09 nepriniesla jasné benchmarkové zlepšenie,
|
||||
- rozdiely medzi viacerými Hruška modelmi na multiple-choice úlohách sú malé, preto ich netreba interpretovať ako zásadné bez ďalších behov alebo štatistického testovania,
|
||||
- najvýraznejšie oddelenie experimentu 08 je na `skquad`, kde je rozdiel oproti ostatným modelom podstatne väčší.
|
||||
|
||||
---
|
||||
|
||||
## Porovnanie Titan checkpointu 25k a finálneho modelu 225k
|
||||
|
||||
Checkpoint 25 000 zodpovedá približne:
|
||||
|
||||
```text
|
||||
25 000 × effective batch size 16 = 400 000 spracovaných tréningových príkladov
|
||||
```
|
||||
|
||||
Finálny krok 225 000 zodpovedá približne:
|
||||
|
||||
```text
|
||||
225 000 × 16 = 3 600 000 spracovaných tréningových príkladov
|
||||
```
|
||||
|
||||
Slovenská časť Aya obsahuje približne 4,148 milióna príkladov, takže 225 000 krokov predstavuje približne 86,8 % jedného úplného prechodu datasetom, nie celý epoch.
|
||||
|
||||
| Metrika | Titan 25k | Titan 225k | Zmena 225k − 25k |
|
||||
|---|---:|---:|---:|
|
||||
| ARC acc_norm | 0.3251 | 0.3447 | +1.97 p. b. |
|
||||
| HellaSwag acc_norm | 0.4943 | 0.4793 | -1.50 p. b. |
|
||||
| M-MMLU acc | 0.3342 | 0.2719 | -6.22 p. b. |
|
||||
| TruthfulQA MC1 | 0.1761 | 0.2005 | +2.44 p. b. |
|
||||
| TruthfulQA MC2 | 0.3251 | 0.3613 | +3.63 p. b. |
|
||||
| SKLegal acc_norm | 0.4588 | 0.4393 | -1.95 p. b. |
|
||||
| SKQuad F1 | 25.8678 | 35.0471 | +9.1793 bodu |
|
||||
|
||||
|
||||
Výsledok Titan porovnania nie je jednoznačný.
|
||||
|
||||
Finálny 225k model oproti 25k checkpointu zlepšil:
|
||||
|
||||
- ARC `acc_norm` približne o 1,97 percentuálneho bodu,
|
||||
- TruthfulQA MC1 približne o 2,44 p. b.,
|
||||
- TruthfulQA MC2 približne o 3,63 p. b.,
|
||||
- SKQuad F1 približne o 9,18 bodu.
|
||||
|
||||
Naopak sa zhoršil:
|
||||
|
||||
- HellaSwag `acc_norm` približne o 1,50 p. b.,
|
||||
- M-MMLU približne o 6,22 p. b.,
|
||||
- SKLegal `acc_norm` približne o 1,95 p. b.
|
||||
|
||||
To je dôležité aj vzhľadom na validačný loss. Checkpoint 25k mal najlepší nameraný Titan eval loss približne `1.0599`, zatiaľ čo na konci bol eval loss približne `1.221`. Napriek tomu 225k checkpoint zlepšil niektoré downstream úlohy, najmä `skquad`.
|
||||
|
||||
Preto sa nedá povedať, že checkpoint s najnižším validačným lossom je automaticky najlepší model pre všetky úlohy.
|
||||
|
||||
---
|
||||
|
||||
## Súhrnné porovnanie vybraných modelov
|
||||
|
||||
| Model / checkpoint | ARC acc_norm | HellaSwag acc_norm | M-MMLU acc | TQA MC1 | TQA MC2 | SKLegal acc_norm | SKQuad F1 |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| Alpaca QLoRA | 0.3473 | 0.5106 | 0.2928 | 0.2391 | 0.3942 * | 0.4693 | 27.7994 |
|
||||
| Hruška 08 attention-only | 0.3524 | 0.5218 | 0.3448 | 0.1877 | 0.3674 | 0.4768 | 43.3752 |
|
||||
| Hruška 10 best eval loss | 0.3293 | 0.5157 | 0.3448 | 0.2057 | 0.3480 | 0.4618 | 37.7561 |
|
||||
| Titan 25k | 0.3251 | 0.4943 | 0.3342 | 0.1761 | 0.3251 | 0.4588 | 25.8678 |
|
||||
| Titan 225k | 0.3447 | 0.4793 | 0.2719 | 0.2005 | 0.3613 | 0.4393 | 35.0471 |
|
||||
|
||||
`*` Starý Alpaca výsledok `truthfulqa_sk_mc2` bol získaný s inou verziou tejto úlohy, preto ho treba porovnávať opatrne.
|
||||
|
||||
Z porovnania možno vyvodiť:
|
||||
|
||||
1. **Hruška experimenty sú veľmi konkurencieschopné napriek iba 100k dátam.**
|
||||
Najmä experiment 08 dosiahol najlepší výsledok na `skquad` a silné výsledky na ARC a SKLegal.
|
||||
|
||||
2. **Viac tréningových dát alebo viac krokov automaticky neznamenalo lepší výsledok na každom benchmarku.**
|
||||
Titan 225k spracoval približne 3,6 milióna príkladov, ale na M-MMLU, HellaSwag a SKLegal bol slabší než viacero 100k Hruška experimentov.
|
||||
|
||||
3. **Titan 225k sa výrazne zlepšil v generatívnom question-answering benchmarku SKQuad oproti Titan 25k.**
|
||||
F1 stúplo z `25.8678` na `35.0471`.
|
||||
|
||||
4. **Starší Alpaca QLoRA model zostáva silný na TruthfulQA MC1.**
|
||||
Dosiahol `0.2391`, čo je viac než všetky nové Aya experimenty. To môže znamenať, že rozdielna tréningová dátová distribúcia zachováva alebo posilňuje iné schopnosti modelu.
|
||||
|
||||
5. **Najlepší Hruška validačný loss a najlepší benchmarkový model nie sú totožné.**
|
||||
Experiment 10 je najlepší podľa Aya eval loss, zatiaľ čo experiment 08 je najvýraznejší podľa širšieho benchmarkového profilu.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Dôležité obmedzenia porovnania
|
||||
|
||||
Pri interpretácii výsledkov treba zohľadniť:
|
||||
|
||||
- Hruška modely boli trénované na fixnom 100k výbere Aya dát, Titan na streamovanej veľkej časti Aya datasetu,
|
||||
- konfigurácie tréningu sa medzi Hruškou a Titanom líšili,
|
||||
- Hruška benchmarky používali `bf16`, Titan `fp16`,
|
||||
- starší Alpaca benchmark vznikol v inom softvérovom prostredí,
|
||||
- starý `truthfulqa_sk_mc2` používal inú verziu úlohy,
|
||||
- nebol zatiaľ zrobený benchmark základného modelu `slovak-nlp/mistral-sk-7b` bez adaptéru.
|
||||
|
||||
|
||||
14
lmeval/lmeval_comparison_all.csv
Normal file
14
lmeval/lmeval_comparison_all.csv
Normal file
@ -0,0 +1,14 @@
|
||||
model,training_eval_loss,arc_acc,arc_acc_norm,hellaswag_acc,hellaswag_acc_norm,m_mmlu_acc,truthfulqa_mc1_acc,truthfulqa_mc2_acc,sklegal_acc,sklegal_acc_norm,skquad_exact,skquad_f1,skquad_HasAns_exact,skquad_HasAns_f1,skquad_NoAns_exact,skquad_NoAns_f1,skquad_best_exact,skquad_best_f1
|
||||
alpaca_qlora,,0.32591958939264326,0.3473053892215569,0.4133895624670532,0.5105956773853453,0.2928341754708314,0.2390745501285347,0.39419828418377467,0.2841079460269865,0.46926536731634183,1.9722425127830534,27.7993811825338,2.410565457109886,34.145591726147124,0.05605381165919283,0.05605381165919283,18.61629969738078,28.301192071377013
|
||||
01_baseline_r16_a16_lr5e5_adamw,0.7567,0.30196749358426006,0.34046193327630453,0.41560358460727465,0.5209277807063785,0.3549992344204563,0.17994858611825193,0.34391089322085056,0.28785607196401797,0.46851574212893554,14.160492538870917,36.6797346829585,17.38684446723939,45.05730189342111,0.05605381165919283,0.05605381165919283,18.689345716372742,36.915470604294036
|
||||
02_optimizer_adamw8bit_r16_a16_lr5e5,0.7521,0.29597946963216426,0.3378956372968349,0.4130732735898788,0.521244069583553,0.35438677078548464,0.1928020565552699,0.35373417730948353,0.2886056971514243,0.4715142428785607,13.76395700720025,36.21782844597198,16.912424669829466,44.50255801997045,0.0,0.0,18.63716998852134,36.46155623142899
|
||||
03_rank8_a16_lr5e5,0.7586,0.28999144568006846,0.33105218135158254,0.4137058513442277,0.5167105956773853,0.34550604807839536,0.18380462724935734,0.3424520772406517,0.29760119940029983,0.4715142428785607,13.993530209746426,36.36378811056779,17.194512116938068,44.68190556014504,0.0,0.0,18.77282688093499,36.37507422583225
|
||||
04_rank32_a32_lr5e5,0.7292,0.2891360136869119,0.33532934131736525,0.41412756984712706,0.5200843437005799,0.3449701423977951,0.19023136246786632,0.3367013908863517,0.2908545727136432,0.47301349325337333,13.32568089324846,36.02282635500946,16.361071932299012,44.2501275753373,0.05605381165919283,0.05605381165919283,18.67891057080246,36.12444280653584
|
||||
05_r16_alpha32_lr5e5,0.7323,0.2994011976047904,0.33361847733105215,0.4130732735898788,0.5190300474433316,0.35714285714285715,0.19665809768637532,0.3555125811399826,0.29685157421289354,0.46701649175412296,14.598768652822708,37.873456685535025,17.925375048083087,46.52408455154278,0.05605381165919283,0.05605381165919283,18.77282688093499,38.068000672246654
|
||||
06_lr1e4_r16_a16,0.7184,0.29597946963216426,0.33105218135158254,0.411070110701107,0.5207169214549289,0.3549992344204563,0.19023136246786632,0.34733281230911506,0.2841079460269865,0.46551724137931033,14.014400500886987,37.57962398015711,17.207334273624824,46.16303841541808,0.05605381165919283,0.05605381165919283,18.80413231764583,37.69906094942537
|
||||
07_lr2e5_r16_a16,0.7912,0.29426860564585117,0.32763045337895635,0.41560358460727465,0.522509225092251,0.3379268105956209,0.16709511568123395,0.32463255972324384,0.29610194902548725,0.47226386806596704,11.322132943754566,33.83807391933327,13.899217848442108,41.565618972813276,0.05605381165919283,0.05605381165919283,18.61629969738078,33.95862223270098
|
||||
08_attention_only_r16_a16_lr5e5,0.8094,0.31565440547476475,0.35243798118049613,0.4157090142329995,0.5217712177121772,0.3448170264890522,0.18766066838046272,0.3673805917101876,0.2893553223388306,0.4767616191904048,18.136283001147866,43.37517960476381,22.28490832157969,53.29713375464183,0.0,0.0,19.628508817698005,43.397808641902465
|
||||
09_batch2_accum4_r16_a16_lr5e5,0.7563,0.29597946963216426,0.3378956372968349,0.4136004217185029,0.5209277807063785,0.35140101056499773,0.18637532133676094,0.340221777957301,0.2871064467766117,0.46926536731634183,13.388291766670145,35.3128443275733,16.450827029106296,43.3905612503058,0.0,0.0,18.62673484295106,35.431132341766855
|
||||
10_r16_a32_lr1e4,0.6918,0.3028229255774166,0.32934131736526945,0.41012124406958356,0.515656299420137,0.3448170264890522,0.20565552699228792,0.34795284436431645,0.2698650674662669,0.4617691154422789,14.160492538870917,37.75612784500817,17.38684446723939,46.37991705843228,0.05605381165919283,0.05605381165919283,18.77282688093499,38.08192856860334
|
||||
titan_aya_25k,,0.2643284858853721,0.32506415739948674,0.4048497627833421,0.4942540853979968,0.3341754708314194,0.17609254498714652,0.32507560661819124,0.2653673163418291,0.4587706146926537,4.633204633204633,25.867828563515147,5.667393255545583,31.759379551758638,0.11210762331838565,0.11210762331838565,18.61629969738078,25.922669866068382
|
||||
titan_aya_225k,,0.30025662959794697,0.34473909324208724,0.39768054823405374,0.4792830785450712,0.2719338539274231,0.20051413881748073,0.36134935010431024,0.25337331334332835,0.43928035982008995,10.883856829802776,35.04710724582597,13.373509424285166,43.0640375351648,0.0,0.0,18.64760513409162,35.17783479678552
|
||||
|
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user