One weird trick for parallelizing convolutional neural networks 读笔记

One weird trick for parallelizing convolutional neural networks,alex的一篇新作品。


首先:文中正式提到,卷积层参数占了5%,但是计算时间占据了90%-95%;而全连接层,参数占据了95%,计算时间却只有5%-10%,这个其实是和我在跑别的模型时的时间是一致的,组里同事一直说是全连接层计算时间长,后来看到caffe里有人提到要把fft代替卷积加速计算实现了,就觉得肯定是卷积层计算时间长,只是一直没找到时间去打log测试具体数据。


如题,主要是并行CNN,多个GPU之间的并行处理。

并行分为两种,数据并行和模型并行。

模型并行,处理同样的数据,将模型分为几个部分。imagenet2012 alex的双GPU算是模型并行吧。

数据并行,是指同样规模的模型,训练不同的数据。

从并行角度来看,卷积适合数据并行,而全连接适合模型并行。

这个也就是我们最近看了很多文章的一个中心,就是卷积层将图像的空间特性保留的比较好,而全连接层就不具有这个特征。正是因为这个特点,卷积层将数据并行处理,才会对整体效果影响较小吧。而全连接层,其实就是分类器,出来的是相对较高层抽象的特征,并不具备了空间特性。因此,这一层如果是模型并行会效果更好。

文章中,正是使用的这种特性,在卷积层上利用了数据并行,而全连接层是模型并行。

具体在并行过程中,怎么进行呢?

作者分为两部分进行介绍,首先是forward propagation,这一过程的并行,尤其是到了卷积层的并行可以有多种方式:

1. 所有层的参数共享后,进行计算forward 再计算backward。

2. 只有一层将参数发给别的所有workers,然后计算forward,计算相应batch(128)的backward;同样,另外一个batch的worker,将数据分发为其它所有workers,计算forward,然后再是backward,更新了另外一个batch的workers。

3. 每次只将128/K个的参数传给别的所有workers,然后和2中一样计算forward和backward,分别更新每一个worker。


分析一下,第一种方式,需要等待所有的workers,这样将很占存储。。。。

第二种方式,第二种相对有效。

第三种,在不同worker之间均有通信。

而在backward阶段,类似分析(待续)



权重同步

基本上的思路就是,每一个worker更新了1/k的梯度矩阵。

batch size

128K,卷积层相当于batch=128K,而全连接层是128。

实现阶段(待续):

重点介绍了权重更新的过程,赶快找时间看看原始的2012的文章,然后再回头看这一部分,期待我们同事能先讲解。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值