Diplomovka/perun
2026-11-12 17:03:49 +01:00
..
configs Perun 2026-11-12 16:51:42 +01:00
ministral_3b_aya README 2026-11-12 17:03:49 +01:00
requirements perun + fix 2026-11-04 23:46:33 +01:00
scripts Perun 2026-11-12 16:51:42 +01:00
README.md Perun 2026-11-12 16:51:42 +01:00

Slovenská Aya na Perunovi

Prvým modelom pre ďalšiu sériu je ministral/Ministral-3b-instruct. Po SFT s LoRA v LLaMA-Factory sa pôvodný a dotrénovaný model porovnajú na rovnakých úlohách SK-bench. configs/ministral.yaml pripína rovnakú východiskovú revíziu modelu, aká sa stiahla pre baseline. Formát chatu sa odvodí z tokenizéra modelu. Konfigurácie Mistral-SK a OLMo sú v balíku ako ďalšie možnosti.

Súbor Úloha
scripts/prepare_data.py Jednorazová príprava spoločného datasetu.
configs/ministral.yaml Model, revízia, LoRA a tréningové nastavenia.
scripts/train.py Kontrola dát a spustenie tréningu s Unslothom.
scripts/evaluate.py Loss, perplexita, slovný F1 a presná zhoda na spoločnom splite eval alebo test.

Jeden pevný dataset

Príprava dát sa vykoná raz. Skript načíta slovenskú Aya, vynechá neplatné a prázdne riadky, odstráni normalizované duplicity a rozdelí dáta so seedom 42. Rovnaké zadania s rôznymi odpoveďami zostávajú v jednej množine. Eval aj test dostanú najviac 1 000 príkladov. Zvyšok patrí do train.

V data/aya_slovak_fixed sa uložia úplné zadania a referenčné odpovede. Pri zmene modelu sa použijú tie isté súbory a ten istý manifest. Tokenizácia prebehne až v LLaMA-Factory podľa modelovej konfigurácie. Pri cutoff_len: 4096 sa prípadné orezanie týka spracovaných tokenov pre daný beh. Dĺžky a počet orezaných príkladov sa môžu medzi modelmi líšiť.

Manifest zaznamená zdroj, seed, počty a kontrolné súčty. dataset_info.json registruje aya_train, aya_eval a aya_test. Súbory *.metadata.jsonl uchovávajú pôvod príkladov v rovnakom poradí. Dočasná SQLite databáza zabezpečuje deduplikáciu a rozdelenie bez držania celého datasetu v RAM.

1. Príprava dát na CPU

Balík sa prenesie do /mnt/project/perun26012578/perun. Zdrojový Parquet je už v /mnt/project/perun26012578/raw/slovak_train.parquet. Pri príprave stačí Python s PyArrow, ktorý je dostupný aj v pripravenom kontajneri SK-bench.

Z prihlasovacieho uzla sa príprava odošle do cpu_short. Príkaz použije existujúci obraz a Python prostredie v apphome.

cd /mnt/project/perun26012578/perun
mkdir -p logs
export APPHOME=/mnt/home/jascke919/apphome

sbatch --job-name=aya_prepare \
  --account=perun26012578 --partition=cpu_short \
  --nodes=1 --ntasks=1 --cpus-per-task=4 --mem=24G \
  --time=08:00:00 --output=logs/aya_prepare_%j.out \
  --wrap='apptainer exec --home "$APPHOME" \
    --bind /mnt/project/perun26012578:/mnt/project/perun26012578 \
    --pwd /mnt/project/perun26012578/perun "$APPHOME/cuda.sif" \
    "$APPHOME/venv/bin/python" -u scripts/prepare_data.py \
    --local-parquet /mnt/project/perun26012578/raw/slovak_train.parquet \
    --output-dir data/aya_slovak_fixed'

Po dokončení sa skutočné počty a kontrolné súčty nachádzajú v data/aya_slovak_fixed/manifest.json. Výstupný priečinok prípravy musí byť nový alebo prázdny. Pri vlastnom lokálnom JSONL slúži --local-jsonl. Bez lokálneho vstupu sa použije pripnutá revízia slovenskej Aya na Hugging Face.

Prostredie pre tréning

Tréning používa samostatné prostredie s LLaMA-Factory, Unslothom a CUDA pre H200. Balík obsahuje zachytené verzie knižníc. Funkčnosť konkrétnej zostavy sa overí pri prvom pilote na Perunovi.

Požiadavky a inštalácia prostredí

Priečinok requirements obsahuje verzie odvodené z exportu Hrušky.

Súbor Prostredie
requirements/training.txt Python 3.11.16; LLaMA-Factory, Unsloth, PyTorch 2.6.0 s CUDA 12.4 a generatívna evaluácia.
requirements/lm-eval.txt Python 3.11.16; lm-evaluation-harness, Transformers 4.48.2 a PyTorch 2.6.0 s CUDA 12.4.
requirements/skbench.txt Python 3.13.17; export 308 balíkov SK-bench vrátane vLLM 0.28.0, Transformers 5.12.1 a PyTorch 2.13.0.
requirements/skbench/pyproject.toml a uv.lock Pôvodné závislosti a uzamknuté verzie SK-bench pre obnovenie cez uv.

Git závislosti LLaMA-Factory, lm-eval a lighteval sú pripnuté na pôvodné commity. Neplatná lokálna cesta k pip bola v tréningovom a lm-eval exporte nahradená verziou pip==26.2.1 z Condy. Výpočtové knižnice zachovávajú pôvodné verzie.

Do tréningových požiadaviek boli doplnené jieba==0.42.1, rouge-chinese==1.0.3, nltk==3.10.3 a jeho závislosti joblib==1.6.0 a defusedxml==0.7.1 pre generatívnu evaluáciu. Doplnený je aj torchao==0.13.0, pretože ho vyžaduje zachytená verzia Unsloth Zoo a export ho neobsahoval. Táto verzia TorchAO podporuje Python API s PyTorch 2.6; jej natívne C++ rozšírenia sú určené pre PyTorch 2.8. Scenár používa LoRA bez kvantizácie TorchAO.

Pre tréning je setuptools upravený na 80.10.2, rovnako ako vo funkčnom SK-bench exporte. Knižnica jieba používa pkg_resources, ktorý bol zo setuptools 82 odstránený. Tréningové a benchmarkové verzie ostatných zachytených balíkov sa nemenia.

Ide o požiadavky pripravené z funkčných prostredí Hrušky a uvedených doplnení. Čistá inštalácia a výpočet na H200 sa overia na Perunovi.

Tréning a evaluácia na pripravených Aya dátach

Nasledujúce príkazy sa zadávajú z koreňa balíka v prostredí s dostupnou Condou a Gitom. PyTorch a xformers sa najprv nainštalujú z rovnakého oficiálneho CUDA 12.4 indexu:

conda create -n aya_train_perun python=3.11.16 pip=26.2.1 -y
conda activate aya_train_perun

python -m pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 xformers==0.0.29.post3 \
  --index-url https://download.pytorch.org/whl/cu124

python -m pip install -r requirements/training.txt
python -m pip check

Na pridelenom GPU uzle sa overia importy, CUDA a BF16:

python -c 'import unsloth, torch, jieba, nltk; from rouge_chinese import Rouge; assert torch.cuda.is_available(); assert torch.cuda.is_bf16_supported(); print("GPU:", torch.cuda.get_device_name(0)); print("Viditelne GPU:", torch.cuda.device_count()); print("CUDA:", torch.version.cuda)'

Tréning aj scripts/evaluate.py sa potom spúšťajú v aya_train_perun podľa ďalších častí dokumentácie. Overené opravy generovania z Titanu sú súčasťou scripts/train.py.

lm-evaluation-harness

Príkazy sa zadávajú z koreňa balíka:

conda create -n aya_lmeval_perun python=3.11.16 pip=26.2.1 -y
conda activate aya_lmeval_perun

python -m pip install torch==2.6.0 --index-url https://download.pytorch.org/whl/cu124
python -m pip install -r requirements/lm-eval.txt
python -m pip check
lm_eval --help

Súbor inštaluje framework pri revízii 6d2abda4fd171e68a8789330c4149e37c1ca0bda. Vlastné slovenské úlohy, zoznam benchmarkov a evaluačné dáta sa prenášajú samostatne; požiadavky obsahujú Python knižnice.

2. Pilot a tréning

Z koreňa balíka s aktivovaným tréningovým prostredím sa overí konfigurácia a integrita spoločných dát.

python scripts/train.py configs/ministral.yaml --dry-run

Plný tréning využíva štyri H200 na jednom uzle cez DDP. train.py spustí procesy sám. Slurm job preto požaduje jeden task a štyri GPU. Základná konfigurácia používa BF16, LoRA rank 16, alpha 32, batch 8 na GPU a efektívny batch 32. LR 0,0001 je východisková hodnota pre Ministral.

Prvý pilot overí načítanie modelu, jeho natívny formát chatu, priebeh lossu a uloženie adaptéra. --pilot-steps 30 obmedzí počet krokov a pri predvolenom splite použije najviac 2 048 tréningových riadkov z pevného poradia. Celý validačný split zostane dostupný. Pilot použije vlastný výstupný priečinok. LLaMA-Factory načíta zdrojový JSONL a obmedzí rozsah pred tokenizáciou.

sbatch --job-name=ministral_pilot \
  --account=perun26012578 --partition=gpu_short \
  --nodes=1 --ntasks=1 --gres=gpu:4 --cpus-per-task=32 --mem=128G \
  --time=02:00:00 --output=logs/ministral_pilot_%j.out \
  --wrap='python -u scripts/train.py configs/ministral.yaml --run-dir runs/ministral_pilot --pilot-steps 30'

Plný tréning sa spustí po kontrole pilotu a spresnení času. Pri dlhom behu sa checkpointy ukladajú každých 1 000 optimizer krokov a vyberá sa podľa najnižšieho validačného lossu.

sbatch --job-name=ministral_train \
  --account=perun26012578 --partition=gpu_long \
  --nodes=1 --ntasks=1 --gres=gpu:4 --cpus-per-task=32 --mem=256G \
  --time=2-00:00:00 --output=logs/ministral_train_%j.out \
  --wrap='python -u scripts/train.py configs/ministral.yaml'

Adaptér sa uloží do runs/ministral/adapter. V nadradenom priečinku zostanú train.log, used_config.yaml a run.json s identifikáciou datasetu. Pre iný beh sa zvolí nový --run-dir. Pri obnovení z checkpointu sa použije --resume s pôvodnými dátami a nastaveniami.

3. Vyhodnotenie

Po tréningu môže evaluate.py na jednej GPU vypočítať validačný loss a perplexitu a vygenerovať odpovede pre F1 a presnú zhodu. Pri generovaní sa ponechá priestor aspoň pre jeden nový token. Pri skórovaní generovaných odpovedí sa používajú úplné referencie zo spoločného JSONL. Výsledky obsahujú aj počty referencií, ktoré sa líšia od exportovaných labelov. Po výbere modelu sa môže použiť --split test s novým výstupným priečinkom.

python scripts/evaluate.py configs/ministral.yaml --output-dir results/ministral_eval
python scripts/evaluate.py configs/ministral.yaml --split test --output-dir results/ministral_test

Externý SK-bench sa spúšťa zo samostatného klonu v /mnt/project/perun26012578/sk-bench. Na porovnanie s baseline sa použije rovnaká revízia SK-bench, rovnaké nastavenia generovania a rovnaký súbor tasks_ministral_sk_baseline.txt s 340 variantmi. Lokálne exportovaný model musí byť viditeľný z kontajnera. SK-bench na Slurme

Stav jobu sa sleduje cez squeue -u "$USER". Pri chybách sa kontroluje log v logs/. Revízia Gitu sa v prípade potreby zistí pred odoslaním na prihlasovacom uzle.