揭秘英伟达 GPU 架构演进近十年,从费米到安培( 四 )


揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
FP16 的问题在于表示范围不够大,在梯度计算时容易出现 underflow, 而且前后向计算也相对容易出现 overflow, 相对来说,在深度学习计算里,范围比精度要重要得多,于是有了 BF16,牺牲了精度,保持和 FP32 差不多的范围,在此前比较知名支持 BF16 的就是 TPU. 而 TF32 的设计,在于即汲取了 BF16 的好处,又保持了一定程度对主流 FP32 的兼容,FP32 只要截断就是 TF32 了 。先截断成 TF32 计算,再转成 FP32, 对历史的工作几乎无影响,如下图:
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
另一个变化则是细粒度的结构化稀疏,深度学习模型压缩这个领域除了量化,稀疏也是一个大方向,只是稀疏化模型难以利用硬件加速,这个版本的 GPU 则为稀疏提供了一些支持,当前的主要目的则是应用于 Inference 场景 。
首先说 NVIDIA 定义的稀疏矩阵,这里称为 2:4 的结构化稀疏,2:4 的意思是每 4 个元素当中有 2 个值非 0,如下图:
揭秘英伟达 GPU 架构演进近十年,从费米到安培

文章插图
 
首先使用正常的稠密 weight 训练,训练到收敛后裁剪到 2:4 的结构化稀疏 Tensor,然后走 fine tune 继续训练非 0 的 weight, 之后得到的 2:4 结构化稀疏 weight
理想情况下具有和稠密 weight 一样的精确度,然后使用此稀疏化后的 weight 进行 Inference. 而这个版本的 TensorCore 支持一个 2:4 的结构化稀疏矩阵与另一个稠密矩阵直接相乘 。
最后一个比较重要的特性就是 MIG(Multi-Instance GPU)了,虽然业界的计算规模确实越来越大,但也存在不少的任务因为其特性导致无法用满 GPU 导致资源浪费,所以存在需求在一个 GPU 上跑多个任务,在这之前有些云计算厂商会提供虚拟化方案 。而在安培中,会为此需求提供支持,称为 MIG.
可能会有人有疑问,在 Volta 中引入的多进程支持不是解决了问题吗?举个例子,在 Volta 中,虽然多个进程可以并行,但是由于所有进程都可以访问所有的内存资源,可能存在一个进程把所有的 DRAM 带宽占满影响到其他进程的运行,而这些被影响的进程很可能有 Throughput/Latency 要求 。所以我们需要更严格的隔离 。
而在安培 MIG 中,每个 A100 可以被分为 7 个 GPU 实例被不同的任务使用 。每个实例的 SMs 有独立的内存资源,可以保证每个任务有符合预期的稳定的 Throughput/Latency. 用户可以将这些虚拟的 GPU 实例当成真实的 GPU 使用 。
结语事实上关于各个架构的细节还有很多,限于篇幅这里只能简单概述 。有机会后面再分享一些更具体的关于 CUDA 编程的东西 。也欢迎大家与我多多交流(线上线下都欢迎),共同进步 。
原文来源:
https://zhuanlan.zhihu.com/p/413145211
Reference
  • https://images.nvidia.com/aem-dam/en-zz/Solutions/geforce/ampere/pdf/NVIDIA-ampere-GA102-GPU-Architecture-Whitepaper-V1.pdf
  • https://images.nvidia.com/aem-dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf
  • https://images.nvidia.com/content/volta-architecture/pdf/volta-architecture-whitepaper.pdf
  • https://images.nvidia.com/content/pdf/tesla/whitepaper/pascal-architecture-whitepaper.pdf
  • https://www.microway.com/download/whitepaper/NVIDIA_Maxwell_GM204_Architecture_Whitepaper.pdf
  • https://www.nvidia.com/content/PDF/product-specifications/GeForce_GTX_680_Whitepaper_FINAL.pdf
  • http://www.hardwarebg.com/b4k/files/nvidia_gf100_whitepaper.pdf
  • https://developer.nvidia.com/content/life-triangle-nvidias-logical-pipeline
  • https://blog.nowcoder.net/n/4dcb2f6a55a34de9ae6c9067ba3d3bfb
  • https://jcf94.com/2020/05/24/2020-05-24-nvidia-arch/
  • https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
  • https://en.wikipedia.org/wiki/Bfloat16_floating-point_format




推荐阅读