NVIDIA 在 cuBLAS 12.5 中推出分组 GEMM API 以提升 DL 和 HPC 性能

realtime news  Jun 13, 2024 21:18  UTC 13:18

1 Min Read

根据 NVIDIA 技术博客,最新发布的 NVIDIA cuBLAS 库版本 12.5 带来了重要更新,旨在增强深度学习 (DL) 和高性能计算 (HPC) 工作负载的功能和性能。主要更新包括引入分组 GEMM API、改进 NVIDIA Hopper (H100 和 H200) 和 Ada (L40S) GPU 上的矩阵乘法 (matmul) 性能,以及增强性能调优选项。

分组 GEMM API

新引入的分组 GEMM API 通过允许不同的矩阵大小、转置和缩放因子分组并在一个内核启动中执行而推广了批处理 API。这种方法在某些场景下显示出 1.2 倍的加速,例如批次大小为 8 和 64 且输入输出均为 FP16 的专家混合模型 (MoE) 的生成阶段。

两个新的 API 集合支持分组 GEMM:

  1. cublas<t>gemmGroupedBatched 用于 FP32(包括 TF32)和 FP64 精度。
  2. cublasGemmGroupedBatchedEx 用于 FP16、BF16、FP32(包括 TF32)和 FP64 精度。

这些 API 支持可变形状、转置和缩放因子。示例可以在 NVIDIA/CUDALibrarySamples GitHub 仓库中找到。

最新 LLM Matmul 在 NVIDIA H100、H200 和 L40S GPU 上的性能

最近的性能快照显示,在 NVIDIA H100、H200 和 L40S GPU 上,Llama 2 70B 和 GPT3 训练阶段有显著的加速。特别是 H200 GPU 比 A100 在 Llama 2 70B 和 GPT3 训练阶段分别实现了近 3 倍和 5 倍的加速。这些改进是在不锁定 GPU 时钟的情况下测量的,并且计算了工作负载中每个 GEMM 重复的次数。

图 1. E2E 工作负载中仅 GEMM 部分的加速

库性能和基准测试

对运行时性能启发式方法和性能调优 API 进行了多项增强。cuBLAS 库在运行时使用推荐系统分派最快的可用配置来满足用户请求的 matmul。该系统基于大量问题和配置的实际计时数据进行训练。

图 2. 使用不同内核系列中的多种配置对各种 GEMM 进行采样

对于高级用户,cublasLtMatmulAlgoGetHeuristic API 使得性能调优变得可能,从而实现更快的实现。cuBLAS 中自动调优的示例可以在 NVIDIA/CUDALibrarySamples 仓库中找到。

图 4. cuBLAS 中自动调优的示例

cuBLASLt 中更好的功能和性能

自 cuBLAS 12.0 以来,引入了许多增强功能:

  1. 在 NVIDIA Ampere 和 Ada 上,BF16 和 FP16 精度之间熔合尾声支持的平衡。
  2. 在 NVIDIA Hopper 和 Ampere 上增加了额外的熔合尾声。
  3. 在 Ada GPU 上支持 FP8,并对 Ada L4、L40 和 L40S 进行性能更新。
  4. 移除了 cuBLASLt matmul API 的 M、N 和批次大小限制。
  5. 改进了启发式缓存的性能,用于高驱逐率的工作负载。
  6. cuBLAS 符号已在 Linux 存储库的 CUDA 工具包符号中提供。

有关 cuBLAS 的更多信息,请参见 文档示例



Read More