Law_Slm / scripts /train_run.py
Amitkumar001's picture
Upload folder using huggingface_hub
d7228c8 verified
Raw History Blame Contribute Delete
2.37 kB
"""
Script to launch SLM model training with custom or synthetic data.
"""
import sys
import os
# Ensure package root is in path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from slm.config.config_loader import load_config
from slm.dataset.cleaner import TextCleaner
from slm.dataset.dataset import CausalLMDataset
from slm.dataset.loader import create_dataloader
from slm.tokenizer.bpe import BPETokenizer
from slm.model.transformer_lm import SLMForCausalLM
from slm.training.trainer import Trainer
from slm.utils.logger import get_logger
from slm.utils.utils import set_seed
logger = get_logger("slm.scripts.train")
def run() -> None:
config_path = os.path.join("configs", "nano_config.yaml")
logger.info(f"Loading configuration from {config_path}...")
model_config, train_config = load_config(config_path)
set_seed(train_config.seed)
# Sample corpus for demonstration
raw_texts = [
"Language models are trained to predict the next token given a context sequence of preceding tokens.",
"The Small Language Model (SLM) ecosystem is designed for efficient training on custom text domain datasets.",
"Transformer decoder blocks combine multi-head causal attention with rotary position embeddings and SwiGLU activations.",
"Optimizers like AdamW and Lion enable fast convergence and stability when training deep neural networks.",
"Byte Pair Encoding learns frequent subword merge rules directly from text without needing external NLP libraries."
] * 50
cleaner = TextCleaner()
cleaned_texts = [cleaner.clean_text(t) for t in raw_texts]
# Train BPE Tokenizer from scratch
tokenizer = BPETokenizer()
tokenizer.train_on_texts(cleaned_texts, vocab_size=model_config.vocab_size)
# Build dataset and dataloader
dataset = CausalLMDataset(cleaned_texts, tokenizer, max_seq_len=model_config.max_seq_len)
loader = create_dataloader(dataset, batch_size=train_config.batch_size, shuffle=True)
# Initialize model
model = SLMForCausalLM(model_config)
# Initialize trainer
trainer = Trainer(model, train_config, loader, tokenizer=tokenizer)
# Run training loop
summary = trainer.train()
logger.info(f"Training completed successfully! Output summary: {summary}")
if __name__ == "__main__":
run()