Complete, modular PyTorch project for training a Small Language Model (decoder-only Transformer) with curriculum learning and evaluating downstream classification on AG News.
model/GPT-style model + classification headtokenizer/SentencePiece tokenizer training/loadingdata/language modeling and downstream loaderstraining/curriculum pretraining + downstream fine-tuning + baselineevaluation/metrics plottingconfig/experiment configurationmain.pyend-to-end orchestration
- GPT-style decoder-only Transformer:
- 8 layers, 512 hidden, 8 heads, 2048 FFN
- learned positional embeddings
- causal mask attention
- Tokenizer trained across all curriculum stages.
- Curriculum pretraining:
- Stage 1: from scratch on simple corpus
- Stage 2: 90% stage2 + 10% replay from stage1
- Stage 3: 80% stage3 + 20% replay from stage2
- Downstream AG News:
- fine-tune pretrained model with classification head
- baseline model trained only on AG News (no pretraining)
- Metrics:
- train/val LM loss
- perplexity
- downstream accuracy
- TensorBoard logging
- Reproducibility:
- global seed control
- Outputs:
- checkpoints
- JSON metrics
- comparison plots
python -m venv .venv
source .venv/bin/activate
pip install torch datasets sentencepiece pyyaml matplotlib tensorboardProvide stage corpora as plain text files (one sample per line):
data/raw/stage1.txtdata/raw/stage2.txtdata/raw/stage3.txt(optional domain corpus; can be empty)
Update paths in config/default.yaml as needed.
python main.py --config config/default.yamlTensorBoard:
tensorboard --logdir outputs/tensorboardIn outputs/:
pretrained_final.pt- stage checkpoints
stage*_step_*.pt pretraining_metrics.jsoncurriculum_downstream.jsonbaseline_downstream.jsonpretraining_loss.pngpretraining_perplexity.pngdownstream_comparison.png