CANN高性能GEMM算子:ops-blas与catlass的分工
ops-blas和catlass的分工,本质上是"通用"和"定制"的分工。ops-blas:高性能GEMM的通用实现,稳定可靠,直接调用。catlass:高性能算子的模板生成工具,灵活定制,性能极致。两者配合,让昇腾CANN既能提供稳定的基础性能,又能针对特定场景做深度优化。如果你在昇腾上做模型训练或推理,理解这个分工,能帮你更好地选择用哪个库、什么时候需要自己定制算子。

很多人第一次看昇腾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既能提供稳定的基础性能,又能针对特定场景做深度优化。
如果你在昇腾上做模型训练或推理,理解这个分工,能帮你更好地选择用哪个库、什么时候需要自己定制算子。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)