训练API
deepspeed.initialize()
在其第一个参数中返回一个类型为 DeepSpeedEngine
的训练引擎。此引擎用于推进训练。
for step, batch in enumerate(data_loader):
#forward() method
loss = model_engine(batch)
#runs backpropagation
model_engine.backward(loss)
#weight update
model_engine.step()
前向传播
反向传播
优化器步进
梯度累积
模型保存
此外,当创建 DeepSpeed 检查点时,会添加一个脚本 zero_to_fp32.py
,可用于将 fp32 主权重重构为单个 PyTorch state_dict
文件。
训练多个模型
DeepSpeed 支持训练多个模型,这在知识蒸馏和训练后RLHF等场景中非常有用。核心方法是为每个模型创建单独的 DeepSpeedEngine。
训练独立模型
以下代码片段演示了在同一数据集上独立训练多个模型。
model_engines = [engine for engine, _, _, _ in [deepspeed.initialize(m, ...,) for m in models]]
for batch in data_loader:
losses = [engine(batch) for engine in model_engines]
for engine, loss in zip(model_engines, losses):
engine.backward(loss)
除了创建多个 DeepSpeedEngine(每个模型一个)之外,上述用法与典型的 DeepSpeed 用法类似。