Document six completed LR runs as preparation for full Aya training on Perun. Record selection of LR 0.00010 by lowest final validation loss, selected-model lm-eval and partial SK-bench results, reproducible provenance, and dataset-access/context-truncation limitations. Preserve existing 30k and Titan material.
96 lines
8.1 KiB
Markdown
96 lines
8.1 KiB
Markdown
# Reprodukcia experimentu a benchmarkov
|
|
|
|
Hlavným cieľom série bolo vybrať vhodný learning rate na 300k slovenskej Aya vzorke pred plánovaným tréningom na celej množine na Perune. Hodnotenie SK-bench a lm-eval následne prebehlo iba pre vybraný LR `0.00010`, ktorý mal najnižší finálny validačný loss zo šiestich behov.
|
|
|
|
## Čo je pôvodný záznam a čo je odvodené
|
|
|
|
- `configs/`, `logs/`, jednotlivé tréningové JSON súbory, pôvodné grafy, LR súhrn a výsledné benchmarkové JSON pochádzajú z archívu `aya_300k_benchmarky_20261024_215708.tar.gz`.
|
|
- `results/eval_loss_history.csv`, `results/gradient_history.csv`, rozšírené tabuľky a graf finálneho loss podľa LR sú odvodené z tréningových záznamov. Pôvodné merania sa neprepisujú.
|
|
- `scripts/setup_aya_300k_lr_validation.sh`, oba tréningové runner skripty, oba pôvodné analyzátory a `run_lmeval_aya_300k_lr_0p00010.sh` sú archivované serverové skripty. Zachovávajú pôvodné absolútne cesty na Hruške.
|
|
- `scripts/analyze_training_results.py` je lokálny offline analyzátor vytvorený pri spracovaní výsledkov. Nepotrebuje váhy ani `trainer_state.json`.
|
|
- `scripts/rerun_skbench_lr_0p00010.sh` bol zrekonštruovaný pri spracovaní podľa odovzdaného príkazu, uložených parametrov a presného zoznamu 222 vykonaných úloh. Nie je vydávaný za pôvodný archivovaný runner.
|
|
|
|
Zdrojový archív vrátane úplných per-sample detailov zostáva samostatným primárnym záznamom. Jeho SHA-256 a veľkosť sú v [provenance/source_archive.json](provenance/source_archive.json).
|
|
|
|
## Príprava dát a tréning
|
|
|
|
Pôvodný setup načítal `CohereLabs/aya_collection_language_split`, subset `slovak`, split `train`. Ponechal len záznamy s neprázdnymi reťazcami `inputs` a `targets`, vykonal shuffle so seed 42 a vybral prvých 300 000 záznamov. Pri zápise sa odstránili okrajové medzery a vytvorili polia `instruction`, `input` a `output`. LLaMA-Factory následne použila 1000 príkladov na validáciu a 299 000 na tréning.
|
|
|
|
Archív neobsahuje konkrétnu revíziu zdrojového Aya datasetu, checksum vytvoreného JSONL súboru ani identifikátory validačného splitu. Recept preto dokumentuje postup, ale pri inom stave zdrojového datasetu nezaručuje identickú 300k vzorku. Pred budúcim tréningom na Perune je vhodné uchovať zdrojovú revíziu, checksum dát a rozdelenie na train/validation.
|
|
|
|
Tréningové konfigurácie používajú `model_name_or_path: slovak-nlp/mistral-sk-7b`. Logy potvrdzujú snapshot:
|
|
|
|
```text
|
|
089497ae0d72018e9591895c54f774bf0b4a83a4
|
|
```
|
|
|
|
Pri opakovaní možno tento snapshot explicitne zafixovať cez `model_revision`. Pôvodné YAML súbory zostávajú v zaznamenanom stave.
|
|
|
|
Setup na pôvodnej Hruške pracoval s cestami:
|
|
|
|
```text
|
|
/home/schwarc/LLaMA-Factory/data/aya_slovak_300k_fixed.jsonl
|
|
/home/schwarc/LLaMA-Factory/data/dataset_info.json
|
|
/home/schwarc/diplomovka/aya_300k_lr_validation/
|
|
/home/schwarc/diplomovka/scripts/
|
|
```
|
|
|
|
Registráciu datasetu prebral z existujúcej položky `aya_slovak_100k_fixed`. V novom prostredí musí registrácia zodpovedať Alpaca poliam `instruction`, `input`, `output`. Archivovaný setup aj tréningové skripty sú určené na prečítanie a prispôsobenie týmto cestám a novému výstupnému priečinku, nie na automatické prepísanie existujúcich dokončených behov.
|
|
|
|
Pôvodné poradie behov:
|
|
|
|
1. `run_aya_300k_lr_validation.sh`: LR `0.00018`, `0.00020`, `0.00023`.
|
|
2. `run_aya_300k_lr_validation_lower.sh`: LR `0.00015`, `0.00010`, `0.00008`.
|
|
|
|
Prvý pôvodný analyzátor sumarizuje len prvé tri LR. Pre všetkých šesť serverových behov slúži `analyze_aya_300k_lr_all.py`. Oba pôvodné analyzátory vyžadujú serverové `trainer_state.json`; tieto veľké súbory sa do Git výberu nekopírujú.
|
|
|
|
Na obnovenie malých odvodených tabuliek a LR grafu zo súborov v tomto repozitári slúži:
|
|
|
|
```bash
|
|
python aya_300k_lr_experiments/scripts/analyze_training_results.py
|
|
```
|
|
|
|
Analyzátor používa Python a Matplotlib (overené s verziou 3.11.2). Tréning ani benchmark týmto príkazom neprebieha.
|
|
|
|
## Zlúčenie modelu s adaptérom
|
|
|
|
[benchmarks/export/export_lr_0p00010.yaml](benchmarks/export/export_lr_0p00010.yaml) opisuje zlúčenie pôvodného modelového snapshotu s adaptérom z `lr_0p00010`. Export prebehol cez LLaMA-Factory na CPU do `bfloat16`, s template `alpaca` a tromi safetensors shardmi. Zlúčenie nevykonáva ďalší tréning.
|
|
|
|
Exportovaný model bol na serveri uložený v:
|
|
|
|
```text
|
|
/home/schwarc/diplomovka/skbench_evaluation/models/aya_300k_lr_0p00010
|
|
```
|
|
|
|
Modelové váhy a adaptér nie sú súčasťou tohto Git výberu. Metadata exportovaného modelu a chat template sú zachované v `benchmarks/export/`.
|
|
|
|
## lm-evaluation-harness
|
|
|
|
Archivovaný runner používa Conda prostredie `lm_eval_hruska`, checkout `/home/schwarc/lm-evaluation-harness` a custom úlohy v `/home/schwarc/diplomovka/lmeval_slovak_tasks`. Ich presný obsah, commit a verzie knižníc sú uložené v benchmarkových metadátach.
|
|
|
|
Zlúčený model sa načíta ako `pretrained=...`, bez druhého pripájania adaptéra cez `peft=`. Exportovaný tokenizer mal označenie `TokenizersBackend`, ktoré Transformers 4.48.2 nepozná. Úspešný beh preto explicitne používa pôvodný tokenizer z cache presného snapshotu základného Mistralu. Oba majú rovnaký pôvodný slovník, benchmarkové prompty sa neobalili Alpaca chat template.
|
|
|
|
Nastavenia úspešného behu: HF backend, BF16, batch size 1, zero-shot, bez limitu vzoriek, seeds `0/1234/1234/1234`. `CUDA_VISIBLE_DEVICES=1` vybral fyzickú GPU 1; `--device cuda:0` označoval túto jedinú viditeľnú GPU.
|
|
|
|
## SK-bench
|
|
|
|
Úspešný beh vychádza zo slovenského zero-shot výberu oficiálneho `tasks_list_zero.txt`. Presný použitý zoznam 222 položiek aj 190 vynechaných položiek sa zachoval v `benchmarks/skbench/configs/`. Do opakovaného porovnania ďalšieho modelu treba prevziať tento presný zoznam, nie nanovo meniaci sa zoznam dostupných úloh.
|
|
|
|
V čase behu nebolo prístupných 12 repozitárov zo `slovak-nlp`; navyše nebol schválený gated prístup k `natalia-nk/NLI-SK-annotated`. Pôvodný metadata report rozlišuje existenciu metadát, nie oprávnenie čítať dátové súbory. Preto jeho `OK` pri NLI-SK-annotated nie je dôkazom schváleného prístupu. Pri novom behu treba skontrolovať aj oprávnenie cez `HfApi.auth_check` a prípadné podmienky na stránke datasetu.
|
|
|
|
Reprodukčný runner používa existujúci checkout SK-bench a jeho `uv.lock`. Pri opakovaní treba overiť zhodu commitu a lockfile s archivovanými benchmarkovými metadátami. Príklad spustenia na pôvodnej Hruške:
|
|
|
|
```bash
|
|
bash aya_300k_lr_experiments/scripts/rerun_skbench_lr_0p00010.sh
|
|
```
|
|
|
|
Cesty možno nastaviť cez `SKBENCH_DIR`, `MODEL_DIR`, `OUTPUT_ROOT` a fyzickú GPU cez `GPU_ID`. Runner vždy vytvára nový výsledkový priečinok.
|
|
|
|
Zachované nastavenia: 1 GPU, tensor parallel size 1, BF16, GPU memory utilization 0.85, kontext 32768, max batched tokens 2048, eager režim, `VLLM_USE_FLASHINFER_SAMPLER=0` a uloženie detailov. Nepoužíva sa `--max-samples` ani globálne skrátenie výstupného rozpočtu úloh cez `--max-tokens`.
|
|
|
|
Šablóna Alpaca sa pri SK-bench používa. Greedy dekódovanie a seed 1234 pochádzajú z zaznamenanej konfigurácie Lighteval/vLLM. Pri vyhodnotení treba popri skóre sledovať aj dodržanie formátu odpovede a orezanie vstupov. Čiastkový beh sa neprezentuje ako oficiálne celkové skóre plnej sady.
|
|
|
|
## Kontrola dlhých vstupov v dokončenom SK-bench behu
|
|
|
|
Log obsahuje jednu hlášku `context_size + max_new_tokens=53860 ... max_length=32768. Truncating context to 32642 tokens.` Počet logových hlášok nie je počtom ovplyvnených príkladov. V detailoch bolo 159 426 nulových počítadiel `truncated_tokens_count`, hoci log orezanie explicitne potvrdzuje. Dĺžková kontrola navyše našla 69 MultiWikiQA vstupov na hranici 32642 tokenov. Sú to hraničné kandidáty (23 pri každom prompte), nie dokázaný presný počet orezaní. Bez pôvodnej tokenizácie pred orezaním nemožno skutočný počet spätne spoľahlivo určiť. Tento nesúlad je zaznamenaný v benchmarkovom audite; nulové počítadlá sa nepoužívajú ako dôkaz vyhodnotenia bez orezania.
|