Preskočiť na obsah

Veľké jazykové modely (LLM)

Popis

Veľké jazykové modely (LLMs) vo veľkej miere predstavujú triedu architektúr hlbokého učenia nazývanú transformačné siete (transformer networks), ktoré sa učia kontext a význam sledovaním vzťahov v sekvenčných dátach, napríklad slov vo vete. Tréningom na internetovo veľkých dátových súboroch so stovkami miliárd parametrov modely LLM odomkli schopnosť generovať ľudsky podobný obsah. Tieto modely dokážu čítať, písať, programovať, kresliť a tvoriť spoľahlivým spôsobom a rozširujú ľudskú kreativitu a zlepšujú produktivitu v odvetviach pri riešení najťažších problémov sveta.

Aplikácie pre LLM sa pohybujú naprieč mnohými prípadmi použitia, napríklad učenie sa jazyka sekvencií proteínov s cieľom poskytnúť životaschopné zlúčeniny, ktoré pomôžu vedcom uskutočniť prelomové objavy. Alternatívne, využitie LLM na generovanie kódu na základe opisov v prirodzenom jazyku môže zvýšiť produktivitu programátorov.

HPC-FineTuning-Examples

Používatelia majú prístup do verejne dostupného HPC Fine-Tuning Examples GitHub repozitára, venovaného poskytovaniu príkladov a tutoriálov na fine-tuning jazykových modelov pomocou HPC systému Devana. Naším cieľom je pomôcť vedcom a praktikom efektívne využiť HPC infraštruktúru na zlepšenie ich NLP pracovných postupov.

Obsah

  • BGE embedding a vyhľadávanie: Skripty na vytvorenie nástroja na vyhľadávanie informácií pomocou BGE embeddings – modelu BGE-M3, na získanie podobných dokumentov z datasetu 20 Newsgroups pomocou Annoy indexu.
  • Trénovanie LLM: Skripty na fine-tuning predtrénovaného jazykového modelu (LLM) pomocou knižnice Hugging Face Transformers. Skripty ukazujú, ako načítať predtrénovaný model, tokenizovať vstupný text a trénovať model na vlastnom dátovom súbore.
  • Inference LLM: Skripty na spúšťanie inference na predtrénovanom jazykovom modeli (LLM) pomocou knižnice Hugging Face Transformers. Skripty ukazujú, ako načítať predtrénovaný model, tokenizovať vstupný text a generovať výstupný text.
  • Rozpoznanie pomenovaných entít (NER) s Transformers: Skripty a utilitky na tréning modelu DistilBERT pre rozpoznanie pomenovaných entít (NER). Model sa fine-tune na dátovom súbore CoNLL-2003, ktorý obsahuje pomenované entity ako osoby (PER), organizácie (ORG), lokality (LOC) a rôzne entity (MISC).
  • Trénovanie BERT sentiment analysis: Skripty na tréning modelu BERT pre analýzu sentimentov pomocou Twitter datasetu. Zahŕňa predspracovanie dát, tréning modelu, vyhodnotenie a inference.

Obrázok NER

Požiadavky

Na použitie príkladov uvedených v tomto repozitári máte dve možnosti:

  1. Použitie existujúceho Singularity obrazu: Využite existujúci Singularity obraz s názvom pt-2.3_llm.sif, nachádzajúci sa na /storage-data/singularity_containers/pt-2.3_llm.sif, ktorý obsahuje všetky potrebné knižnice.

  2. Vytvorenie nového Singularity obrazu: Postupujte podľa pokynov nižšie a vytvorte nový Singularity obraz.

Pokyny na vytvorenie nového Singularity obrazu

  • Singularity: Uistite sa, že máte nainštalovanú verziu Singularity-CE 3.10 alebo vyššiu.
  • Recipe súbor: Použite Singularity recipe súbor s názvom pt_devel_llm.recipe.
  • Build príkaz: Na zostavenie Singularity obrazu z recipe súboru použite nasledujúci príkaz:
sudo singularity build test.sif pt_devel_llm.recipe

Sudo prístup

Všímajte si, že vytváranie Singularity kontajnera vyžaduje privilégiá superužívateľa, a preto ho nemožno vykonať na klastri Devana.

Nastavenie Hugging Face tokenu

Niektoré skripty vyžadujú, aby ste mali účet a access token vygenerovaný na webovej stránke Hugging Face. Token sa používa na prístup k niektorým modelom a mal by byť pridaný do kódu ako reťazec, ako je znázornené v príklade nižšie.

Príklad: Načítanie modelu s access tokenom

Na načítanie modelu pomocou access tokenu môžete použiť nasledujúci úryvok kódu:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "your-model-id"
access_token = "your-access-token"

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    token=access_token,  # Add the access token here
    device_map='cuda'
)

tokenizer = AutoTokenizer.from_pretrained(
    model_id,
    token=access_token  # Add the access token here
)

Pred prístupom k určitým modelom možno budete musieť súhlasiť s podmienkami na webovej stránke Hugging Face, vrátane zdieľania vašich kontaktných informácií (e-mail a používateľské meno) s autormi repozitára.

BGE embedding a vyhľadávanie

Model, ktorý sa dá nájsť vo verejne dostupnom GitHub repozitári, slúži na vytvorenie vektorovej databázy pomocou open-source BGE-M3 embedding modelu. Tento model sa používa na generovanie vektorových reprezentácií textov, čím umožňuje efektívne vyhľadávanie textov. Tieto embeddings slúžia na vytvorenie vektorovej databázy, ktorá uľahčuje rýchle vyhľadávanie a analýzu dokumentov na základe podobnosti ich obsahu.

Požadované súbory

  • bge_embeddings.py: Skript na predspracovanie datasetu 20 Newsgroups, generovanie BGE embeddings pomocou modelu BGE-M3 a zostavenie Annoy indexu pre efektívne vyhľadávanie.

Súbor bge_embeddings.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/Embedding%20indices/bge_embeddings.py

Na spustenie bge_embeddings.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_embeddings.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_embeddings.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute bge_embeddings
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 bge_embeddings.py

Požadované súbory

  • bge_retrieval.py: Skript na získanie podobných dokumentov z datasetu 20 Newsgroups na základe dotazovania pomocou predvytvoreného Annoy indexu a BGE-M3 embeddings.

Súbor bge_retrieval.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/Embedding%20indices/bge_retrieval.py

Na spustenie bge_retrieval.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_retrieval.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_retrieval.sh. Je potrebné špecifikovať váš dotaz a počet súborov, ktoré sa majú získať.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# User input variables
query="latest advancements in cancer treatment"
files=3

# Execute bge_retrieval
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 bge_retrieval.py --query "$query" --n_neighbors "$files"

Note

Cesty a názvy súborov upravte podľa potreby na základe štruktúry a požiadaviek vášho projektu.


Trénovanie LLM

Verejne dostupné GitHub repozitárium poskytuje skripty na fine-tuning LLM modelu, trénovaného a testovaného na úlohách odpovedania na otázky pomocou datasetu MedMCQA, s použitím knižnice Hugging Face Transformers. Skripty ukazujú, ako načítať predtrénovaný model, tokenizovať vstupný text a trénovať model na vlastnom dátovom súbore. Výkon možno porovnať s modelom Mistral-7B-Instruct-v0.2, ktorý nebol fine-tuned, pomocou skriptov v priečinku LLM inference.

Požadované súbory

  • train_mistral_peft.py: Skript na fine-tuning modelu Mistral-7B-Instruct-v0.2 na dátovom súbore MedMCQA.

Súbor train_mistral_peft.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/LLM%20training/train_mistral_peft.py

Na spustenie train_mistral_peft.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_training.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_training.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute train_mistral_peft.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 train_mistral_peft.py

Požadované súbory

  • mistral_trained_pred.py: Skript na spustenie inference na fine-tuned modeli Mistral-7B-Instruct-v0.2 na dátovom súbore MedMCQA.

Súbor mistral_trained_pred.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/LLM%20training/mistral_trained_pred.py

Na spustenie mistral_trained_pred.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_trained_inference.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_trained_inference.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute mistral_trained_pred.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 mistral_trained_pred.py

Note

Tréning nevykonáva fine-tuning celého modelu, ale ladí iba adaptéry pomocou PEFT. Je to efektívnejšie než fine-tuning celého modelu. Uložené adaptéry sú menšie než samotný model. Trénovací skript ukladá adaptéry modelu v dátovom priečinku. Skript mistral_trained_pred.py načíta adaptéry a môžete špecifikovať checkpoint na načítanie. Cesty a názvy súborov upravte podľa potreby na základe štruktúry a požiadaviek vášho projektu.


Inference LLM

Verejne dostupné GitHub repozitárium obsahuje skripty na spúšťanie inference na predtrénovanom jazykovom modeli (LLM) pomocou knižnice Hugging Face Transformers. Skripty ukazujú, ako načítať predtrénovaný model, tokenizovať vstupný text a generovať výstupný text. Repozitár obsahuje skript na spustenie inference na modeloch AYA-101 a Mistral-7B-Instruct-v0.2. Modely sa testujú na úlohe odpovedania na otázky pomocou datasetu MedMCQA.

Požadované súbory

  • aya_pred.py: Skript na spustenie inference na modeli AYA-101 pomocou datasetu MedMCQA.

Súbor aya_pred.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/LLM%20inference/aya_pred.py

Na spustenie aya_pred.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_inference_aya.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_inference_aya.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute aya_pred.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 aya_pred.py

Požadované súbory

  • mistral_pred.py: Skript na spustenie inference na modeli Mistral-7B-Instruct-v0.2 pomocou datasetu MedMCQA.

Súbor mistral_pred.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/LLM%20inference/mistral_pred.py

Na spustenie mistral_pred.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_inference_mistral.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_inference_mistral.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute mistral_pred.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 mistral_pred.py

Rozpoznanie pomenovaných entít (NER) s Transformers

Verejne dostupné GitHub repozitárium obsahuje skripty a utilitky na tréning DistilBERT modelu pre úlohu identifikácie entít (pomenovaných entít) v texte. Model sa fine-tune na dátovom súbore CoNLL-2003, ktorý obsahuje pomenované entity ako osoby (PER), organizácie (ORG), lokality (LOC) a rôzne entity (MISC). Okrem toho sa hodnotenia tréningových hyperparametrov dajú optimalizovať pomocou knižnice Optuna, ktorá umožňuje systematicky hľadať najlepšiu hodnotu rýchlosti učenia, veľkosti batch, počtu epoch a pod.

Požadované súbory

  • train.py: Skript na fine-tuning DistilBERT pre NER, zahŕňa vyhodnotenie na testovacom súbore a uloženú históriu tréningu a validácie.
  • train_with_optuna.py: Verzia skriptu train.py, ktorá zahŕňa hľadanie optimálnej sady hyperparametrov pomocou knižnice Optuna.

Súbor train.py a train_with_optuna.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/NER/train.py
wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/NER/train_with_optuna.py

Na spustenie train.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_train.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_train.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute train.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 train.py

# Alternatively execute search for optimal set of hyperparameters using Optuna library
# singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 train_with_optuna.py

Požadované súbory

  • inference.py: Skript na vykonávanie predikcií pomocou trénovaného modelu.

Súbor inference.py si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/NER/inference.py
Podrobnosti o fine-tuning modeli
  • Model: DistilBERT (Base, Uncased)
  • Tréningové parametre:

    • Rýchlosť učenia: 2e-5
    • Veľkosť batch: 16
    • Počet epoch: 5
    • Vyhodnocovacie metriky: Loss

Na spustenie inference.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_inference.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_inference.sh. Je potrebné špecifikovať cestu k trénovanému modelu z predchádzajúceho príkladu; všímajte si časť models/final_model.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# User input variables
trained_models_path=/home/user/NER/models/final_model

# Execute inference.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 inference.py --model_path ${trained_models_path}

Note

Cesty a názvy súborov upravte podľa potreby na základe štruktúry a požiadaviek vášho projektu. Stiahnuté súbory sa uložia do cache pre ďalšie spustenia.


Trénovanie BERT sentiment analysis

Bidirectional Encoder Representations from Transformers (BERT), vyvinutý spoločnosťou Google, je encoder model umelej inteligencie najvyššej úrovne (state-of-the-art). Ide o verejný (open-source) model s relatívne jednoduchou architektúrou, ktorý sa používa pri rôznych úlohách predovšetkým vďaka svojej flexibilite. Verejne dostupné GitHub repozitárium poskytuje skripty na tréning modelu BERT pre analýzu sentimentov pomocou Twitter datasetu. Zahŕňa predspracovanie dát, tréning modelu, vyhodnotenie a inference.

Požadované súbory

  • sentiment_analysis_bert_train.py: Skript na predspracovanie Twitter datasetu, tréning modelu BERT pre analýzu sentimentov, vyhodnotenie modelu a uloženie trénovaného modelu.
  • Twitter_Data.csv: CSV súbor obsahujúci dataset používaný pre analýzu sentimentov.

Súbor sentiment_analysis_bert_train.py a Twitter_Data.csv si môžete stiahnuť takto:

wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/Sentiment%20analysis/sentiment_analysis_bert_train.py
wget https://github.com/NSCC-Slovakia/NCC_HPC-FineTuning-Examples/raw/main/Sentiment%20analysis/Twitter_Data.csv

Na spustenie sentiment_analysis_bert_train.py v prostredí SLURM plánovača si skopírujte a upravte nasledujúci skript, uložte ho ako run_sentiment_analysis.sh a odošlite úlohu na výpočtový uzol príkazom sbatch run_sentiment_analysis.sh.

#!/bin/bash
#SBATCH --account= # Project number
#SBATCH --job-name= # Name of the job in SLURM
#SBATCH --partition=gpu # Selected partition
#SBATCH --gres=gpu:1 # Number of GPUs
#SBATCH --nodes=1 # Number of nodes
#SBATCH --ntasks-per-node= # Number of MPI ranks
#SBATCH --cpus-per-task= # Number of OMP threads per MPI rank
#SBATCH --output job%J.out # Standard output
#SBATCH --error job%J.err # Standard error

# Load modules
module purge
module load singularity

# Disable the user's python packages
export PYTHONNOUSERSITE=1

# Execute sentiment_analysis_bert_train.py
singularity exec --nv /storage-data/singularity_containers/pt-2.3_llm.sif python3 sentiment_analysis_bert_train.py --batch_size 64

Note

Dataset použitý v tomto projekte je získaný z Kaggle. Prístup k datasetu máte na Twitter Sentiment Dataset. Cesty a názvy súborov upravte podľa potreby na základe štruktúry a požiadaviek vášho projektu.

Created by: Marek Štekláč, Marek Štekláč