跳转到主要内容

7.6 Graphcore IPU Bow:面向训练的数据中心加速器

图 7.18 列出了 Graphcore 智能处理单元(Intelligence Processing Unit,IPU)的主要特征,图 7.21 则是其裸片照片。IPU 是单芯片上的大规模并行处理器,第二代 IPU Bow 包含 1472 个 IPU 核心,每核每个时钟周期可完成 64 次 16 位浮点运算。与 GPU 一样,IPU 使用冗余核心提高这颗 832 mm² 大型芯片的良率,每 24 个核心中有一个冗余核心。IPU 使用 Graphcore 自行设计的 32 位标量指令。与 CPU 和 GPU 一样,它包含硬件多线程支持,每核直接支持 6 个线程。因此,和 GPU 编程一样,IPU 也鼓励程序员使用大量线程,保证有足够工作维持较高的利用率。

芯片中央的交换单元(Exchange Unit)负责各个 tile 之间的通信。与 TPU v4 和 A100 一样,IPU 提供片上链路,使多颗 IPU 可以互连成更大的系统。虽然理论上限是 64,000 颗 IPU,但提交 MLPerf 基准测试结果的最大系统包含 256 颗芯片(见 7.10 节)。每颗芯片上的交换单元与 IPU 链路配合,让程序员可以无缝地向任意芯片上的任意 tile 发送消息。全到全通信的测量结果表明,无论芯片内部还是芯片之间,其有效带宽都很高。

Graphcore IPU MK2 裸片照片:大量 tile 排列在中央交换单元两侧,边缘设有 IPU 链路
图 7.21 Graphcore IPU MK2 裸片照片

芯片采用 7 nm 工艺,裸片面积为 832 mm²。原图注写道,它包含 1492 个 tile,每个 tile 都有一个 IPU 核心和 624 KiB SRAM,总计每颗裸片 897 MiB。1 交换单元负责 tile 之间的全部通信。每颗裸片有 3 条 IPU 链路,可构建大规模系统;截至原书所述时期,经过基准测试的最大系统有 256 颗芯片。tile 中的存储器约占裸片面积的一半,tile 逻辑约占四分之一,交换单元约占十分之一,其余为 uncore。原图署名来源为《Sparsity-Aware and Re-configurable NPU》。图中 Tile、Exchange、Link 分别表示计算块、交换单元和链路。

为了简化设计和编程,IPU 的并行计算采用Bulk Synchronous Parallel(BSP)模型。BSP 把并行计算划分为一系列较大的步骤,以降低问题的复杂度。每一步先进行计算,再进行通信,最后执行屏障同步;因此,所有线程都必须完成同步,程序才能进入下一步。

IPU 最不同寻常的特征,是它的存储系统。每个 IPU Bow tile 有 624 KiB SRAM,1472 个核心合计每颗芯片拥有高达 897 MiB SRAM。这是第一代 IPU 的 3 倍,接近 TPU v4 片上 SRAM 的 6 倍,也是 A100 L2 缓存的 22 倍。另一个同样大胆的选择是:IPU 不连接 DRAM。

如果应用需要的存储容量超过 IPU 所能容纳的范围,就必须经过网关,访问与主机 ARM CPU 相连的 DDR4 DRAM。IPU 体系结构设计者押注的是:片上 SRAM 足以满足大多数 DNN 的需要(原文参见 7.11 节)。2

小结:IPU Bow 如何遵循设计准则

IPU Bow 对 7.2 节准则的遵循情况如下。

  1. 使用专用存储器,尽量缩短数据移动的距离。 IPU Bow 每核配置 624 KiB 存储器,尽量把数据留在本地。原书此处把每芯片总容量写为 897 GiB。3 唯一的 DRAM 位于 CPU 主机上,其带宽远低于前面几种 DSA 的 DRAM。
  2. 把取消先进微体系结构优化所节省的资源,投入更多运算单元或更大的存储器。 IPU Bow 有 94,208 个 16 位 ALU,同样远远超过同时代 CPU。
  3. 采用与应用领域匹配的最简单并行形式。 IPU 依赖多处理、多线程和一维 SIMD。
  4. 把数据大小与类型缩减到该领域所需的最简形式。 与其他 DSA 不同,IPU Bow 只支持 fp16 和 fp32。
  5. 采用领域专用编程语言,把代码移植到 DSA。 与 TPU 和 GPU 一样,IPU 使用 JAX、PyTorch 和 TensorFlow 编程框架。

  1. 译注:原图注写作 1492,而本节正文和图 7.18 均写作 1472。按 1472×624 KiB1472\times624\text{ KiB} 计算,约为 897 MiB,与图中总容量相符。 ↩︎

  2. 译注:关于片上 SRAM 容量限制的具体讨论实际位于 7.10 节“谬误与陷阱”,原文此处指向 7.11 节。 ↩︎

  3. 译注:此处 GiB 与前文的 MiB 不一致;1472×624 KiB=897 MiB1472\times624\text{ KiB}=897\text{ MiB},因此原文此处的 GiB 应为单位误写。 ↩︎