Skip to content

GPT 训练管线全流程

GPT 训练管线涉及数据预处理、Tokenizer 训练、模型配置、训练循环和检查点管理等多个环节。

GPT 训练管线

训练循环

python
class GPTTrainer:
    def __init__(self, model, optimizer, scheduler, grad_accum_steps=8):
        self.model = model
        self.optimizer = optimizer
        self.scheduler = scheduler
        self.grad_accum_steps = grad_accum_steps
    
    def train_step(self, batch):
        input_ids, labels = batch["input_ids"], batch["labels"]
        with torch.cuda.amp.autocast():
            logits = self.model(input_ids)
            loss = F.cross_entropy(
                logits.view(-1, logits.size(-1)), labels.view(-1),
                ignore_index=-100
            ) / self.grad_accum_steps
        loss.backward()
        return loss.item() * self.grad_accum_steps
    
    def train_epoch(self, dataloader):
        self.model.train()
        total_loss = 0
        for i, batch in enumerate(dataloader):
            loss = self.train_step(batch)
            total_loss += loss
            if (i + 1) % self.grad_accum_steps == 0:
                torch.nn.utils.clip_grad_norm_(self.model.parameters(), 1.0)
                self.optimizer.step()
                self.scheduler.step()
                self.optimizer.zero_grad()
        return total_loss / len(dataloader)

梯度累积

梯度累积模拟更大的 batch size——每 N 步才执行一次优化器更新。在 GPU 内存有限时,这是训练大模型的关键技巧。

相关资源

最近更新