您的位置:首页 > 其它

多GPU模式下并行计算深度学习模型情况解析

2019-06-11 15:30 826 查看
版权声明:本文为博主原创文章,未经博主允许不得转载,如有侵权,烦请第一时间告知。 https://blog.csdn.net/yufeilongyuan/article/details/91440535

写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,共同学习进步,记录自己的问题。错误在所难免,有请各位批评斧正。如有侵权,烦请第一时间通知,我会立即删除相关内容,万分感谢! 

众所周知,卷积神经网络模型是支持并行计算的,而且GPU并行计算与SGD(Stochastic Gradient Descent,随机梯度下降)训练的数据并行特性支持的尤其好,这样可以明显加速模型训练。并行的特点就是突破显存大小限制,多GPU计算使得训练超过单GPU显存的模型成为可能,并预期通过训练更复杂的网络来获得更好的模型效果。这样就不必担心GPU运算能力问题,可以将“较大”的模型拆分到不同GPU上,适用于训练更深层次、更多参数的卷积神经网络。 但是,随着各种高级优化模型的提出,例如谷歌的EfficientNet网络,深度与多参数已经不是深度学习追求的方向。

一块显卡也就是单GPU训练的情况下,模型不能够进行拆分,只有一个进程,GPU显存上存储整个模型信息;模型并行计算的情况下,可以将模型拆分到多个GPU显存上进行存储,实际情况是,训练过程中每个GPU上实际只负责训练模型的一部分,极大的缓解显存与计算能力不足问题(这里插一句话,单个GPU计算能力不足时,可不可以调用CPU能剩余算力?训练时候监控下CPU性能,除了数据IO之外还做了什么?),通过执行引擎的调度在一个WorkerGroup内完成对整个模型的训练。 

多GPU情况下,如上图,Training Data Dispatcher用于读取和分发数据,也分带管理模型并行训练的GPU Worker,数据流向是数据读取到CPU再拷贝到GPU,这也就是为什么显卡计算还要要求CPU多线程多进程,主要是进行数据的IO操作(插一句话,这里直接用GPU读取数据是否可行,提高效率?思考)。故此设计在各Worker计算每batch数据时,由Training Data Dispatcher从文件中读取并分发下一batch数据,以达到用计算时间掩盖I/O时间的设计目标。

 

安装多GPU服务器的硬件体系结构如上图,存在8 GPU模块,每两个GPU Slot连接在一个GPU专用PCI槽位上再通过PCIe Switch将GPU Slot 0,1,2,3连接在一颗CPU上,GPU Slot 4,5,6,7连接在另一颗CPU上,两颗CPU通过IOH(Input Output Hub)连接。

 

如上图所示,多GPU并行计算情况下,每个Workers只是负责模型的一部分 ,同时在计算训练。

关于GPU/CUDA编程的资料,市面上并不多,书籍就少之又少,推荐几个笔者看过的资料,希望对你有帮助。

书籍:这几本比较常见,经典

链接:几篇不错的原创博文

1.https://blog.csdn.net/xiaohu2022/article/details/79599947

2.https://docs.nvidia.com/cuda/

3.https://devblogs.nvidia.com/even-easier-introduction-cuda/

4.https://www.geek-share.com/detail/2585501240.html

5.https://www.geek-share.com/detail/2710953101.html

6.https://blog.csdn.net/qq_30263737/article/details/81235580

7.https://blog.csdn.net/heiheiya/article/details/81557628 

主要参考:

https://data.qq.com//article?id=1516

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐