又是好久没更新博客,最近琐事缠身,写文档写到吐。没时间学习新的知识,刚空闲下来立刻就学习之前忘得差不多得Pytorch。Pytorch和tensorflow差不多,具体得就不多啰嗦了,觉得还有疑问的童鞋可以自行去官网学习,官网网址包括:

1.https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

2.https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/#class-torchnndataparallelmodule-device_idsnone-output_devicenone-dim0source

个人觉得值得一说的是关于数据并行这部分:

根据官网的教程代码总结如下所示:

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 16 14:32:58 2019@author: kofzh
"""import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader# Parameters and DataLoaders
input_size = 5
output_size = 2batch_size = 30
data_size = 100device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")class RandomDataset(Dataset):def __init__(self, size, length):self.len = lengthself.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)class Model(nn.Module):# Our modeldef __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 outputmodel = 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 GPUsmodel = nn.DataParallel(model)model.to(device)
for data in rand_loader:input = data.to(device)output = model(input)print("Outside: input size", input.size(),"output_size", output.size())

对于上述代码分别是 batchsize= 30在CPU和4路GPU环境下运行得出的结果:

CPU with batchsize= 30结果:

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])

4路 GPU with batchsize= 30 结果:

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

对于上述代码分别是 batchsize= 25在CPU和4路GPU环境下运行得出的结果:

CPU with batchsize= 25结果:

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

4路 GPU with batchsize= 25 结果:

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

个人总结:batchsize在实际训练时对于每个GPU的分配基本上采用的是平均分配数据的原则,每个GPU分配的数据相加 = batchsize。

备注:

1.官网上的CPU结果图是错误的,可能是图截错了,在此对于某些博客直接抄袭官网的结果图表示鄙视。

2.本文针对单服务器多GPU的情况,请不要混淆。

如有错误,敬请指正!

深度学习之pytorch(二) 数据并行相关推荐

  1. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(3)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅲ(概率)

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  2. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  3. (翻译)60分钟入门深度学习工具-PyTorch

    60分钟入门深度学习工具-PyTorch 作者:Soumith Chintala 原文翻译自: https://pytorch.org/tutorials/beginner/deep_learning ...

  4. [深度学习] 分布式Pytorch介绍(三)

    [深度学习] 分布式模式介绍(一) [深度学习] 分布式Tensorflow介绍(二) [深度学习] 分布式Pytorch介绍(三) [深度学习] 分布式Horovod介绍(四)  一  Pytorc ...

  5. 深度学习三(PyTorch物体检测实战)

    深度学习三(PyTorch物体检测实战) 文章目录 深度学习三(PyTorch物体检测实战) 1.网络骨架:Backbone 1.1.神经网络基本组成 1.1.1.卷积层 1.1.2.激活函数层 1. ...

  6. 网易云课程:深度学习与PyTorch入门实战

    网易云课程:深度学习与PyTorch入门实战 01 深度学习初见 1.1 深度学习框架简介 1.2 pytorch功能演示 2开发环境安装 3回归问题 3.1简单的回归问题(梯度下降算法) 3.3回归 ...

  7. 深度学习遇上稀缺数据就无计可施?这里有几个好办法

    2019-12-07 05:30:39 作者 | Tyler Folkman 编译 | 杨晓凡 对于深度学习而言,在有很多数据的情况下,再复杂的问题也不在话下,然而没有这么多数据呢?本文作者 Tyle ...

  8. DL:深度学习框架Pytorch、 Tensorflow各种角度对比

    DL:深度学习框架Pytorch. Tensorflow各种角度对比 目录 先看两个框架实现同样功能的代码 1.Pytorch.Tensorflow代码比较 2.Tensorflow(数据即是代码,代 ...

  9. 一篇文章入门深度学习框架PyTorch

    一篇文章入门深度学习框架PyTorch 1 Tensor(张量) 2 Variable(变量) 3 Dataset(数据集) 4 nn.Module(模组) 5 torch.optim(优化) 一阶优 ...

最新文章

  1. Single Shot Multibox Detection (SSD)实战(上)
  2. Delphi 2010 refactor / refactoring 重构不能使用的原因以及解决
  3. html5——DOM扩展
  4. maven 整体打包_Maven打包方式整理
  5. Java中TimeZone(时区)类的简单使用
  6. 聚类时需要标准化吗_收房时,需要请专业验房师吗?
  7. c++求矩阵的秩_利用Python矩阵求逆、特征值及特征向量
  8. 团队编程项目作业6-程序维护
  9. 安装VS之后,excel每次启动都会配置Visual Studio的解决办法
  10. 为什么 call 比 apply 快?
  11. finecms aip.php漏洞,通杀FineCMS5.0.8及版本以下getshell的漏洞
  12. html5锚点平滑,使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置...
  13. 【详细】阿里云Accesskey创建步骤记录
  14. 【VTM10.0代码学习】帧间预测xCheckRdCostMerge2N*2N
  15. 手推车轮 trolley wheel
  16. vmware esxi6.x 环境下 oracle 11gR2 ASM 的raw裸映射磁盘更换为虚拟存储磁盘
  17. 【修复日常bug】京东富文本详情图变形的多种处理方式(解决商品详情图片宽高不适应问题)
  18. 关于自带微软拼音输入法简体和繁体转换
  19. 租用云主机需要注意哪些因素
  20. 问题解决:如何正确安装 imbalance-learn

热门文章

  1. .NET框架类库中的命名空间
  2. Shell记录-Shell命令(其他)
  3. 网页开发浏览器兼容性问题
  4. JavaScript——变量与基本数据类型
  5. 在64位系统上注册并使用32位的COM组件
  6. 基于spring-boot和elfinder的在线文件管理
  7. 12 组合与继承、CSS Module
  8. ES5-拓展 隐式数据类型转换
  9. Confluence 6 手动备份站点
  10. Android绘制(一):来用shape绘出想要的图形吧!