根据 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:
- cublas<t>gemmGroupedBatched 用于 FP32(包括 TF32)和 FP64 精度。
- 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 重复的次数。
库性能和基准测试
对运行时性能启发式方法和性能调优 API 进行了多项增强。cuBLAS 库在运行时使用推荐系统分派最快的可用配置来满足用户请求的 matmul。该系统基于大量问题和配置的实际计时数据进行训练。
对于高级用户,cublasLtMatmulAlgoGetHeuristic API 使得性能调优变得可能,从而实现更快的实现。cuBLAS 中自动调优的示例可以在 NVIDIA/CUDALibrarySamples 仓库中找到。
cuBLASLt 中更好的功能和性能
自 cuBLAS 12.0 以来,引入了许多增强功能:
- 在 NVIDIA Ampere 和 Ada 上,BF16 和 FP16 精度之间熔合尾声支持的平衡。
- 在 NVIDIA Hopper 和 Ampere 上增加了额外的熔合尾声。
- 在 Ada GPU 上支持 FP8,并对 Ada L4、L40 和 L40S 进行性能更新。
- 移除了 cuBLASLt matmul API 的 M、N 和批次大小限制。
- 改进了启发式缓存的性能,用于高驱逐率的工作负载。
- cuBLAS 符号已在 Linux 存储库的 CUDA 工具包符号中提供。