CATLASS


Latest News

请参阅CHANGELOG以查看当前及历史版本的详细更新内容。


📌 简介

CATLASS(CANN Templates for Linear Algebra Subroutines),中文名为昇腾算子模板库,是一个聚焦于提供高性能矩阵乘类算子基础模板的代码库。

通过抽象分层的方式将矩阵类算子代码模板化,从而实现算子计算逻辑的白盒化组装,让算子代码可复用,可替换,可局部修改。针对昇腾硬件特点进行设计,可以支持复杂场景流水排布,如Flash Attention等算子。在上层代码逻辑共享的同时,支持底层硬件差异特化。

模板库针对定制场景使能快速开发能力,提供不同场景下的性能优化模块供开发者组装定制,在定制shape下的性能能达到相应算子标杆性能的0.98~1.2倍。

Matmul性能对比
GroupedMatmul性能对比

本代码库为CATLASS联创代码仓。结合昇腾生态力量,共同设计研发算子模板,并提供典型算子的高性能实现代码样例,概述详情参考这里

⚡️ 快速上手

为快速体验CATLASS的算子开发与使用,请参考下述内容。

  • 快速入门:快速上手模板库使用,编译执行已有的算子样例。
  • 基础开发指南:以基础Matmul算子为例,介绍基于CATLASS的算子开发实践;
  • 开发者实践: 从算子编写至编译测试,再到Tiling调优与算子优化,从新手到进阶的实践示例。

📚 进阶参考

下述资料可助力您深入开展CATLASS算子的开发与调优,实现更优性能的GEMM类算子。

  • CATLASS API: 介绍CATLASS的分层特征与通用矩阵乘法GEMM API。
  • CATLASS性能调测: 汇总CATLASS工程开发中的调测办法,有助于消除漏洞,分析性能的瓶颈点。
  • CATLASS进阶实践: 汇总CATLASS的进阶知识,如Tiling调参方法、Dispatch策略等,实现更高性能。

📁 目录结构说明

关键目录如下,详细目录参见项目目录

catlass
├── cmake                     # cmake工程文件
├── docs                      # 文档存放目录
├── examples                  # kernel算子样例总目录
|   ├── 00_basic_matmul       # 单算子样例
|   |   ├── basic_matmul.cpp  # Host侧算子调用
|   |   ├── CMakeLists.txt
|   |   └── README.md         # 算子说明示例
|   ├── ...   
|   └── python_extension      # Python调用CATLASS算子
|                             # 的工程组件
├── include                   # 模板头文件集
|   ├── catlass               # 不同层级的算子实现逻辑
|   └── tla                   # 计算关联的基础数据结构
├── scripts                   # 编译脚本
|   └── build.sh              # 算子样例编译脚本
├── tests                     # 测试用例
└── tools                     # 相关工具
    └── tuner                 # Tiling自动寻优工具

💻 软硬件配套说明

CATLASS所需的软硬件环境依赖如下:

不同CATLASS发行版可支持的硬件平台及所需的最低CANN版本如下表:

CATLASS社区版本 最低支持CANN包版本 支持昇腾产品
v.1.2.2 及以上 社区版8.2.RC1 Atlas A2训练/推理产品
Atlas A3训练/推理产品
v1.2.1~v1.0.0 社区版8.2.RC1.alpha002 Atlas A2训练/推理产品
Atlas A3训练/推理产品
  • 对于某些调测工具,可能需要较上述更新的CANN版本,详情参考调测工具文档

下述环境经测试支持当前CATLASS构建:

系统 CANN gcc cmake python
Ubuntu 20.04.5 8.2.RC1 9.3 3.16 3.10
Ubuntu 22.04.5 8.2.RC1 11.3 3.22 3.10
openEuler 22.03 SP4 8.2.RC1 10.3 3.22 3.10

👥 合作贡献者

华南理工大学 陆璐教授团队

科大讯飞 研究院工程组

📝相关信息