NLP实战高手课学习笔记(6):深度学习与硬件:CPU、GPU和TPU

660 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情

说明

本系列博客将记录自己学习的课程:NLP实战高手课,链接为:time.geekbang.org/course/intr… 本篇为10-12节的课程笔记,主要介绍深度学习中打交道最多的三类硬件:CPU、GPU和TPU。

深度学习与CPU

很多时候,结果出现问题不一定是算法的问题,而可能是硬件的问题。作为一名算法工程师,有必要对硬件进行适当关注。通过选择不同的硬件配置,可以提高训练速度,避免部署出现问题。

通常,人们一般不用CPU训练深度学习模型。但CPU也有一些优势和特点,比如:

  • 很多if…else出现时,CPU会比GPU快;
  • 如果需要加速,可以通过Cython访问C++,这在实际业务性应用时很有用;
  • 对于大部分硬件(GPU、TPU、FPGA),CPU会负责数据的读写。在进行训练时,有时为了加速需要选择更多核的机器。

当运算器需要从存储器中提取数据时,它首先在最高级的cache中寻找然后在次高级的cache中寻找。如果在cache中找到,则称为命中hit;反之,则称为不命中miss。这种miss会造成内存的大量读写消耗时间。因此,在使用时,我们要尽量避免Cache Miss。

深度学习与GPU

GPU简介

深度学习中使用的GPU主要是NVIDIA系列的显卡,它分为民用卡(用于游戏,如1080,2080Ti)和商用卡(如V100,A100)。在使用中,商用卡没有主动散热,需要部署到服务器中。

image.png

与CPU不同的是,GPU有着非常多的核,比如成千上万个核心。而且,GPU有着属于自己的Memory,无法与CPU的Memory直接进行交互。因此,数据需要先从CPU Memory放到GPU Memory上才能正常工作。

使用GPU时需要注意的是,由于显存独立于内存,内存和显存的读取可能会成为问题。

GPU的使用有以下特点:

  • GPU部署经常被内存与显存之间的带宽影响,可以增加CPU的核。
  • 对于显存的处理,multi-stream processer并不如CPU一样强大。

由于无法很好的管理多进程、多线程对显存的占用,所以GPU会遇到显存污染的问题,即GPU发生运算时脱离CPU平台,显存只在固定的时间与内存做交互。如果多个运算(比如部署了多个微服务)想改变同一块显存的内容时,不会想CPU的内存一样产生警告。那么在另一个运算读取该部分内容时,已经发生了改变,因此产生错误的结果。

GPU 训练注意事项

  • GPU训练效率和显存利用率可以被 DeepSpeed 显著提升。
  • 很少出现 GPU 多线程训练。
  • GPU 训练有时可能会被一些其他因素影响,如CPU,GPU 之间沟通速度(多 GPU或多节点)。
  • GPU 可处理动态的网络。
  • 传统来说,NLP 的训练一般来说不会耗尽 GPU的资源,但是深度迁移模型出现后, GPU 常常出现算力不足或显存资源不足的情况。

深度学习与TPU

TPU相比于GPU构造比较简单,而且对于Transformer结构支持很好。本质上来说是矩阵/向量相乘的机器,构造远比GPU简单,所以TPU十分便宜且很容易预测其表现。缺点是其不能处理动态网络。其主要特点如下:

  • 原生Tensorflow对TPU支持最好,PyTorch目前通过XLA的引进也部分支持TPU。
  • TPU的主要运算瓶颈在于IO支持。
  • 建议采用TPU V3多线程的方式,这种方式性价比最高。

总结

本文介绍了深度学习相关的三种硬件:CPU、GPU和TPU,希望对您有帮助。