Training GPT-2 scale models (~124M parameters) efficiently on a single GPU. It provides:
Training options:
TopicReferenceModel ArchitectureGPT ArchitectureData LoadingTokenized DataOptimizersOptimizersTraining LoopTraining LoopHyperparametersHyperparameters
bash
pip install torch einops numpy huggingface_hub
python
import modal
app = modal.App("gpt-training")
image = modal.Image.debian_slim(python_version="3.11").pip_install(
"torch", "einops", "numpy", "huggingface_hub"
)
@app.function(gpu="A100", image=image, timeout=3600)
def train():
import torch
from dataclasses import dataclass
@dataclass
class GPTConfig:
block_size: int = 1024
vocab_size: int = 50257
n_layer: int = 12
n_head: int = 12
n_embd: int = 768
dropout: float = 0.0
bias: bool = False
# Download data, build model, train
# ... (see references for full implementation)
return {"final_loss": final_loss}
@app.local_entrypoint()
def main():
results = train.remote()
print(results)
python
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.cuda.amp import autocast, GradScaler
from dataclasses import dataclass
from einops import rearrange, repeat, reduce
import numpy as np
import math
ScenarioApproachStandard GPT trainingUse baseline model with standard residualsStability experimentsTry alternative residual variants or extra streamsSmall experimentsUse T4/A10G GPUFull trainingUse A100 with bfloat16Custom dataModify the dataset loader classDifferent model sizeAdjust GPTConfig parameters
MetricTypical SignalNotesValidation lossSteady decreaseAbsolute value depends on dataset/tokenizerGrad normModerate, stable rangeLarge spikes indicate instabilityTraining stabilitySmooth curvesFrequent spikes suggest LR/batch issuesThroughputConsistent tokens/secUse for comparing configs