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

CANN/ATVC PyTorch调用样例

PyTorch调用样例

【免费下载链接】atvcATVC(Ascend C Templates for Vector Compute),是为基于Ascend C开发的典型Vector算子封装的一系列模板头文件的集合,可帮助用户快速开发典型Vector算子。项目地址: https://gitcode.com/cann/atvc

概述

使用ATVC开发自定义算子,并实现从PyTorch框架调用的样例。

样例介绍

样例名称功能描述
add基于ATVC框架的Add自定义Vector算子
reduce_sum基于ATVC框架的reduce_sum自定义Vector算子

目录结构介绍

ops_pytorch/ ├── add // Add算子的PyTorch调用样例 └── reduce_sum // ReduceSum算子的PyTorch调用样例

开发步骤

不同的算子类型可参考快速入门中的模版选择模版进行选择,用户在此处通过<<<>>>的方式调用核函数,更多ATVC的用法可参考ATVC的开发指南。

步骤1. 引入头文件。需要注意的是,需要保护对应核函数调用接口声明所在的头文件{kernel_name}_impl.h,kernel_name为算子的核函数名称。

// 头文件引入 #include <torch/extension.h> #include "torch_npu/csrc/core/npu/NPUStream.h" #include "add_custom_impl.h"

步骤2. 应用程序框架编写,需要注意的是,本样例输入x,y的内存是在python调用脚本run_op.py中分配的。

namespace ascendc_elewise_ops { at::Tensor op_add_custom(const at::Tensor &x, const at::Tensor &y) { } }

步骤3. NPU侧运行验证。通过<<<>>>的方式调用核函数完成指定的运算。

// 运行资源申请,通过c10_npu::getCurrentNPUStream()的函数获取当前NPU上的流 auto stream = c10_npu::getCurrentNPUStream().stream(false); // 分配Device侧输出内存 at::Tensor z = at::empty_like(x); // totalLength是算子输入的元素个数 int32_t totalLength = 1; for (int32_t size : x.sizes()) { totalLength *= size; } // 声明运行态参数param ATVC::EleWiseParam param; // Host侧调用Tiling API完成相关运行态参数的运算 (void)ATVC::Host::CalcEleWiseTiling<AddOpTraitsFloat>(totalLength, param); // 使用<<<>>方式调用核函数完成指定的运算 AddCustom<AddOpTraitsFloat><<<param.tilingData.blockNum, nullptr, stream>>>( (uint8_t *)(x.storage().data()), (uint8_t *)(y.storage().data()), (uint8_t *)(z.storage().data()), param); // 将Device上的运算结果拷贝回Host并释放申请的资源 return z;

步骤4. 定义PyTorch算子的调用接口。

// 加载算子模版 TORCH_LIBRARY(ascendc_ops, m) { // 模块名ascendc_ops,模块对象m m.def("add", &ascendc_elewise_ops::op_add_custom); // 将函数add和PyTorch进行绑定 }

【免费下载链接】atvcATVC(Ascend C Templates for Vector Compute),是为基于Ascend C开发的典型Vector算子封装的一系列模板头文件的集合,可帮助用户快速开发典型Vector算子。项目地址: https://gitcode.com/cann/atvc

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

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

相关文章:

  • 技术人副业指南:8种低门槛、高天花板的变现方式
  • PyTorch 张量操作优化:内存布局与计算效率
  • 杰理之打开OTA打印以及uboot打印的方法【篇】
  • 基于开源模板快速构建AI编程助手:从智能体原理到实战应用
  • Windows热键冲突终极解决方案:Hotkey Detective专业指南
  • 深度学习在计算病理学中的应用:从WSI分析到AI辅助诊断
  • ARM虚拟化中ICH_HFGWTR_EL2寄存器解析与应用
  • 嵌入式开发:从8/16位到32位ARM处理器的迁移指南
  • 杰理之设置IO状态的方法【篇】
  • PyTorch 自定义算子开发:C++ 扩展与 CUDA 加速
  • AGI与大型模型如何重塑医学影像分析:从专用工具到通用智能体
  • Unity C#入门:类与对象的基础认知与创建
  • 为AI代理注入情感氛围:agent-vibes项目设计与实战解析
  • 本地部署大语言模型实战:基于gpt4local的私有化AI解决方案
  • 杰理之添加AD通道的接口【篇】
  • 高效向量化Trie:加速器上的LLM生成检索约束解码技术
  • PyTorch 模型并行策略:数据并行 vs 模型并行
  • FPGA低功耗设计原理与工程实践优化
  • AI与XR技术融合:构建心脏健康数字孪生,重塑精准医疗
  • AI安全前沿:AI大模型安全防护的前沿技术
  • AItrika:基于LLM与RAG的医学文献智能解析工具实战指南
  • 庄子给普通人的生存启迪
  • 构建防误删体系:从 rm -rf 灾难到生产环境数据安全实践
  • 构建个人技能库:用Git与Markdown打造高效知识管理体系
  • 大模型“工具调用“揭秘:AI从“语言智能”跃升“行动智能“的必经之路!
  • Kong网关智能运维代理:策略驱动自动化与实战部署指南
  • AI赋能射电天文:BRAIN项目如何革新ALMA数据处理
  • 在多轮对话应用中体验Taotoken路由策略的稳定性
  • XUnity Auto Translator终极指南:5步实现Unity游戏实时翻译本地化
  • 超导量子比特与腔体共振控制技术解析