deepspeed的使用demo(自用、更新)

准备:创建3个文件

分别是deepspeed的配置文件、项目文件(可以是多个文件)、脚本文件。

具体的demo代码如下:

import deepspeed
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader

class Moduel(nn.Moudle):
    pass

class MyDataset(Dataset):
    pass

if __name__ == "__main__":
    # 1. deepspeed 的初始化,加载deepspeed配置文件
    """
    deepspeed.init_distributed() 主要作用是设置分布式训练所需的环境,包括初始化 GPU 设备、
    通信策略(如 NCCL、MPI 等)、进程间通信等。通过调用这个方法,你可以确保每个参与训练的设备都被正确地识别并设置,
    以便在后续训练过程中能够正确进行数据的分发、模型参数的同步等操作。
    """
    deepspeed.init_distributed()
    with open("deepspeed.json", encoding="utf-8") as f:
        deepspeed_config = f.read()
        deepspeed_config = eval(deepspeed_config)

    # 2.定义模型和,数据集和损失函数
    model = Moduel()
    train_dataset = MyDataset()
    loss_fn = nn.CrossEntropyLoss()

    # 3.将模型和数据集交给deepspeed管理
    """
    传入:模型,训练集,deepspeed配置,模型参数
    输出:新的模型,优化器, 数据加载器, 学习率策略
    """
    new_model, optimizer, train_dataloader, lr_scheduler  = deepspeed.initialize(model=model, training_data=train_dataset, config=deepspeed_config, model_parameters=model.parameters())

    # 4. 开始训练,指定训练模型为deepspeed初始化之后的新的模型
    new_model = new_model.train()

    """
    数据指定设备:将数据加载器返回的特征和标签移到指定设备中,新的模型会自动调用到指定设备
    反向传播:这里的反向传播是将loss传入新的模型中进行反向传播。torch中的反向传播是用loss.backward()
    梯度更新:这里的梯度更新是用new_model.step()来进行的。torch中的梯度更新是用优化器->optimizer.step()
    """
    for x, y in train_dataloader:
        x = x.to(new_model.device)
        y = y.to(new_model.device)

        output = new_model(x)

        loss = loss_fn(output, y)

        new_model.backward(loss)
        new_model.step()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值