在这里插入图片描述

很多人第一次看昇腾CANN的算子仓库,会被两个名字搞晕:ops-blas和catlass。它们都和高性能的矩阵乘法(GEMM)有关,但定位完全不同。

要理解它们的分工,得先搞清楚:一个高性能算子是怎么从"能跑"变成"跑得快"的。

先说ops-blas:高性能GEMM的基石

ops-blas是CANN的核心算子仓库之一,专门做线性代数基础运算,其中最重要的就是GEMM(General Matrix Multiplication)。

这个库的特点是:

它提供的是经过深度优化的、通用的矩阵乘法实现。不管你的矩阵是f32还是f16,不管你跑在Ascend 910还是950上,ops-blas的GEMM都能给你一个不错的性能基线。

但"通用"的反面是"不够定制"。如果你的矩阵有特殊结构(比如Transformer里的QKV矩阵乘法,有固定的模式和尺寸),ops-blas的通用实现就不够极致了。

这时候,catlass登场。

catlass不是CUTLASS的翻版

很多人看到catlass的名字,就觉得它是NVIDIA CUTLASS的昇腾翻版。这个理解不对。

CUTLASS是NVIDIA推出的一个模板库,让开发者能方便地写高性能的CUDA算子。catlass的定位类似,但它是为昇腾NPU的达芬奇架构量身定做的。

catlass的核心价值是:让你用模板快速生成针对特定场景优化的高性能算子

比如,你要写一个专门针对Transformer attention的GEMM算子,用ops-blas你得从通用的GEMM接口适配。用catlass,你可以直接选一个attention专用的模板,填几个参数(矩阵尺寸、数据类型、tile大小),就能生成一个高度优化的算子。

所以,catlass和ops-blas的关系不是竞争,是上下游

分工:一个提供通用能力,一个提供定制工具

具体来说:

ops-blas的定位:高性能线性代数算子的实现库。它里面的GEMM实现,是直接给你调用的。你写PyTorch模型,底层掉用的就是ops-blas里的GEMM。

catlass的定位:高性能算子的模板生成库。它本身不直接提供给你调用的GEMM接口,而是提供一套模板,让你能快速生成针对你场景优化的GEMM(或其他算子)。

打个比方:

  • ops-blas是"成品店",里面的GEMM算子都是现成的,拿来就能用。
  • catlass是"定制工坊",给你工具和模板,让你能打造最适合你需求的GEMM算子。

依赖关系:谁依赖谁?

从CANN的仓库依赖图来看:ops-nn / ops-math / ops-blas ← catlass

这个箭头的意思是:catlass生成的优化算子,可以被ops-blas、ops-nn这些算子仓库引用。

为什么?因为catlass生成的算子,性能通常比ops-blas的通用实现更好。所以,ops-blas在提供通用GEMM的同时,也会引用catlass生成的某些特定场景的优化实现。

实际使用中:

  • 如果你是普通用户,直接用ops-blas的GEMM就够了,性能好,稳定性高。
  • 如果你是算子开发者,或者你的模型有特殊的矩阵运算需求(比如新型attention机制),用catlass定制算子,能获得更好的性能。

在CANN架构里的位置

ops-blas和catlass都在第2层:昇腾计算服务层的AOL算子库里。

具体来说:

  • ops-blas提供的是基础线性代数能力,被上层的框架适配器(Framework Adaptor)直接调用。
  • catlass提供的是算子模板生成能力,它生成的优化算子,会被 ops-transformer、ascend-transformer-boost这些上层库引用。

所以,你在用PyTorch训练模型时,底层走的是ops-blas的GEMM。但如果你用的是ATB(Ascend Transformer Boost)这样的加速库,它底层可能调用了catlass生成的优化算子。

总结

ops-blas和catlass的分工,本质上是"通用"和"定制"的分工。

  • ops-blas:高性能GEMM的通用实现,稳定可靠,直接调用。
  • catlass:高性能算子的模板生成工具,灵活定制,性能极致。

两者配合,让昇腾CANN既能提供稳定的基础性能,又能针对特定场景做深度优化。

如果你在昇腾上做模型训练或推理,理解这个分工,能帮你更好地选择用哪个库、什么时候需要自己定制算子。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐