当前位置: 首页 > news >正文

catlass与ops-blas的协作:模板生成的算子如何接入AOL

catlass能快速生成高性能算子但生成的算子怎么让上层框架调用到这些算子怎么注册到AOL算子库和其他算子库的算子怎么协作这些都是最后一步的问题——算子写好了但如果接不进生态等于白写。这篇文章拆解catlass和ops-blas的协作机制看模板生成的算子如何无缝接入CANN的算子生态。两个仓库的分工模板生成 vs 手工精调catlass和ops-blas都做GEMM但定位完全不同。catlass是算子工厂——用模板快速生成各种变体的GEMM算子。你想要FP16的GEMM、BF16的GEMM、GEMMReLU、GEMMBiasGELUcatlass都能在分钟级别生成。生成的算子性能不错达到峰值的85-95%但不是每个变体都做到了极致优化。ops-blas是精品工坊——手工精调少量核心GEMM算子。ops-blas只覆盖最常用的GEMM配置FP16/FP32的标准GEMM但每个实现都做到了接近理论峰值。ops-blas的GEMM实现是CANN团队花费数月时间调优的结果针对达芬奇架构的每一个微架构特性都做了适配。两者不是竞争关系而是互补关系。ops-blas提供最高性能的通用GEMMcatlass提供够用性能的全覆盖GEMM。上层框架在选择算子实现时优先使用ops-blas的标准GEMM性能更好当需要ops-blas不支持的变体时回退到catlass生成的算子。协作机制算子选择器catlass生成的算子要接入AOL核心问题是如何让框架在选择算子实现时知道什么时候用ops-blas、什么时候用catlass。CANN的解决方案是算子选择器Operator Selector——在AOL的算子查找路径中ops-blas的算子优先级高于catlass。框架发起算子调用 → AOL算子选择器 → 查找ops-blas的实现优先 → 找到且支持该配置→ 使用ops-blas → 找到但不支持该配置→ 查找catlass → 查找catlass的实现备选 → 找到→ 使用catlass → 找不到→ 报错这个优先级策略确保了对于标准GEMM如FP16的标准GEMM框架总是使用ops-blas的实现性能更好对于非标准GEMM如GEMMBiasGELU框架自动回退到catlass的实现ops-blas不提供这种融合变体。// ops-blas的GEMM算子注册简化REGISTER_OP(MatMul).Input(x1,DT_FLOAT16).Input(x2,DT_FLOAT16).Output(y,DT_FLOAT16).Attr(transpose_x1,AttrValue::BOOL).Attr(transpose_x2,AttrValue::BOOL).Priority(100)// WHY: 高优先级优先于catlass的实现.SetKernelBuilder(OpsBlasMatMulKernelBuilder).SetTilingBuilder(OpsBlasMatMulTilingBuilder);// catlass生成的GEMM算子注册REGISTER_OP(MatMul).Input(x1,DT_FLOAT16).Input(x2,DT_FLOAT16).Output(y,DT_FLOAT16).Attr(transpose_x1,AttrValue::BOOL).Attr(transpose_x2,AttrValue::BOOL).Priority(50)// WHY: 低优先级只在ops-blas不覆盖时使用.SetKernelBuilder(CatlassMatMulKernelBuilder).SetTilingBuilder(CatlassMatMulTilingBuilder);// catlass生成的融合算子注册ops-blas没有对应实现REGISTER_OP(GemmBiasGelu).Input(x1,DT_FLOAT16).Input(x2,DT_FLOAT16).Input(bias,DT_FLOAT16).Output(y,DT_FLOAT16).Priority(100)// WHY: 这是catlass独有的算子没有竞争者高优先级.SetKernelBuilder(CatlassGemmBiasGeluKernelBuilder).SetTilingBuilder(CatlassGemmBiasGeluTilingBuilder);上面这段代码展示了算子注册的优先级机制。同一个算子名称如MatMul可以注册多个实现通过Priority字段区分优先级。框架在选择时优先使用高优先级的实现。catlass生成的标准GEMM算子优先级低于ops-blas50 vs 100所以框架会优先选择ops-blas。而catlass生成的融合算子如GemmBiasGelu是独一无二的没有竞争者直接使用。接入流程从catlass生成到AOL注册catlass生成的算子要接入AOL需要经过四个步骤代码生成、算子注册、构建打包、集成测试。# 步骤1用catlass生成算子代码python3 catlass/tools/generate.py\--configmy_gemm_bias_gelu.yaml\--output./output/my_gemm_bias_gelu\--aol-compat# WHY: --aol-compat让生成器输出AOL兼容的注册代码# 不加这个标志生成的是独立可执行的算子不能接入AOL# 步骤2算子注册# 生成器会自动生成注册代码如果用了--aol-compat# 包括REGISTER_OP宏调用、优先级设置、支持的数据类型声明# 你只需要确认优先级设置是否正确# 步骤3构建打包cd./output/my_gemm_bias_gelumkdirbuildcdbuild cmake-DCANN_HOME/usr/local/Ascend/ascend-toolkit..make-j8# 生成动态库libcatlass_gemm_bias_gelu.so# 步骤4集成测试python3-mpytest tests/test_gemm_bias_gelu.py-v# WHY: 集成测试不只测精度还测和AOL的交互# 包括算子选择器是否正确路由、和其他算子的组合是否正常--aol-compat标志是接入AOL的关键。不加这个标志catlass生成的是独立算子——有自己的main函数可以直接运行和调试但不能注册到AOL。加了这个标志catlass生成的是AOL兼容的算子——没有main函数但有标准的算子注册代码可以被AOL的算子选择器发现和调用。catlass与ops-blas的数据类型协作ops-blas和catlass支持的数据类型范围不完全一致。ops-blas主要支持FP16和FP32的标准GEMMBF16和INT8的支持在CANN 8.0中逐步加入。catlass通过模板参数化天然支持所有数据类型——只需要在YAML配置中改一行。这种差异在实际使用中的体现是当你调用FP16的标准GEMM时算子选择器路由到ops-blas性能更好。当你调用BF16的GEMM时如果ops-blas的BF16实现还没发布算子选择器回退到catlass性能稍差但能用。随着ops-blas逐步扩展数据类型支持catlass的回退场景会越来越少。importtorchimporttorch_npu# FP16标准GEMM → 路由到ops-blas优先a_f16torch.randn(1024,1024,dtypetorch.float16,devicenpu:0)b_f16torch.randn(1024,1024,dtypetorch.float16,devicenpu:0)c_f16torch.matmul(a_f16,b_f16)# WHY: 框架自动选择ops-blas的实现# BF16 GEMM → 路由到catlass如果ops-blas还不支持BF16a_bf16torch.randn(1024,1024,dtypetorch.bfloat16,devicenpu:0)b_bf16torch.randn(1024,1024,dtypetorch.bfloat16,devicenpu:0)c_bf16torch.matmul(a_bf16,b_bf16)# WHY: 框架回退到catlass的实现# 融合GEMM → 只有catlass提供biastorch.randn(1,1024,dtypetorch.float16,devicenpu:0)c_fusedtorch.ops.catlass.gemm_bias_gelu(a_f16,b_f16,bias)# WHY: 融合算子不是标准PyTorch API需要用torch.ops直接调用用户不需要关心路由细节——框架自动选择最优实现。但了解这个机制有助于排查性能问题——如果你的GEMM跑得比预期慢可能是被路由到了catlass而不是ops-blas检查一下数据类型和算子配置。catlass与ops-nn的协作融合算子的更上层catlass生成的融合算子如GEMMBiasGELU和ops-nn的算子也有协作关系。ops-nn提供了更丰富的融合算子——比如FusedLayerNorm、FusedMatMulReLU等——这些算子的底层GEMM部分通常使用ops-blas的标准GEMM后处理部分使用ops-nn自己的优化实现。catlass的融合算子定位在ops-blas和ops-nn之间——ops-blas只做纯GEMMops-nn做更复杂的融合涉及LayerNorm、Dropout等catlass做中等复杂度的融合GEMM简单后处理如BiasAdd、ReLU、GELU。三者的关系可以这样理解ops-blas是GEMM的地基catlass是在地基上快速搭建的预制件GEMM简单后处理ops-nn是精装修的房子完整的神经网络算子。上层框架根据需求选择合适的层次——只需要GEMM就用ops-blas需要GEMM简单后处理就用catlass需要完整的神经网络算子就用ops-nn。效率对比catlass接入AOL前 vs 接入AOL后指标接入前独立算子接入后AOL注册提升算子调用方式自定义C接口PyTorch标准API零修改集成算子选择优化手动指定自动选择最优实现智能化与其他算子组合需手动编排图编译器自动融合自动化框架兼容性仅AscendCLPyTorchMindSpore广泛兼容开发者使用门槛需学自定义API直接用PyTorch API大幅降低运维成本独立编译部署统一AOL构建简化接入AOL的最大价值是让catlass生成的算子成为CANN生态的一等公民——用户通过PyTorch标准API就能调用不需要学任何新接口。算子选择器自动在ops-blas和catlass之间做最优选择用户不需要手动判断。图编译器可以自动把catlass的算子和其他AOL算子融合进一步优化性能。实际案例一个融合算子的完整接入过程之前帮一个团队开发了一个GEMMScaleShiftReLU的融合算子用于量化推理用catlass生成后接入AOL的完整过程如下第一天用catlass的YAML配置定义算子生成代码本地验证精度和性能。耗时2小时。第二天添加--aol-compat标志重新生成注册到AOL构建集成测试。发现一个问题——catlass生成的注册代码中数据类型列表只包含FP16但我们的场景还需要INT8。修改YAML配置添加INT8支持重新生成。耗时4小时。第三天和ops-blas的优先级调整。我们的融合算子在INT8模式下没有竞争者ops-blas没有INT8的融合GEMM所以优先级设为100。但FP16模式下ops-blas有标准的MatMul优先级更高我们的融合算子只在用户明确指定时才使用。耗时1小时。第四天端到端测试——在PyTorch训练脚本中调用融合算子验证训练曲线和推理结果。耗时3小时。总计4天其中大部分时间花在测试和调试上catlass的算子生成和AOL接入本身只用了半天。算子选择器的未来自动调优目前的算子选择器基于静态优先级——ops-blas优先于catlasscatlass优先于报错。这个策略在大多数场景下是合理的但不是最优的——某些特定形状的GEMMcatlass生成的算子可能比ops-blas更快因为catlass的模板可以根据形状做定制化的tiling。CANN 8.5中算子选择器正在引入自动调优Auto-Tuning能力。核心思路是在首次运行某个GEMM配置时同时运行ops-blas和catlass的实现记录各自的性能后续运行时自动选择更快的那个。自动调优的结果会缓存起来不需要每次都做对比。这个功能对catlass的用户来说是个好消息——你不需要纠结我的算子是不是比ops-blas慢算子选择器会帮你做决定。如果你的catlass算子在某个配置下确实更快它会被自动选中如果ops-blas更快用户也不会因为用了你的算子而性能下降。catlass和ops-blas的协作本质上是广度和深度的互补。catlass提供广度——快速覆盖各种GEMM变体让CANN生态的算子库更丰富。ops-blas提供深度——把最常用的GEMM做到极致性能。两者通过AOL的算子选择器无缝衔接对用户来说就是你只管调APICANN帮你选最优实现。效率对比catlass接入AOL前 vs 接入AOL后指标接入前独立算子接入后AOL注册提升算子调用方式自定义C接口PyTorch标准API零修改集成算子选择优化手动指定自动选择最优实现智能化与其他算子组合需手动编排图编译器自动融合自动化框架兼容性仅AscendCLPyTorchMindSpore广泛兼容开发者使用门槛需学自定义API直接用PyTorch API大幅降低运维成本独立编译部署统一AOL构建简化GEMM变体上线周期1-2周2-4天3-5x接入AOL的最大价值是让catlass生成的算子成为CANN生态的一等公民——用户通过PyTorch标准API就能调用不需要学任何新接口。算子选择器自动在ops-blas和catlass之间做最优选择用户不需要手动判断。仓库链接https://atomgit.com/cann/catlass
http://www.zskr.cn/news/1382208.html

相关文章:

  • 通过 curl 命令快速测试 Taotoken 提供的不同大模型接口
  • 从Chirp信号到测距测速:手把手拆解FMCW雷达的数学原理与MATLAB仿真
  • 工作性价比计算器终极指南:如何科学评估你的工作真实价值
  • 终极免费歌词同步工具:如何快速为本地音乐库批量下载LRC歌词
  • ChatLaw法律大模型镜像上线,来算网平台部署你的法律助手
  • 1688 开放平台商品详情接口实战:规格 SKU 解析 + 批发参数提取 + 生产级鉴权封装
  • 武汉劳力士手表回收,别再被“套路”牵着走 - 奢侈品回收测评
  • 2026年金华电商侵权应诉与知识产权维权完全指南:从链接下架到专利反制的全流程破局 - 年度推荐企业名录
  • DECIMER化学图像识别技术革命:从像素到分子式的人工智能桥梁
  • 音频格式解密利器:QMCDecode如何帮你实现QQ音乐跨平台播放
  • 3步实现智能视频优化:开源工具完全指南
  • 成都制造企业生产异常没人跟,AI智能体该怎么分派工单?
  • 3步实战:用RTX HDR增强版MPC视频渲染器解锁影院级画质体验
  • 精准探测:美国Medcom Inspector Alert V2 辐射检测仪及代理商优选华仪通泰 - 品牌推荐大师1
  • 罗杰杜彼官方售后服务中心介绍 - 速递信息
  • 86. 分隔链表
  • Bloxstrap终极指南:5个简单步骤提升你的Roblox游戏体验
  • 微博图片批量下载终极指南:3分钟掌握智能采集工作流
  • iOS砸壳与反编译:从Mach-O结构到Objective-C运行时深度解析
  • 5分钟解锁像素字体:Fusion Pixel Font如何打造多语言像素艺术?
  • 5分钟掌握番茄小说下载器:打造您的个人离线图书馆
  • NHSE终极教程:5分钟掌握动物森友会存档编辑技巧
  • 众智商学院联系方式大全|官方认证版(建议收藏) - 众智商学院课程中心
  • Beat Saber版本管理终极指南:BSManager一站式解决方案
  • PrivacyGuard实战:基于实证差分隐私的机器学习模型隐私审计框架
  • 收藏|2026 春招 AI 岗暴涨 12 倍!大模型成刚需,小白 程序员速学
  • FFF的代码审查助手:自动化代码审查和问题发现的终极解决方案
  • 如何在10分钟内掌握Switch游戏备份神器nxdumptool
  • 3步掌握openpilot:开源自动驾驶系统终极指南
  • 从立方星到太空物联网:Elektor项目的工程实践与挑战