返回顶部
首页 > 资讯 > 精选 >PyTorch中的数据并行处理是怎样的
  • 106
分享到

PyTorch中的数据并行处理是怎样的

2023-06-04 08:06:00 106人浏览 安东尼
摘要

PyTorch中的数据并行处理是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通过 PyTorch 使用多个 GPU 非常简单。你可以将模型放在一个 GPU:&nbs

PyTorch中的数据并行处理是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

通过 PyTorch 使用多个 GPU 非常简单。你可以将模型放在一个 GPU:

 device = torch.device("cuda:0")  model.to(device)

然后,你可以复制所有的张量到 GPU:

 mytensor = my_tensor.to(device)

请注意,只是调用 my_tensor.to(device) 返回一个 my_tensor 新的复制在GPU上,而不是重写 my_tensor。你需要分配给他一个新的张量并且在 GPU 上使用这个张量。

在多 GPU 中执行前馈,后馈操作是非常自然的。尽管如此,PyTorch 默认只会使用一个 GPU。通过使用 DataParallel 让你的模型并行运行,你可以很容易的在多 GPU 上运行你的操作。

 model = nn.DataParallel(model)

这是整个教程的核心,我们接下来将会详细讲解。

引用和参数

引入 PyTorch 模块和定义参数

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

# 参数

 input_size = 5  output_size = 2   batch_size = 30  data_size = 100

设备

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

实验(玩具)数据

生成一个玩具数据。你只需要实现 getitem.

class RandomDataset(Dataset):    def __init__(self, size, length):        self.len = length        self.data = torch.randn(length, size)    def __getitem__(self, index):        return self.data[index]    def __len__(self):        return self.lenrand_loader = DataLoader(dataset=RandomDataset(input_size, data_size),batch_size=batch_size, shuffle=True)

简单模型

为了做一个小 demo,我们的模型只是获得一个输入,执行一个线性操作,然后给一个输出。尽管如此,你可以使用 DataParallel   在任何模型(CNN, RNN, Capsule Net 等等.)

我们放置了一个输出声明在模型中来检测输出和输入张量的大小。请注意在 batch rank 0 中的输出。

class Model(nn.Module):    # Our model    def __init__(self, input_size, output_size):        super(Model, self).__init__()        self.fc = nn.Linear(input_size, output_size)    def forward(self, input):        output = self.fc(input)        print("\tIn Model: input size", input.size(),              "output size", output.size())        return output

创建模型并且数据并行处理

这是整个教程的核心。首先我们需要一个模型的实例,然后验证我们是否有多个 GPU。如果我们有多个 GPU,我们可以用 nn.DataParallel 来   包裹 我们的模型。然后我们使用 model.to(device) 把模型放到多 GPU 中。

model = Model(input_size, output_size)if torch.cuda.device_count() > 1:  print("Let's use", torch.cuda.device_count(), "GPUs!")  # dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs  model = nn.DataParallel(model)model.to(device)

输出:

Let's use 2 GPUs!

运行模型:

现在我们可以看到输入和输出张量的大小了。

for data in rand_loader:    input = data.to(device)    output = model(input)    print("Outside: input size", input.size(),          "output_size", output.size())

输出:

In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])        In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])        In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])        In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])        In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])        In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])        In Model: input size torch.Size([5, 5]) output size torch.Size([5, 2])        In Model: input size torch.Size([5, 5]) output size torch.Size([5, 2])Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

结果:

如果你没有 GPU 或者只有一个 GPU,当我们获取 30 个输入和 30 个输出,模型将期望获得 30 个输入和 30 个输出。但是如果你有多个 GPU ,你会获得这样的结果。

多 GPU

如果你有 2 个GPU,你会看到:

# on 2 GPUsLet's use 2 GPUs!    In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])    In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])    In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])    In Model: input size torch.Size([15, 5]) output size torch.Size([15, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([5, 5]) output size torch.Size([5, 2])    In Model: input size torch.Size([5, 5]) output size torch.Size([5, 2])Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

如果你有 3个GPU,你会看到:

Let's use 3 GPUs!    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])    In Model: input size torch.Size([10, 5]) output size torch.Size([10, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

如果你有 8个GPU,你会看到:

Let's use 8 GPUs!    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([4, 5]) output size torch.Size([4, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])    In Model: input size torch.Size([2, 5]) output size torch.Size([2, 2])Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

数据并行自动拆分了你的数据并且将任务单发送到多个 GPU 上。当每一个模型都完成自己的任务之后,DataParallel 收集并且合并这些结果,然后再返回给你。

关于PyTorch中的数据并行处理是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: PyTorch中的数据并行处理是怎样的

本文链接: https://lsjlt.com/news/237077.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PyTorch中的数据并行处理是怎样的
    PyTorch中的数据并行处理是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通过 PyTorch 使用多个 GPU 非常简单。你可以将模型放在一个 GPU:&nbs...
    99+
    2023-06-04
  • Oracle数据库中的并行处理是什么
    在Oracle数据库中,并行处理是指将一个查询或操作分成多个部分,并同时在多个处理器或服务器上执行这些部分,以加快查询或操作的执行速...
    99+
    2024-03-02
    Oracle
  • ApacheBeam中的数据处理流程是怎样的
    Apache Beam 是一个分布式数据处理框架,它可以处理批处理和流处理任务。数据处理流程通常包括以下步骤: 创建一个 Pip...
    99+
    2024-03-06
    ApacheBeam
  • 怎么用go并发处理同样的数据
    要使用Go并发处理同样的数据,可以使用goroutine和channel来实现。 首先,创建一个函数来处理数据,该函数可以接收一个数...
    99+
    2023-10-24
    go
  • PyTorch中怎么处理序列数据
    处理序列数据在PyTorch中通常涉及使用RNN(循环神经网络)或者Transformer模型。下面是一个简单的示例,展示如何在Py...
    99+
    2024-03-05
    PyTorch
  • PyTorch中怎么处理图像数据
    在PyTorch中处理图像数据通常需要使用以下步骤: 加载数据集:使用PyTorch的torchvision模块可以方便地加载常...
    99+
    2024-03-05
    PyTorch
  • PyTorch中怎么处理缺失数据
    在PyTorch中处理缺失数据通常需要使用一些数据预处理技术或者特定的模型结构。以下是几种常见的处理缺失数据的方法: 将缺失数据...
    99+
    2024-03-05
    PyTorch
  • 怎么使用go并发处理同样的数据
    在Go语言中,可以使用goroutine和channel来实现并发处理同样的数据。下面是一个简单的示例: package main ...
    99+
    2024-02-29
    go
  • python数据分析中的异常值处理是怎样的
    本篇文章为大家展示了python数据分析中的异常值处理是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。异常值异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称离群点,异常值的分析...
    99+
    2023-06-29
  • PyTorch中怎么处理多模态数据
    在PyTorch中处理多模态数据通常有两种方法: 使用多输入模型:将不同模态的数据分别输入到模型的不同输入层。可以使用torch....
    99+
    2024-03-05
    PyTorch
  • PyTorch中怎么处理不平衡数据
    处理不平衡数据在PyTorch中通常有几种常用的方法: 类别权重:对于不平衡的数据集,可以使用类别权重来平衡不同类别之间的样本数量...
    99+
    2024-03-05
    PyTorch
  • Pytorch关于Dataset 的数据处理
    Pytorch系列是了解与使用Pytorch编程来实现卷积神经网络。 学习如何对卷积神经网络编程;首先,需要了解Pytorch对数据的使用(也是在我们模型流程中对数据的预处理部分),...
    99+
    2024-04-02
  • C++技术中的大数据处理:如何实现高效的数据并行处理?
    c++++ 中数据并行处理是一种将数据分配给并行处理单元的技术:使用并行编程库,如 openmp 和 stapl。实战案例:并行矩阵乘法,通过将矩阵块分配给不同线程,显著提高计算效率。 ...
    99+
    2024-05-11
    大数据 c++
  • Pytorch中Dataset数据处理的示例分析
    这篇文章给大家分享的是有关Pytorch中Dataset数据处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Pytorch系列是了解与使用Pytorch编程来实现卷积神经网络。学习如何对卷积神经网络编...
    99+
    2023-06-22
  • PyTorch中怎么处理长尾分布数据
    处理长尾分布数据的常见方法包括: 对数据进行重采样:通过增加长尾数据的权重或者增加长尾数据的数量,可以平衡长尾数据和短尾数据之间...
    99+
    2024-03-05
    PyTorch
  • PyTorch中怎么处理时间序列数据
    在PyTorch中处理时间序列数据通常需要使用torch.utils.data.Dataset和torch.utils.data.D...
    99+
    2024-03-05
    PyTorch
  • PyTorch中怎么处理大规模数据集
    处理大规模数据集时,PyTorch提供了几种方法: 使用DataLoader:DataLoader是PyTorch中用于加载数据...
    99+
    2024-03-05
    PyTorch
  • ASP中的并发处理是怎样的?学习笔记来了!
    在Web应用程序中,处理并发请求是一个必要的技能。ASP(Active Server Pages)是一种流行的服务器端脚本语言,用于创建动态网页。当多个用户同时访问ASP应用程序时,系统需要进行有效的并发处理,以确保每个用户都能够正确地获...
    99+
    2023-08-05
    关键字 学习笔记 并发
  • 大数据流处理中Flume、Kafka和NiFi的对比是怎样的
    今天就跟大家聊聊有关大数据流处理中Flume、Kafka和NiFi的对比是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们将简要介绍三种Apache处理工具:Flume、Ka...
    99+
    2023-06-02
  • go并发处理同样的数据如何设置
    在Go语言中可以使用goroutine和channel来实现并发处理同样的数据。下面是一个示例代码: package main i...
    99+
    2023-10-25
    go
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作