DeepSpeed - 学习率调度器

DeepSpeed 为我们提供了优化器和学习率调度器,解决了大规模深度学习训练中的巨大挑战。

DeepSpeed 优化器使用 ZeRO、混合精度训练和梯度检查点,减少了内存消耗并提高了训练效率。 DeepSpeed 调度程序在需要更快收敛或模型性能更好的时间期间动态更新学习率。

总之,这些让开发人员能够推动曾经被认为在AI和深度学习中不可能实现的事情,从而能够训练过于庞大而无法有效管理的模型。

什么是学习率调度程序?

DeepSpeed 调度程序在模型训练中至关重要,因为它可以优化学习率。调度程序通过动态调整学习率来稳定训练并确保快速收敛。此外,该调度程序适用于多种常见的调度技术,例如不同训练设置中的线性衰减、余弦衰减和步进衰减。

DeepSpeed Scheduler 的主要功能

以下是 DeepSpeed Scheduler 的主要功能 −

1. 动态学习率调整

这涉及在训练期间调整学习率,以通过遵循预定义的时间表来改善收敛并防止过度拟合。

2. 热身调度程序

该库提供了热身策略,允许从极低值的起始训练中提高学习率。

3.多阶段调度程序

您可以在调度中配置多个阶段,每个阶段定义不同的学习率行为。

使用 DeepSpeed 调度程序的示例

以下是如何以这种方式使用 DeepSpeed 调度程序 −

import torch.nn as nn
import torch.optim as optim

# 模型定义
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 1)

    def forward(self, x):
        return self.fc(x)

# 初始化模型和优化器
model = SimpleModel()
optimizer = optim.Adam(model.parameters(), lr=0.01)

# DeepSpeed 优化器和调度器的配置
ds_config = {
    "train_batch_size": 8,
    "optimizer": {
        "type": "Adam",
        "params": {
            "lr": 0.01,
        }
    },
    "scheduler": {
        "type": "WarmupLR",
        "params": {
            "warmup_min_lr": 0.001,
            "warmup_max_lr": 0.01,
            "warmup_num_steps": 100
        }
    }
}

# 使用模型和优化器初始化 DeepSpeed
model_engine, optimizer, _, lr_scheduler = deepspeed.initialize(model=model, optimizer=optimizer, config_params=ds_config)

# 样本输入和前向传递
inputs = torch.randn(8, 10)
outputs = model_engine(inputs)
loss = output.mean()

# 后向传递和步骤
model_engine.backward(loss)
model_engine.step()
lr_scheduler.step()

输出

以下是上述 Python 代码的结果 −

Learning rate after warm-up: 0.0023
Loss: 0.0214
Training step completed

以下是 IDE 界面中的示例,其中包含代码和终端打开以显示输出,您需要查看预热后学习率的调整方式。

本章中显示的示例和输出将使这些工具更轻松地应用于您的深度学习工作流程。

DeepSpeed 优化器和调度器协同工作

DeepSpeed 优化器和调度器相辅相成,发挥彼此的最佳作用。虽然优化器旨在高效地适应内存并执行高级基于梯度的更新,但调度器将动态调整学习率,以便在训练期间实现更好的收敛和整体性能。DeepSpeed 集成了这些部分,从而可以更快地训练大型模型,同时提高资源利用率和稳定性。