globals()函数的用法和DataParaller()使用方法

1 globals()函数的用法和DataParaller()使用方法

这里是对globals()函数所对应的语法,globals() 函数会以字典类型返回当前位置的全部全局变量。

a='runoob'
print(globals()) ## 这里是来返回包括所有的导入的变量的过程的。

2 DataParaller是会对数据来进行自动的差分的,并将作业订单发送到多个GPU上的多个模型

在每个模型完成它们的工作之后,DataParallel 在将结果返回给你之前收集和合并结果。

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


input_size = 5  ## 定义的输入尺寸是5
output_size = 2 ## 定义的输出尺寸是2

batch_size = 30  ## 每批数据所对应的尺寸是30
data_size = 100  ## 是数据100

### 如果是存在GPU的话就使用GPU来进行计算,否则就是使用cpu进行计算
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

## 这里是来定义的随机的产生的数据集,也就是对应的虚拟数据集的
class RandomDataset(Dataset):

    def __init__(self, size, length):  ## input_size=size = 5, length = data_size = 100
        self.len = length
        self.data = torch.randn(length, size)  ## 是来随机产生一批数据,其中数据量是100,尺寸是5

    def __getitem__(self, index):
        return self.data[index]  ## 得到数据所对应的索引

    def __len__(self):
        return self.len
## 然后这里是来对相应的数据进行加载的过程的的。其中每一批所对应的数据是30个,其中shuffle是对数据进行打乱
rand_loader = DataLoader(dataset=RandomDataset(input_size, data_size),  ## 5  100 返回数据和对应的索引,在来返回相应数据长度
                         batch_size=batch_size, shuffle=True)
### 这里是只获得一个输入,然后在是对应的输出的。
class Model(nn.Module):
    # 我们的模型

    def __init__(self, input_size, output_size):
        super(Model, self).__init__()  ## 这里是来对相应的模型的定义的过程的。
        self.fc = nn.Linear(input_size, output_size) ## 这里是对应的输入5,输出是2是对应的一个全连接层

    def forward(self, input):  ## 然后是对应的前向的传播的把相应的数据进行输入的,这里是一批一批的数据进行输入,首先是输入30个数据
        output = self.fc(input)  ## 把输入的数据来通过全连接层
        print("\tIn Model: input size", input.size(),
              "output size", output.size())  ##这里是来答应输出得尺寸和输出的尺寸的过程的。

        return output

model = Model(input_size, output_size)  ## 我们这是来使用的模型的,传入相应的输入尺寸,和输出尺寸
if torch.cuda.device_count() > 1:  ## 这里是使用的GPU的数量的是大于一个话
  print("Let's use", torch.cuda.device_count(), "GPUs!")  ## 答应出我们可以是使用的GPU的数量的。
  # dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
  model = nn.DataParallel(model) ## nn.DataParaller来包装我们的模型

model.to(device)  ## 然后这里是将模型放在GPU上来进行计算的过程的。

###  然后这里是我们来对相应的模型的运行的过程的。
for data in rand_loader:   ## 首先这里是来对相应的数据进行加载的过程的。
    ## 总共是100个数据分别对应的是30,30,30,10
    input = data.to(device)  ## 把数据放在GPU上面来进行计算的,使用GPU模型来进行包装的, 如果是系统上是不存在GPU,那么使用CPU来进行计算
    output = model(input)  ## 把数据来给放到模型当中的。这里的模型是可以使用CNN或者是其他的一些卷积神经网络的。
    print("Outside: input size", input.size(),
          "output_size", output.size())  ## 这里最后的输出的结果是我只对应的了一个GPU所对应的输出的的情况的。

结果

globals()

{‘name’: ‘main’, ‘doc’: None, ‘package’: None, ‘loader’: <_frozen_importlib_external.SourceFileLoader object at 0x0000021FC3160AC0>, ‘spec’: None, ‘annotations’: {}, ‘builtins’: <module ‘builtins’ (built-in)>, ‘file’: ‘C:/Users/85339/Desktop/已看论文/3-20/classification_Pytorch_Proj-master/Test1.py’, ‘cached’: None, ‘a’: ‘runoob’}

DataParaller() 这里是只使用了一个GPU所对应的情况的。

In Model: input size torch.Size([30, 5]) output size torch.Size([30, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([30, 5]) output size torch.Size([30, 2])
Outside: input size torch.Size([30, 5]) output_size torch.Size([30, 2])
	In Model: input size torch.Size([30, 5]) output size torch.Size([30, 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])
Outside: input size torch.Size([10, 5]) output_size torch.Size([10, 2])

使用了两个GPU所对应的情况的。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值