参考链接
- https://time.geekbang.org/course/detail/100046401-206512
为什么关注硬件
-
有时候结果出现问题不一定是算法的问题,而可能是硬件的问题。但关注硬件不等于所有都要重写。
-
加速训练。通过选择不同的硬件配置,可以提高训练速度。
-
避免部署出现问题。
深度学习与CPU
-
一般不用CPU训练深度学习模型。
-
很多if…else出现时,CPU会比GPU快。
-
如果需要加速,可以通过Cython访问C++。
-
对于大部分硬件(GPU、TPU、FPGA),CPU会负责数据的读写。在进行训练时,有时为了加速需要选择更多核的机器。
-
避免Cache Miss(Cache从内存中取的数据如果不是register想要的,那么又得重新与内存交换数据,这种现象叫Cache Miss。)
深度学习与GPU
-
显存独立于内存,内存和显存的读取可能会成为问题。GPU部署经常被内存与显存之间的带宽影响,可以增加CPU的核。
-
对于显存的处理,multi-stream processer并不如CPU一样强大。
-
GPU训练效率和显存利用率可以被 DeepSpeed 显著提升。
-
很少出现 GPU 多线程训练。
-
GPU 训练有时可能会被一些其他因素影响,如CPU,GPU 之间沟通速度(多
GPU或多节点)。 -
GPU 可处理动态的网络。
-
GPU 部署的最大问题:显存污染。(GPU发生运算时脱离CPU平台,显存只在固定的时间与内存做交互。如果多个运算(比如部署了多个微服务)想改变同一块显存的内容时,不会想CPU的内存一样产生警告。那么在另一个运算读取该部分内容时,已经发生了改变,因此产生错误的结果。)往往会在一台GPU上只对应一个serving节点。
-
部署时需要对参数做详细调整,最重要参数为 Batch Size。
深度学习与TPU
-
用于训练神经网络的 TPU 只能通过GCP获得。
-
TPU本质上来说是矩阵/向量相乘的机器,构造远比GPU简单,所以TPU十分便宜且很容易预测其表现。
-
TPU 很擅长基于 Transformer 架构的训练和预测。
-
TPU 不能处理动态网络
-
原生Tensorflow对TPU支持最好,PyTorch目前通过XLA的引进也部分支持TPU。
-
TPU的主要运算瓶颈在于IO支持。
-
建议采用TPU V3多线程的方式,这种方式性价比最高。