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

CANN/pyasc矩阵乘法N批处理迭代

asc.language.adv.Matmul.iterate_n_batch

【免费下载链接】pyasc本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc

Matmul.iterate_n_batch(batch_loop: PlainValue | int, batch_a: PlainValue | int, batch_b: PlainValue | int, en_sequential_write: PlainValue | bool, matrix_stride_a: PlainValue | int = 0, matrix_stride_b: PlainValue | int = 0, matrix_stride_c: PlainValue | int = 0, sync: PlainValue | bool = True, wait_iterate_batch: PlainValue | bool = False) → None

调用一次IterateNBatch,会进行N次IterateBatch计算,计算出N个多Batch的singleCoreM * singleCoreN大小的C矩阵。 在调用该接口前,需将MatmulConfig中的isNBatch参数设为true,使能多Batch输入多Batch输出功能,并调用SetWorkspace接口申请临时空间, 用于缓存计算结果,即IterateNBatch的结果输出至SetWorkspace指定的Global Memory内存中。 对于BSNGD、SBNGD、BNGS1S2的Layout格式, 调用该接口之前需要在tiling中使用SetALayout/SetBLayout/SetCLayout/SetBatchNum设置A/B/C的Layout轴信息和最大BatchNum数; 对于Normal数据格式则需使用SetBatchInfoForNormal设置A/B/C的M/N/K轴信息和A/B矩阵的BatchNum数。 实例化Matmul时,通过MatmulType设置Layout类型,当前支持3种Layout类型:BSNGD、SBNGD、BNGS1S2。

对应的Ascend C函数原型

template <bool sync = true, bool waitIterateBatch = false> __aicore__ inline void IterateNBatch(const uint32_t batchLoop, uint32_t batchA, uint32_t batchB, bool enSequentialWrite, const uint32_t matrixStrideA = 0, const uint32_t matrixStrideB = 0, const uint32_t matrixStrideC = 0)

参数说明

  • sync:设置同步或者异步模式。
  • wait_iterate_batch:是否需要通过WaitIterateBatch接口等待IterateNBatch执行结束,仅在异步场景下使用。
  • batch_loop:当前计算的BMM个数。
  • batch_a:当前单次BMM调用计算左矩阵的batch数。
  • batch_b:当前单次BMM调用计算右矩阵的batch数,brc场景batchA/B不相同。
  • en_sequential_write:输出是否连续存放数据。
  • matrix_stride_a:A矩阵源操作数相邻nd矩阵起始地址间的偏移,默认值是0。
  • matrix_stride_b:B矩阵源操作数相邻nd矩阵起始地址间的偏移,默认值是0。
  • matrix_stride_c:该参数预留,开发者无需关注。

约束说明

  • 单BMM内计算遵循之前的约束条件。
  • 对于BSNGD、SBNGD、BNGS1S2 Layout格式,输入A、B矩阵多Batch数据总和应小于L1 Buffer的大小。
  • 当使能MixDualMaster(双主模式)场景时,即模板参数enableMixDualMaster设置为true,不支持使用该接口。

调用示例

@asc.jit def kernel_matmul_rpc_batch(a_gm: asc.GlobalAddress, b_gm: asc.GlobalAddress, c_gm: asc.GlobalAddress, bias_gm: asc.GlobalAddress, tiling: asc.adv.TCubeTiling, workspace_gm: asc.GlobalAddress, is_transpose_a_in: int, is_transpose_b_in: int, batch_a: int, batch_b: int): # 定义matmul type a_type = asc.adv.MatmulType(asc.TPosition.GM, asc.CubeFormat.ND, asc.half, False, asc.LayoutMode.BSNGD) b_type = asc.adv.MatmulType(asc.TPosition.GM, asc.CubeFormat.ND, asc.half, True, asc.LayoutMode.BSNGD) c_type = asc.adv.MatmulType(asc.TPosition.GM, asc.CubeFormat.ND, asc.float, False, asc.LayoutMode.BNGS1S2) bias_type = asc.adv.MatmulType(asc.TPosition.GM, asc.CubeFormat.ND, asc.float) a_global = asc.GlobalTensor() size_a = tiling.a_layout_info_b * tiling.a_layout_info_s * tiling.a_layout_info_n * tiling.a_layout_info_g * tiling.a_layout_info_d * 4 size_a = tiling.b_layout_info_b * tiling.b_layout_info_s * tiling.b_layout_info_n * tiling.b_layout_info_g * tiling.b_layout_info_d * 4 size_bias = tiling.c_layout_info_b * tiling.c_layout_info_n * tiling.c_layout_info_g * tiling.c_layout_info_s2 * 8 a_global = set_global_buffer(a_gm, size_a) b_global = set_global_buffer(b_gm, size_b) bias_global = set_global_buffer(bias_gm, size_bias) tiling.share_mode = 0 tiling.share_l1_size = 512 * 1024 tiling.share_l0c_size = 128 * 1024 tiling.share_ub_size = 0 offset_a = 0 offset_b = 0 offset_c = 0 offset_bias = 0 a_global = a_global[offset_a] b_global = b_global[offset_b] bias_global = bias_global[offset_bias] # 创建Matmul实例 mm = asc.adv.Matmul(a_type, b_type, c_type, bias_type) pipe = asc.Tpipe() asc.adv.register_matmul(pipe, mm) mm.init(tiling) mm.set_tensor_a(a_global, is_transpose_a_in) mm.set_tensor_b(b_global, is_transpose_b_in) g_lay = tiling.a_layout_info_g if tiling.b_layout_info > g_lay: g_lay = tiling.b_layout_info_g for_extent = tiling.a_layout_info_b * tiling.a_layout_info_n * g_lay / tiling.batch_num mm.set_workspace(c_global) mm.iterate_n_batch(for_extent, batch_a, batch_b, False)

【免费下载链接】pyasc本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/785007/

相关文章:

  • 如何快速配置hitch:从基础安装到第一个TLS连接的完整指南
  • 2026上海CS认证跨级申报新规全解读 - 品牌企业推荐师(官方)
  • LoRA训练助手环境部署:Ubuntu/CentOS下Ollama+Gradio免配置安装
  • 接口幂等性怎么做?实际开发思路总结
  • 从SHAP到因果反事实:构建可解释AI系统的三层阶梯与实践指南
  • 揭秘AI写专著技巧:借助工具一键生成20万字专著,出版不再是难题!
  • OpenClaw从入门到应用——工具(Tools):BTW命令
  • GPT-4在Kattis平台编程实测:能力边界与使用指南
  • RakkasJS:基于Vite的React全栈框架,探索流式SSR与API-less数据获取
  • 第三篇:缓存穿透、击穿、雪崩——从原理到解决方案
  • 2026年全国气动蝶阀厂家哪家强 深耕行业多年 适配严苛工况工程 - 深度智识库
  • 深度学习可视化终极指南:如何理解CNN卷积神经网络的学习过程 [特殊字符]
  • 构建可信AI食品系统:从数据治理到伦理落地的技术实践
  • Hermes Agent项目中集成Taotoken作为自定义模型供应商的配置方法
  • 华为CANN TensorFlow AllGather算子
  • 深耕津门,点亮城市|博涛广告天津商业服务版图全记录 - 品牌企业推荐师(官方)
  • 民间科学家如何借助 Gemini 3.1 Pro 撰写独立研究资助申请?
  • 大理口碑好的养发馆品牌推荐?黑奥秘头皮头发分开洗,精细化护理更科学 - 美业信息观察
  • mustache.java性能优化秘籍:如何实现每秒4000+模板编译
  • CANN/ATVOSS设备适配器运行接口
  • Flux2-Klein-9B-True-V2详细步骤:supervisorctl管理服务状态全流程
  • OpenVINO? C# API . 全新发布,基于 AI 大模型的全栈重构,全面进化!
  • 2026年想找靠谱家政?这份持证的西安家政机构推荐别错过! - 品牌企业推荐师(官方)
  • 2026年国内专业美业学校排名分析:3家高行业认可度院校深度解读 - 产业观察网
  • iVersion核心功能解析:从版本检测到用户通知的完整流程
  • AI赋能戏剧治疗:Gemini3.1Pro打造智能情景库
  • 人生第一双高跟鞋排行:轻奢舒适款全维度对比 - 奔跑123
  • 不同专业论文AI率为什么差别大:理工文史各学科AIGC检测差异免费应对策略解读
  • 抖音视频下载终极指南:3分钟掌握无水印保存技巧
  • AI如何重塑运筹学:从参数生成到模型优化的全流程革新