14 KiB
# 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
Repozitár s kódmi, konfiguráciami a výsledkami:
https://git.kemt.fei.tuke.sk/js886io/Diplomovka
Hardvér
Experimenty boli realizované na serveri Titan s GPU:
- NVIDIA TITAN RTX
- 24 GB VRAM
Použitý dataset v prvom experimente
Na supervised fine-tuning bol v prvom experimente použitý slovenský inštrukčný dataset:
saillab/alpaca-slovak-cleaned
Dataset obsahuje polia:
instructioninputoutput
Dáta boli formátované v Alpaca štýle:
### Inštrukcia:
...
### Vstup:
...
### Odpoveď:
...
Metóda dotrénovania v prvom experimente
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:
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
Vyhodnotenie pomocou vlastného evaluačného skriptu
Model bol najskôr 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
Model bol následne vyhodnotený pomocou frameworku lm-evaluation-harness na slovenských benchmarkových úlohách.
Hodnotený bol PEFT LoRA adaptér pripojený k základnému modelu:
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 neboli dostupné v štandardnej inštalácii lm-evaluation-harness, preto boli doplnené ako custom tasky.
Výsledky lm-evaluation-harness
| 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:
instructioninputoutput
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:
{
"instruction_en": "...",
"input_en": "...",
"output_en": "...",
"instruction_sk": "...",
"input_sk": "...",
"output_sk": "..."
}
Experiment bol úspešne spustený a vznikla preložená vzorka datasetu s 1000 príkladmi. Táto vzorka je uložená v repozitári v priečinku:
translated_datasets/
Súbor:
alpaca_translated_en_sk_1000.jsonl
Experiment s datasetom Aya Collection
Okrem pôvodného tréningu na datasete saillab/alpaca-slovak-cleaned bol pripravený ďalší experiment s väčším slovenským inštrukčným datasetom:
CohereLabs/aya_collection_language_split
Použitá bola iba slovenská časť datasetu:
- subset:
slovak - language:
slk
Slovenská časť datasetu obsahuje približne 4,15 milióna príkladov. Dataset obsahuje najmä polia:
inputstargetslanguage
Pri tréningu boli polia mapované nasledovne:
| Pôvodné pole | Použitie pri tréningu |
|---|---|
inputs |
prompt / inštrukcia |
targets |
odpoveď |
language |
jazyk príkladu |
Cieľom experimentu je dotrénovať slovenský Mistral 7B model na výrazne väčšom množstve slovenských inštrukčných dát.
Tréning na Aya Slovak datasete
Pre experiment s datasetom Aya bol použitý rovnaký základný model:
slovak-nlp/mistral-sk-7b
Na rozdiel od predchádzajúceho experimentu s datasetom Alpaca bol tento tréning nastavený ako LoRA fine-tuning bez 4-bit kvantizácie, teda nie ako QLoRA.
Použitá konfigurácia:
| Parameter | Hodnota |
|---|---|
| Dataset | CohereLabs/aya_collection_language_split |
| Subset | slovak |
| Jazyk | slk |
| Počet príkladov | približne 4 148 000 |
| Fine-tuning metóda | LoRA |
| QLoRA / 4-bit quantization | nie |
| Unsloth | áno |
| GPU | 1 |
| Batch size per device | 1 |
| Gradient accumulation | 4 |
| Effective batch size | 4 |
| Max sequence length | 1024 |
| Max steps | 1 037 000 |
| LoRA rank | 16 |
| LoRA alpha | 32 |
| LoRA dropout | 0.05 |
| Trainable parameters | 41 943 040 |
| Compute type | fp16 |
Použité LoRA cieľové moduly:
q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
Keďže slovenská časť datasetu Aya je veľmi veľká, pri klasickom načítaní datasetu dochádzalo k zaplneniu diskového priestoru počas predspracovania dát. Z tohto dôvodu bol tréning nastavený v režime streamingu:
streaming: true
buffer_size: 16384
Streaming umožňuje čítať dáta postupne počas tréningu bez potreby uložiť celý predspracovaný dataset do cache na disk. Tréning je preto riadený cez počet krokov:
max_steps: 1037000
Táto hodnota približne zodpovedá jednému prechodu cez celý slovenský Aya dataset pri efektívnej veľkosti batchu 4.
Tento experiment je aktuálne spustený. Výsledný adaptér a finálne metriky budú doplnené po dokončení tréningu.