メインコンテンツへスキップ

DeepSpeed training

    Training

    Bing chat に教えてもらったDeepSpeedでのTraing 方法。DeepSpeedChat にはtrain.py という簡単な学習用のサンプルコードが入っているので、Chat用ならそちらを使う方が早い。勉強用にゼロから書くなら、下記を参考に。

    ```python

    import torch

    from deepspeed.ops.adam import FusedAdam

    from deepspeed.ops.lamb import FusedLamb

    from deepspeed.ops.adam import DeepSpeedCPUAdam

    from deepspeed.ops.adam import DeepSpeedCPUAdamBuilder

    from deepspeed.ops.adam import DeepSpeedCPUAdamBuilderConfig


    # Define your model here

    model = ...


    # Define your optimizer here

    optimizer = FusedAdam(model.parameters(), lr=0.0001)


    # Define your loss function here

    loss_fn = ...


    # Define your data loader here

    train_loader = ...


    # Train your model with DeepSpeed

    from deepspeed import DeepSpeedEngine


    engine, _, _, _ = DeepSpeedEngine.setup(

        model=model,

        optimizer=optimizer,

        loss_scale=0,

        loss_fn=loss_fn,

        training_data=train_loader,

        lr_scheduler=None,

        mpu=None,

        dist_init_required=False,

        collate_fn=None,

        config=None,

    )

    engine.train()

    # Save your model

    torch.save(model.state_dict(), 'model.pt')

    # Load your model

    model.load_state_dict(torch.load('model.pt'))

    ```

    (1) GitHub - microsoft/DeepSpeed: DeepSpeed is a deep learning .... https://github.com/microsoft/DeepSpeed

    (2) Getting Started - DeepSpeed. https://www.deepspeed.ai/getting-started/

    (3) deepspeed · PyPI. https://pypi.org/project/deepspeed/ アクセス

    An example of how to create a train loader with DeepSpeed:

    ```python

    import torch

    from torch.utils.data import DataLoader

    # Define your dataset here

    dataset = ...

    # Define your batch size here

    batch_size = ...

    # Create your train loader with DeepSpeed

    from deepspeed.ops.adam import DeepSpeedCPUAdamBuilderConfig

    train_loader = DataLoader(

        dataset=dataset,

        batch_size=batch_size,

        num_workers=0,

        pin_memory=True,

        shuffle=True,

        drop_last=True,

    )

    ```

    This code imports the necessary libraries and creates a train loader with DeepSpeed. You can replace the placeholders with your own dataset and batch size.

    GitHub - microsoft/DeepSpeed: DeepSpeed is a deep learning .... https://github.com/microsoft/DeepSpeed

    (2) GitHub - microsoft/DeepSpeedExamples: Example models .... https://github.com/microsoft/DeepSpeedExamples

    (3) microsoft/Megatron-DeepSpeed - Github. https://github.com/microsoft/Megatron-DeepSpeed


    You can use PyTorch's built-in datasets or create your own custom dataset. Here's an example of how to create a custom dataset:


    ```python

    import torch

    from torch.utils.data import Dataset

    class CustomDataset(Dataset):

        def __init__(self):

            # Define your data here

            self.data = ...


        def __len__(self):

            return len(self.data)


        def __getitem__(self, idx):

            return self.data[idx]

    ```

    This code defines a custom dataset that you can use with DeepSpeed. You can replace the placeholders with your own data.

    deepspeed · PyPI. https://pypi.org/project/deepspeed/

    (2) GitHub - microsoft/DeepSpeedExamples: Example models .... https://github.com/microsoft/DeepSpeedExamples  

    (3) GitHub - microsoft/DeepSpeed: DeepSpeed is a deep learning .... https://github.com/microsoft/DeepSpeed

    The `__getitem__()` method should return a tuple of `(input, target)`. Here's an example:

    ```python

    import torch

    from torch.utils.data import Dataset

    class CustomDataset(Dataset):

        def __init__(self):

            # Define your data here

            self.data = ...

        def __len__(self):

            return len(self.data)

        def __getitem__(self, idx):

            input = self.data[idx][0]

            target = self.data[idx][1]

            return input, target

    ```

    This code defines a custom dataset that returns a tuple of `(input, target)` in the `__getitem__()` method.

    あなたへのおすすめ