Skip to content
Deepcity's Blog
Go back

Ascend C 算子开发 Part5 PyTorch 算子调用与阶段总结

在 GitHub 上编辑

Ascend C算子开发 Part5 Pytorch算子调用与阶段总结

PTA 适配框架

简单的讲,pytorch为底层硬件接口提供了一套中间层(Pytorch Adapter)用于分发不同的计算任务给不同的算子。Ascend C对这套机制进行了适配(就是torch-npu,详见REF3)。

对于自定义算子而言,也需要适配PTA,需要做以下工作(torch_npu v1.11.0)。

PTA framework

算子注册分发

npu_native_functions.yaml文件中给出定义。路径为torch_npu/csrc/aten/npu_native_functions.yaml。该文件对算子进行结构化解析从而实现自动化注册和Python接口绑定。

opp reg distribution

适配插件开发

目的主要是为了适配pytorch中算子API的调用参数和属性的格式转换,总共分为以下四步。

  1. 创建适配插件文件,torch_npu/csrc/aten/ops/op_api目录下,大驼峰命名风格(<算子名> + .cpp,如AddCustomKernelNpu.cpp)
  2. 引入依赖头文件:适配Ascend AI处理器的pytorch源代码,在torch_npu/csrc/framework/utils中提供了常用工具
  3. 实现算子适配主题函数:实现算子适配主题函数,根据Ascend C算子原型构造得到对应的input、output、attr。
  4. 重编译Pytorch框架或插件

plug

测试文件开发

基本就是使用torch_npu.testing.testcase中提供的TestCase,runtests等。

这里有一个数据格式的转换,将xy从cpu状态转化为npu,最后也需要转为cpu格式,避免与golden的对比不一致。

test dev

Additional Summary

阶段结语

基本上到这里,AscendC的基本概念就介绍完了,涵盖从算子基础到算子进阶的所有内容,不过相对于完善的算子开发来说,这些仅仅只是入门,更准确地说,这里大部分的内容都是Ascend的内容,学完这些并不代表可以独立的进行算子开发,调优到部署,但也不至于再在算子开发中不知所云。

前路漫漫,希望各位能有所收获。

REF

  1. Huawei w3
  2. Huawei ilearning
  3. pytorch: Ascend Extension for PyTorch

在 GitHub 上编辑
Share this post on:

上一篇
CMU-15213-ShellLab
下一篇
OSDI18-Ray A Distributed Framework for Emerging AI Applications