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

CANN/PyPTO:kernel出参未写回问题

kernel函数出参未写回导致计算不生效

【免费下载链接】pyptoPyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto

问题现象描述

当前PyPTO框架用pypto.frontend.jit装饰的kernel函数,不支持有返回值,输出需要通过参数的形式传入并使用[:]等进行写回操作。如果直接使用等号赋值,无法将数据写入输出Tensor中。

示例代码:

@pypto.frontend.jit def add_kernel(x, y): pypto.set_vec_tile_shapes(4, 4) y = x + 1 # 此处会创建新的Tensor y torch.npu.set_device(0) x = torch.ones(4, 4, dtype=torch.float32) y = torch.empty(4, 4, dtype=torch.float32) add_kernel(pypto.from_torch(x), pypto.from_torch(y)) print(y) # 输出torch.empty创建的未经初始化的随机值

输出数据:

tensor([[2.0703e-19, 7.1833e+22, 1.8502e+28, 6.8608e+22], [4.8011e+30, 1.2123e+25, 4.7418e+30, 1.8465e+25], [1.2122e+25, 4.6114e+24, 1.7836e+31, 1.7591e+22], [1.1306e+24, 4.2245e-39, 6.8664e-44, 0.0000e+00]])

原因分析

add_kernel函数内部执行y = x + 1时,这里的y是函数的局部变量(相当于创建了一个新的变量y),它会覆盖传入参数y的引用。也就是说,这行代码只是让函数内的y指向了x + 1的新Tensor,并不会修改外部传入的Tensory的内容。

解决措施

通过全切片操作符[:],将计算结果写入函数参数y的原有内存空间。

示例代码:

@pypto.frontend.jit def add_kernel(x, y): pypto.set_vec_tile_shapes(4, 4) y[:] = x + 1 # 将x+1的结果写入函数参数y的原有内存空间 torch.npu.set_device(0) x = torch.ones(4, 4, dtype=torch.float32) y = torch.empty(4, 4, dtype=torch.float32) add_kernel(pypto.from_torch(x), pypto.from_torch(y)) print(y) # 输出x + 1的结果

输出数据:

tensor([[2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.]])

其中y[:] = x + 1也可以替换为y.move(x + 1)或者y.assemble(x + 1, [0, 0])

【免费下载链接】pyptoPyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto

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

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

相关文章:

  • 高级部署指南:在生产环境中规模化运行Nemotron-Labs-Diffusion-3B
  • 厘清层叠架构里信号层核心定位与分工逻辑
  • 阴阳师自动化脚本:解放双手的智能游戏助手终极指南
  • NVIDIA MiniMax-M2.5-NVFP4终极指南:从模型架构到商业应用全攻略
  • 如何在浏览器中免安装使用微信:wechat-need-web插件完整指南
  • 告别手动刷新:3步安装Elsevier投稿状态自动追踪插件,让科研进度一目了然
  • PIC18微控制器与CMT-8540S音频模块的DIY声音方案
  • 六域校准技术揭秘:OptiQ如何为Qwen3.6-35B选择最优量化策略
  • CANN基础设施-CANNLab产品简介
  • 10个秘诀掌握OneMore:免费开源插件让OneNote效率翻倍
  • CANN/asc-devkit L2缓存模式最佳实践
  • OpenCamera完全指南:解锁Android专业摄影的7大核心功能
  • 磁盘空间不足哪些文件能删哪些不能删?按风险等级逐档清理
  • 计算机毕业设计之某公司网络信息安全方案的设计
  • C++ AI 自动迁移裸指针到智能指针体系
  • 从DeepSeek-V3到Kimi-K2.5:AMD优化版模型架构演进分析
  • 网络排错测试思路图
  • EulerLauncher实战案例:在真实项目中应用openEuler开发环境的最佳实践
  • 从理论到实践:NVIDIA Qwen3.5-122B-A10B-NVFP4的量化原理与实现细节
  • 基于MA12070与PIC18F47K42的高保真音频系统设计
  • KTransformers+AMD Kimi-K2.5-MXFP4:CPU+GPU异构推理实战教程
  • 2026蓝底照片改白底完整指南:手机免费操作、网页工具、电脑,PS,修改证件照底色步骤
  • OneNote效率革命:用OneMore插件实现智能批量搜索替换的终极指南
  • virtual-scroller与display-locking:底层技术原理解析
  • MCP3551与PIC18LF46K80高精度数据采集系统设计
  • TC78H651AFNG与PIC18LF46K42的直流电机驱动方案
  • OnmyojiAutoScript:阴阳师自动化脚本终极指南,AI智能解放你的双手
  • STM32L073RZ与MCP3551高精度ADC硬件设计与软件实现
  • virtual-scroller未来展望:W3C标准化进程与路线图
  • 一篇文章讲明白 Vision Transformer(ViT)