[人工智能]AI芯片的一些科普( 三 )


[人工智能]AI芯片的一些科普
本文插图

数据类型
高位(Higher-bit)数据类型可以表示更广泛的数字范围(例如:一组较大的整数) 或在有限范围内的更高精度的数字(例如:在0到1之间的高精度十进制数) 。 幸运的是 , 在许多人工智能算法中 , 训练或推理也会执行 , 或者几乎同样地执行 , 如果一些计算是用8位或16位数据执行的 , 这些数据代表有限或低精度的数字范围 。 即使模拟计算也足以满足一些人工智能算法 。 这些技术工作的原因如下:
首先 , 经过训练的DNN通常不受噪声的影响 , 因此在推理计算中舍入数字不会影响结果;
第二 , DNN中的某些数值参数事先已知的值仅在一个小的数值范围内 , 准确地说是可以用低位数存储的数据类型 。
低位(Lower-bit)数据计算可以用包含较少晶体管的执行单元进行 。 这产生了两个好处 。 首先 , 如果每个执行单元需要更少的晶体管 , 芯片可以包括更多的并行执行单元 。 其次 , 低位计算更有效率 , 需要更少的操作.. 一个8位执行单元使用比16位执行单元少6倍的电路面积和6倍的能源 。
(3)内存优化
如果AI算法的内存访问模式是可预测的 , 那么AI芯片可以优化这些可预测用途的内存数量、位置和类型 。 例如 , 一些AI芯片包括足够的
内存来存储整个AI算法 。 与片外存储器通信相比 , 片内存储器访问提供了更好的效率和速度改进 。
当模型变得太大而无法存储在单个AI芯片上时 , 模型并行性成为一个特别有用的工具;通过分割模型 , 可以在并行连接的不同AI芯片上训练不同的部分 。
相比之下 , 大多数CPU都是基于“冯诺依曼”设计 , 其中包括一个单一的中央总线——一个在CPU和存储程序代码和数据的单独内存芯片之间共享数据的通信系统 。 考虑到总线的带宽有限 , CPU必须顺序地单独访问代码和数据 , 并经历一个“冯诺依曼瓶颈” , 其中内存访问延迟阻止CPU通过高晶体管开关速度获得更快的速度 。
冯·诺依曼设计对于通用计算是有用的, 但AI芯片不需要冯诺依曼设计或经历冯诺依曼瓶颈 。
(4)特定领域的语言
特定领域语言(Domain-specific languages :DSL)为在专用芯片上运行的专用应用程序提供了效率增益 。
程序员以人类理解的方式 , 使用计算机语言编写计算机代码(即计算机看得懂的指令) 。 计算机程序称为编译器(或解释器) , 然后将此代码转换为处理器直接可读和可执行的表单 。 不同的计算机语言在不同的抽象层次上运作 。
例如 , 像Python这样的高级编程语言被简化为人类可访问性 , 但是Python代码在执行时往往相对较慢 , 因为将人类的高级指令转换为为特定处理器优化的机器代码的复杂性很高 。 相比之下 , 在较低抽象级别上操作的C类编程语言需要更复杂的代码(以及程序员的努力) , 但它们的代码执行效率往往更高 , 因为更容易转换成为特定处理器优化的机器代码 。 然而 , 这两个例子都是通用编程语言 , 其代码可以实现各种各样的计算 , 但不是专门为特定计算有效地转换成机器代码的 。
相比之下 , DSL是专门为专用芯片高效编程和执行的 。 一个值得注意的例子是谷歌的TensorFlow , 它是DSL , 它的代码在AI芯片上运行的效率比任何通用语言都高 。 有时 , DSL的优点可以通过PyTorch 这样的专门代码库来实现:这些代码库将专门的AI处理器的知识打包在通用语言(例如Python在这种情况下)可以调用的函数中 。
AI芯片类型
如上所述 , 人工智能芯片包括三类:图形处理器(GPU)、现场可编程门阵列(FPGA)和专用集成电路(ASIC) 。
GPU最初是为得益于并行计算的图像处理应用而设计的 。 2012年 , GPU开始被越来越多地用于训练人工智能系统 , 到2017年 , GPU占据主导地位 。 GPU有时也用于推理 。 然而 , 尽管GPU允许可以比CPU有更大程度的并行 , 但它仍然是为通用计算而设计的 。


推荐阅读