12.4. 硬件

文章目录

    • 12.4. 硬件
      • 12.4.1. 计算机
      • 12.4.2. 内存
      • 12.4.3. 存储器
      • 12.4.3.1. 硬盘驱动器
        • 12.4.3.2. 固态驱动器
        • 12.4.3.3. 云存储
      • 12.4.4. CPU
        • 12.4.4.1. 微体系结构
        • 12.4.4.2. 矢量化
        • 12.4.4.3. 缓存
      • 12.4.5. GPU和其他加速卡
      • 12.4.6. 网络和总线
      • 12.4.8. 小结

12.4. 硬件

很好地理解算法和模型才可以捕获统计方面的问题,构建出具有出色性能的系统
同时,至少对底层硬件有一定的了解也是必不可少的。

12.4.1. 计算机

大多数深度学习研究者和实践者都可以使用一台具有相当数量的内存、计算资源、某种形式的加速器(如一个或者多个GPU)的计算机。计算机由以下关键部件组成:

  • 一个处理器(也被称为CPU),它除了能够运行操作系统和许多其他功能之外,还能够执行我们给它的程序,通常由个或更多个核心组成。

  • 内存(随机访问存储,RAM)用于存储和检索计算结果,如权重向量和激活参数,以及训练数据。

  • 一个或多个以太网连接,速度从1GB/s到100GB/s不等。在高端服务器上可能用到更高级的互连。

  • 高速扩展总线(PCIe)用于系统连接一个或多个GPU。服务器最多有个加速卡,通常以更高级的拓扑方式连接,而桌面系统则有个或个加速卡,具体取决于用户的预算和电源负载的大小。

  • 持久性存储设备,如磁盘驱动器、固态驱动器,在许多情况下使用高速扩展总线连接。它为系统需要的训练数据和中间检查点需要的存储提供了足够的传输速度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRFJ1HXw-1665750900238)(https://zh.d2l.ai/_images/mobo-symbol.svg)]
计算机组件的连接

高速扩展总线由直接连接到CPU的多个通道组成,将CPU与大多数组件(网络、GPU和存储)连接在一起。

12.4.2. 内存

最基本的内存主要用于存储需要随时访问的数据.

12.4.3. 存储器

随机访问存储的一些关键特性是 带宽(bandwidth)和 延迟(latency)。
存储设备也是如此,只是不同设备之间的特性差异可能更大。

12.4.3.1. 硬盘驱动器

硬盘驱动器(hard disk drive,HDD),它们包含许多旋转的盘片,这些盘片的磁头可以放置在任何给定的磁道上进行读写.
硬盘的主要优点之一是相对便宜,而它们的众多缺点之一是典型的灾难性故障模式和相对较高的读取延迟。

12.4.3.2. 固态驱动器

固态驱动器(solid state drives,SSD)使用闪存持久地存储信息。这允许更快地访问存储的记录。

12.4.3.3. 云存储

云存储提供了一系列可配置的性能。也就是说,虚拟机的存储在数量和速度上都能根据用户需要进行动态分配。
我们建议用户在延迟太高时(例如,在训练期间存在许多小记录时)增加IOPs的配置数。

12.4.4. CPU

中央处理器(central processing unit,CPU)是任何计算机的核心。它们由许多关键组件组成:处理器核心(processor cores)用于执行机器代码的、总线(bus)用于连接不同组件(注意,总线会因为处理器型号、各代产品和供应商之间的特定拓扑结构有明显不同)和缓存(cach)相比主内存实现更高的读取带宽和更低的延迟内存访问。
最后,因为高性能线性代数和卷积运算常见于媒体处理和机器学习中,所以几乎所有的现代CPU都包含向量处理单元(vector processing unit)为这些计算提供辅助。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qIUMz6zN-1665750900239)(https://zh.d2l.ai/_images/skylake.svg)]
描述了Intel Skylake消费级四核CPU。
它包含一个集成GPU、缓存和一个连接四个核心的环总线。例如:以太网、WiFi、蓝牙、SSD控制器和USB这些外围设备要么是芯片组的一部分,要么通过PCIe直接连接到CPU。

12.4.4.1. 微体系结构

每个处理器核心都由一组相当复杂的组件组成。
虽然不同时代的产品和供应商的细节有所不同,但基本功能都是标准的。
前端加载指令并尝试预测将采用哪条路径(例如,为了控制流),然后将指令从汇编代码解码为微指令。
汇编代码通常不是处理器执行的最低级别代码,而复杂的微指令却可以被解码成一组更低级的操作,然后由实际的执行核心处理。
通常执行核心能够同时执行许多操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpCp2uOJ-1665750900239)(https://zh.d2l.ai/_images/a77.svg)]

12.4.4.2. 矢量化

深度学习的计算量非常大。因此,为了满足机器学习的需要,CPU需要在一个时钟周期内执行许多操作。这种执行方式是通过向量处理单元实现的。

12.4.4.3. 缓存

  • 寄存器,严格来说不是缓存的一部分,用于帮助组织指令。也就是说,寄存器是CPU可以以时钟速度访问而没有延迟的存储位置。CPU有几十个寄存器,因此有效地使用寄存器取决于编译器(或程序员)。例如,C语言有一个register关键字。

  • 一级缓存是应对高内存带宽要求的第一道防线。一级缓存很小(常见的大小可能是32-64KB),内容通常分为数据和指令。当数据在一级缓存中被找到时,其访问速度非常快,如果没有在那里找到,搜索将沿着缓存层次结构向下寻找。

  • 二级缓存是下一站。根据架构设计和处理器大小的不同,它们可能是独占的也可能是共享的。即它们可能只能由给定的核心访问,或者在多个核心之间共享。二级缓存比一级缓存大(通常每个核心256-512KB),而速度也更慢。此外,我们首先需要检查以确定数据不在一级缓存中,才会访问二级缓存中的内容,这会增加少量的额外延迟。

  • 三级缓存在多个核之间共享,并且可以非常大。AMD的EPYC 3服务器的CPU在多个芯片上拥有高达256MB的高速缓存。更常见的数字在4-8MB范围内。

12.4.5. GPU和其他加速卡

毫不夸张地说,如果没有GPU,深度学习就不会成功。基于同样的原因,有理由认为GPU制造商的财富由于深度学习而显著增加。
这种硬件和算法的协同进化导致了这样一种情况:无论好坏,深度学习都是更可取的统计建模范式。

12.4.6. 网络和总线

  • PCIe,一种专用总线,用于每个通道点到点连接的高带宽需求(在通道插槽中的PCIe4.0上高达32GB/s),延迟时间为个位数的微秒(5μs)。PCIe链接非常宝贵。处理器拥有的数量:AMD的EPYC 3有个通道,Intel的Xeon每个芯片有个通道;在桌面级CPU上,数字分别是(Ryzen9)和(Core i9)。由于GPU​通常有个通道,这就限制了以全带宽与CPU连接的GPU数量。毕竟,它们还需要与其他高带宽外围设备(如存储和以太网)共享链路。与RAM访问一样,由于减少了数据包的开销,因此更适合大批量数据传输。

  • 以太网,连接计算机最常用的方式。虽然它比PCIe慢得多,但它的安装成本非常低,而且具有很强的弹性,覆盖的距离也要长得多。低级服务器的典型带宽为1GBit/s。高端设备(如云中的C5实例。这进一步增加了开销。与PCIe类似,以太网旨在连接两个设备,例如计算机和交换机。

  • 交换机,一种连接多个设备的方式,该连接方式下的任何一对设备都可以同时执行(通常是全带宽)点对点连接。例如,以太网交换机可能以高带宽连接台服务器。请注意,交换机并不是传统计算机网络所独有的。甚至PCIe通道也可以是可交换的,例如:P2实例就是将大量GPU连接到主机处理器。

  • NVLink,是PCIe的替代品,适用于非常高带宽的互连。它为每条链路提供高达300Gbit/s的数据传输速率。服务器GPU(Volta V100)有六个链路。而消费级GPU(RTX 2080Ti)只有一个链路,运行速度也降低到100Gbit/s。我们建议使用NCCL来实现GPU之间的高速数据传输。

12.4.8. 小结

  • 设备有运行开销。因此,数据传输要争取量大次少而不是量少次多。这适用于RAM、固态驱动器、网络和GPU。

  • 矢量化是性能的关键。确保充分了解你的加速器的特定功能。例如,一些Intel Xeon CPU特别适用于INT8操作,NVIDIA Volta GPU擅长FP16矩阵操作,NVIDIA Turing擅长FP16、INT8和INT4操作。

  • 在训练过程中数据类型过小导致的数值溢出可能是个问题(在推断过程中则影响不大)。

  • 数据混叠现象会导致严重的性能退化。位CPU应该按照位边界进行内存对齐。在GPU上建议保持卷积大小对齐,例如:与张量核对齐。

  • 将算法与硬件相匹配(例如,内存占用和带宽)。将命中参数装入缓存后,可以实现很大数量级的加速比。

  • 在验证实验结果之前,我们建议先在纸上勾勒出新算法的性能。关注的原因是数量级及以上的差异。

  • 使用调试器跟踪调试寻找性能的瓶颈。

  • 训练硬件和推断硬件在性能和价格方面有不同的优点。

你可能感兴趣的:(Python基础学习,python书籍笔记,#,人工智能)