打破硬件障碍:适用于较旧 GPU 的软件 FP8

深度学习工作负载越来越受内存限制,GPU 核心在等待数据传输时处于空闲状态。 FP8 精度在较新的硬件上解决了这个问题,但是已经部署的数百万个 RTX 30 和 20 系列 GPU 又如何呢? Feather 证明,通过按位打包进行基于软件的 FP8 仿真可以实现接近理论的 4 倍带宽改进(实测为 3.3 倍),无需昂贵的硬件升级即可实现高效的深度学习。《打破硬件障碍:适用于旧版 GPU 的软件 FP8》一文首先出现在《走向数据科学》上。

来源:走向数据科学

随着深度学习模型变得越来越大、数据集不断扩大,从业者面临着一个越来越常见的瓶颈:GPU 内存带宽。虽然尖端硬件提供 FP8 精度来加速训练和推理,但大多数数据科学家和机器学习工程师使用缺乏此功能的旧 GPU。

生态系统中的这种差距促使我构建 Feather,这是一个开源库,它利用基于软件的方法在广泛可用的硬件上提供类似 FP8 的性能改进。我创建这个工具是为了让更广泛的 ML 社区更容易地使用高效的深度学习,我欢迎贡献

符号和缩写

  • FPX:X位浮点数
  • UX:X 位无符号整数
  • GPU:图形处理单元
  • SRAM:静态RAM(片上GPU缓存)
  • HBM:高带宽内存(GPU VRAM)
  • GEMV:通用矩阵向量乘法
  • 动机

    FP8 处理已在深度学习社区中被证明是有效的 [1];然而,只有特定的最新硬件架构(Ada 和 Blackwell)支持它,限制了从业者和研究人员利用它的好处。我自己有一个“Nvidia RTX 3050 6GB笔记本电脑GPU”,不幸的是它在硬件层面不支持FP8操作。

    受到基于软件的解决方案(例如,在不支持游戏本机硬件加速的计算机上进行软件加速渲染)的启发,本文提出了一个有趣的解决方案,可以利用 FP8 数据类型的强大功能

    将 FP8 和 FP16 包装在 FP32 容器中

    受按位运算和打包技术的启发,本文提出了一种将两个 FP16 或四个 FP8 打包到单个 FP32 中的算法。这允许打包两倍或四倍的内存,受益于较低的内存占用,同时仅牺牲少量的精度。

    GPU 内存层次结构

    较低精度类型和带宽

    硬件级别支持

    打包方式

    使用按位运算符,可以轻松地将 FP16 类型打包为 FP32。该算法描述如下。

    包装 FP16

    包装 FP8