首页 > 其他分享 >CUTLASS: NVIDIA的高性能CUDA线性代数库

CUTLASS: NVIDIA的高性能CUDA线性代数库

时间:2024-10-17 14:33:50浏览次数:7  
标签:CUTLASS Tensor CUDA NVIDIA GPU GEMM

CUTLASS简介
CUTLASS (CUDA Templates for Linear Algebra Subroutines) 是NVIDIA开发的一个开源CUDA C++模板库,用于实现高性能的矩阵乘法(GEMM)和相关计算。它采用了类似cuBLAS和cuDNN的分层分解和数据移动策略,将这些"移动部件"分解为可重用的模块化软件组件,通过C++模板类进行抽象。

CUTLASS的主要特点包括:

高性能:CUTLASS原语非常高效,在构建设备级GEMM内核时,其峰值性能可与cuBLAS相媲美。

灵活性:CUTLASS提供了不同级别的并行化层次结构原语,可以通过自定义平铺大小、数据类型和其他算法策略进行专门化和调优。

多精度支持:CUTLASS提供了广泛的混合精度计算支持,包括FP16、BF16、TF32、FP32、FP64等浮点类型,以及整数和二进制数据类型。

Tensor Core支持:CUTLASS演示了针对NVIDIA Volta、Turing、Ampere和Hopper架构实现的高吞吐量Tensor Core的同步矩阵乘法操作。

卷积支持:除了GEMM,CUTLASS还通过隐式GEMM算法实现了高性能卷积。

CUTLASS 3.5的新特性
CUTLASS 3.5.1是CUTLASS的最新更新版本,主要新增了以下功能:

100行代码的最小SM90 WGMMA + TMA GEMM示例。

TMA复制原子中L2 cache_hints的暴露。

CUTLASS库分析器和示例48中光栅顺序和tile swizzle范围的暴露。

用于Hopper指针数组批处理内核的基于TMA存储和支持EVT的epilogues。

用于CUTLASS 2.x Ampere内核的新GemmSparseUniversal API。

CUDA主机适配器扩展以支持TMA描述符构造驱动程序API。

在CUTLASS库和分析器中包含更多Hopper fprop、dgrad和wgrad卷积内核。

卷积内核中对残差加法(beta != 0)的支持。

CUTLASS 2.x的新卷积epilogue,以支持非打包的NHWC输出。

对CUTLASS核心目录中包含文件的重构,以减少循环依赖。

用于设置VSCode以更好地使用CUTLASS的指南和扩展的代码风格指南。

对MSVC作为主机编译器的更好支持。

许多性能优化、改进和错误修复,包括对FlashAttention-2的修复。

使用CUDA工具包版本12.4和12.5u1进行最佳代码生成。

这些更新进一步提高了CUTLASS的性能和易用性,使其能够更好地支持最新的GPU架构和应用需求。

CUTLASS的性能
CUTLASS原语在构建设备级GEMM内核时表现出与cuBLAS相当的峰值性能。以下是CUTLASS在NVIDIA H100 GPU上的性能数据:

CUTLASS GEMM性能

上图显示了自CUTLASS 3.1以来,CUTLASS在NVIDIA H100(NVIDIA Hopper架构)上的持续性能改进。CUTLASS 3.5.1使用CUDA 12.5u1工具包编译。Tensor Core操作使用CUDA的mma和wgmma指令实现。

在使用CUTLASS构建块构建设备级隐式gemm(Fprop、Dgrad和Wgrad)内核时,CUTLASS的性能也与cuDNN相当:

CUTLASS隐式GEMM性能

上图显示了在NVIDIA A100上运行Resnet-50层时,CUTLASS与cuDNN的性能比较。

CUTLASS的兼容性
CUTLASS要求C++17主机编译器,并在使用CUDA 12.4工具包构建时性能最佳。它还兼容CUDA 11.4及以上版本。

CUTLASS可以在以下NVIDIA GPU上成功运行,并且预计在基于Volta、Turing、Ampere、Ada和Hopper架构的NVIDIA GPU上都能高效运行:

NVIDIA V100 Tensor Core GPU (CUDA计算能力7.0)
NVIDIA TitanV (7.0)
NVIDIA GeForce RTX 2080 TI, 2080, 2070 (7.5)
NVIDIA T4 (7.5)
NVIDIA A100 Tensor Core GPU (8.0)
NVIDIA A10 (8.6)
NVIDIA GeForce RTX 3090 (8.6)
NVIDIA GeForce RTX 4090 (8.9)
NVIDIA L40 (8.9)
NVIDIA H100 Tensor Core GPU (9.0)
CUTLASS的文档和资源
CUTLASS提供了详细的文档来帮助用户理解和使用该库:

快速入门指南 - 构建和运行CUTLASS
功能列表 - 总结CUTLASS中可用的功能
CUDA中的高效GEMM - 描述如何在CUDA中高效实现GEMM内核
CUTLASS 3.x设计 - 描述CUTLASS 3.x的设计、其优势以及CuTe如何使我们能够编写更多可组合的组件
GEMM API 3.x - 描述CUTLASS 3.x GEMM模型和C++模板概念
隐式GEMM卷积 - 描述CUTLASS中的2-D和3-D卷积
此外,NVIDIA还提供了一系列技术讲座和演示,深入探讨了CUTLASS的设计理念和使用方法:

CUTLASS:CUDA中各级别和规模的密集线性代数软件原语
开发CUDA内核以将Tensor Cores推向NVIDIA A100的绝对极限
在CUTLASS中使用Tensor Cores加速卷积
通过增加CUTLASS中的Tensor Core利用率来加速反向数据梯度
CUTLASS:Python API、增强功能和NVIDIA Hopper
这些资源为开发者提供了深入了解CUTLASS内部工作原理和最佳实践的机会。

构建和使用CUTLASS
CUTLASS是一个仅头文件的模板库,不需要单独构建就可以被其他项目使用。客户端应用程序应该将CUTLASS的include/目录包含在其包含路径中。

CUTLASS的单元测试、示例和实用程序可以使用CMake构建。最低CMake版本要求在快速入门指南中给出。确保CUDACXX环境变量指向系统上安装的CUDA工具包中的NVCC。

构建CUTLASS的基本步骤如下:

创建构建目录:

$ mkdir build && cd build
运行CMake:

$ cmake .. -DCUTLASS_NVCC_ARCHS=80 # 为NVIDIA的Ampere架构编译
编译和运行CUTLASS单元测试:

$ make test_unit -j
CUTLASS还提供了一个性能分析工具,可以用来启动和测试各种GEMM内核。可以通过以下命令构建:

$ make cutlass_profiler -j16
结论
CUTLASS作为NVIDIA开发的开源CUDA线性代数库,为深度学习和科学计算等领域提供了强大的加速能力。它不仅提供了高性能的矩阵乘法和卷积实现,还通过灵活的模板设计允许用户根据特定需求进行定制和优化。随着版本的不断更新,CUTLASS持续改进其性能和功能,支持最新的GPU架构和计算需求。对于需要在NVIDIA GPU上进行高性能线性代数计算的开发者来说,CUTLASS是一个值得深入研究和使用的强大工具。
文章链接:www.dongaigc.com/a/cutlass-nvidia-cuda-algebra-lib
https://www.dongaigc.com/a/cutlass-nvidia-cuda-algebra-lib

标签:CUTLASS,Tensor,CUDA,NVIDIA,GPU,GEMM
From: https://www.cnblogs.com/dongai/p/18472262

相关文章

  • VMware Private AI Foundation with NVIDIA - 生成式人工智能解决方案
    VMwarePrivateAIFoundationwithNVIDIA-生成式人工智能解决方案通过NVIDIA的加速计算以及VMwareCloudFoundation的虚拟基础架构管理和云管理来运行生成式AI工作负载请访问原文链接:https://sysin.org/blog/vmware-private-ai-foundation-nvidia/查看最新版。原创......
  • Nvidia RTX Desktop Manager跳过硬件要求
    相信大家看了上一篇文章,肯定还想继续白*英伟达。所以今天我给大家带来了NvidiaRTXDesktopManager跳过硬件要求的教程。如果要跳过硬件要求的话,还是改NVI文件。由于NVI文件非常多,这里我就不一一介绍怎么删除了。如果感兴趣的朋友可以自己研究。这里我就直接放出懒人包了。......
  • Stanford CS149 -- Assignment 3: A Simple CUDA Renderer
    作业描述及代码参见:CS149-asst3实验环境:WSL2;GeForceMX350;Cuda12.6第一部分:CUDA热身练习1:SAXPY实验结果:相比基于CPU的实现,性能明显下降。这是由于SAXPY属于I/O密集型任务,计算量较小,主要的时间耗费在数据的转移。第二部分:CUDA热身练习2:并行前缀和第三部分:简单......
  • pytorch与cuda对应版本
      ......
  • 关于如何更改Cuda的版本的一些事情
    1、网上说的很全面了,这里我把我遇到的一些问题和解决方案罗列出来,以便未来的学习和了解2Nvidia驱动会向下兼容,所以安装最新版的就可以了cuda版本按照需求来做就可以了step.1sudoshcuda_8.0.61_375.26_linux.run#开始安装step.2修改路径文件,添加环境变量nano~/.bashr......
  • 【异常错误】RuntimeError: CUDA error: device-side assert triggered 遇到这种错误
    遇到的错误:运行的时候突然就这样了 /pytorch/aten/src/ATen/native/cuda/Indexing.cu:699:indexSelectLargeIndex:block:[283,0,0],thread:[56,0,0]Assertion`srcIndex<srcSelectDimSize`failed./pytorch/aten/src/ATen/native/cuda/Indexing.cu:699:indexSele......
  • 【NVIDIA NIM 黑客松训练营】使用NVIDIA AI Workbench 创建一个在线代码生成器
    随着人工智能技术的不断进步,越来越多的工具和服务开始集成AI功能来提升用户体验。本教程将指导你如何使用PythonFlask框架结合NVIDIA提供的NIM服务,创建一个简单的在线代码生成器。用户可以通过一个直观的Web界面输入请求,系统将返回对应的Python代码。项目背景对于那些正......
  • 停止训练后报错torch.cuda.OutOfMemoryError: CUDA out of memory. 及查看进程和停止
    停止训练后遇到 torch.cuda.OutOfMemoryError 错误,意味着你的GPU内存不足,无法分配更多内存给当前的PyTorch操作。查看进程并关闭相关进程就可恢复。在不同的操作系统中,查看进程的方法有所不同。以下是常见操作系统的命令:在Linux和macOS系统中,你可以使用以下几种方法来......
  • NVIDIA Jetson Orin边缘计算MEC全局化部署
    前情提要随着AI技术已经在交通、物流、安防、智能制造等方面适用广泛,市场对更低功耗、更高性价比和更强大的AI计算性能的需求不断增长。企业基于NVIDIA平台产品开发势在必行!集和诚作为英伟达NPN伙伴,与英伟达紧密协作,并积极投入基于英伟达平台AI边缘计算控制器的研发过程。......
  • Ubuntu+Cuda+cudnn安装
    问题描述实验室的Ubuntu主机重启之后显示器分辨率显示异常,双屏只亮了一个,另外一个显示无信号。打开nvidia-smi显示找不到驱动,遂从网上搜集重新安装驱动以及cudnn的教程。此文记录此过程,方便后续查阅。软硬件版本:Rtx3090+Ubuntu22.041.安装驱动#removenivida*sudoapt-g......