多GPU模式下并行计算深度学习模型情况解析
写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,共同学习进步,记录自己的问题。错误在所难免,有请各位批评斧正。如有侵权,烦请第一时间通知,我会立即删除相关内容,万分感谢!
众所周知,卷积神经网络模型是支持并行计算的,而且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
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
- 深度学习TensorFlow如何使用多GPU并行模式?
- 深度学习TensorFlow如何使用多GPU并行模式?
- TensorFlow:实战Google深度学习框架(一)计算、数据、运行模型
- 深度学习计算模型中“门函数(Gating Function)”的作用
- 如何使用GPU云主机加速深度学习计算
- MXNET:深度学习计算-GPU
- 代码解析深度学习系统编程模型:TensorFlow vs. CNTK
- 迁移学习——数据不够的情况下训练深度学习模型
- 英伟达发布深度学习GPU训练系统DIGITS 5,自带图像分割与在线模型库
- 深度学习框架里使用GPU训练网络参数时查看GPU的使用情况
- 深度学习简介,GPU计算的原理,分布式机器学习原理
- 深度学习与硬件GPU,软件框架关系及相关概念解析
- 当深度学习遇上异构并行计算
- [机器学习入门] 深度学习简介,GPU计算的原理,分布式机器学习原理
- 【CUDA开发-并行计算】NVIDIA深度学习应用之五大杀器
- AMP(Gpu并行计算,c#,vc++11) 学习(一)
- Tensorflow 实战google深度学习框架 09 计算图保存,与模型读取