在当前的GPU硬件上,我们无需再使用FMA了,因为我们有更加高效的矩阵乘累加指令MMA(Matrix Multiply-Accumulate)指令,非常适合用来进行GEMM计算。 从CUDA9/Volta V100 GPU开始引入Tensor Core和WMMA API。 如上图所示,我们仅需要使用一个warp(32threads)和一条指令,便可完成M8xN8xK4的GEMM计算。 上图展示了Nvidia ...
对于常见的 GEMM 优化策略,例如sgemm128×64×8指单个线程块处理128×64个结果,线程内K循环一次读入矩阵A中的128×8个元素,矩阵B中的64×8,线程块内线程数 256,那么访存次数为\frac{128\times 8+8\times 64}{256}=6,FMA 次数约为\frac{128\times 64\times 8}{256}=256,线程计算强度为\frac{256}{6...
将deep_gemm导入Python项目,就可以开始享用了。这个代码库仅包含GEMM kernel。它要求LHS扩展因子进行TMA对齐和转置,并且仅支持NT格式(非转置LHS和转置RHS)。对于转置或其他FP8转换操作,需单独实现或将它们融合到先前的kernel中。虽然该库提供了一些简单的PyTorch实用函数,但这些函数可能会导致性能下降。DeepSeek的主...
融合per_group_token_quant(用于在线FP8量化)、MoE排序和Group GEMM可以通过将Radix Sort计算逻辑纳入Group GEMM pipeline轻松解决:即统计出现次数以计算偏移量,随后进行并行放置。其中最关键的问题之一是如何平衡Radix Sorting和Group GEMM这两种计算负载。在AMD数据中心芯片中,Group GEMM片段更可能均匀分布在XCD内...
将deep_gemm导入Python项目,就可以开始享用了。 这个代码库仅包含GEMM kernel。它要求LHS扩展因子进行TMA对齐和转置,并且仅支持NT格式(非转置LHS和转置RHS)。对于转置或其他FP8转换操作,需单独实现或将它们融合到先前的kernel中。虽然该库提供了一些简单的PyTorch实用函数,但这些函数可能会导致性能下降。DeepSeek的主要...
将deep_gemm导入Python项目,就可以开始享用了。 这个代码库仅包含GEMM kernel。它要求LHS扩展因子进行TMA对齐和转置,并且仅支持NT格式(非转置LHS和转置RHS)。对于转置或其他FP8转换操作,需单独实现或将它们融合到先前的kernel中。虽然该库提供了一些简单的PyTorch实用函数,但这些函数可能会导致性能下降。DeepSeek的主要...
本文主要是对深入浅出GPU优化系列:GEMM优化(一) - 知乎,深入浅出GPU优化系列:GEMM优化(二) - 知乎以及深入浅出GPU优化系列:GEMM优化(三) - 知乎三篇文章相关内容的学习整理. 本文可以作为 如何优化 CUDA 矩阵乘内核以获得类似 cuBLAS 的性能: 工作日志 这篇文章的补充. 可以看作文中Kernel 6的后续优化. 在...
DeepGEMM的代码库不仅包含了GEMM kernel,还提供了一些实用函数和环境变量,方便开发者进行二次开发和优化。DeepSeek还详细解释了DeepGEMM的设计原理和优化细节,如利用Hopper TMA功能实现更快的数据移动、针对不同warpgroups定制的寄存器计数控制等。这些优化措施共同提升了DeepGEMM的性能,使其在深度学习领域具有更强的竞...
将deep_gemm 导入 Python 项目,就可以开始享用了。 这个代码库仅包含 GEMM kernel。它要求 LHS 扩展因子进行 TMA 对齐和转置,并且仅支持 NT 格式(非转置 LHS 和转置 RHS)。对于转置或其他 FP8 转换操作,需单独实现或将它们融合到先前的 kernel 中。虽然该库提供了一些简单的 PyTorch 实用函数,但这些函数可能会...