首页 > 其他分享 >pytorch反向接口暴露

pytorch反向接口暴露

时间:2023-02-23 09:47:13浏览次数:34  
标签:function torch python aten py 接口 pytorch 反向

主目录下CMakeList.txt
嵌套Caffe目录

Caffe 目录包含aten, ***等目录

Caffe同时调用Codegen.cmake 执行动态生成代码,生成动态变量

所以aten目录下可以调用动态变量并构建,其自定义变量并层层反传上层.

image-20230213094634747

ATen下指定npu源文件构建
image-20230213094739345

libtorch构建

image-20230214174450348



自动求导引擎带注册研究思路

分析代码模板:

python__nn__function ;python_torch__function.cpp;
占位符:${py_forwards};${py_methods}
python_variable_methods.cpp
$

Function.cpp/h
${autograd_function_declarations} $

python_function.cpp
$

尝试找到需要替换得地方,替换的地方就是需要添加pytorch算子接口的地方(这里找调用地方,进而找到binding的前置判断)

然后发现很多都是用declaration变量来获取值,那就看看declaration东西
vim build/aten/src/ATen/Declarations.yaml
包含算子名字、schme字符串、参数等等,有效信息很多

image-20230220104022360

走读代码找到,torch方法绑定的地方,create_python_binding
前置条件get_py_torch_functions

image-20230221205845348

进而找到是否应该暴露接口的判断区:
image-20230221210354300

image-20230221210403329

image-20230221210412918
进而起飞

image-20230221144142240


反向接口暴露修改法则

修改文件:

  1. 修改文件tools/autograd/gen_python_functions.py

    image-20230221192853368

    这里非常重要!!是暴露接口到python层的重要修改点

    image-20230221194022931

    这里待研究?之前是搜索到了有bool[3]场景报错,先暂时屏蔽

    image-20230221194432019

    这里是因为有特别算子,参数比较多,需要手动扩充场景
    而且这里一定要记住去wrap-outputs.h去补充函数

    image-20230221194749616

    重要!这里是区分forward和backward,通过什么下发,forward可以用self,backward通过命名空间用aten或at,所以这里得改,保证调用域

    image-20230221195357034

    这里修改原因同上!这是下发代码模板得参数,backward得保留self参数

  2. 修改文件tools/pyi/gen_pyi.py

    image-20230221192522494

    这里待研究?编译会报错,先直接注释掉屏蔽

  3. 修改文件torch/csrc/autograd/utils/wrap_outputs.h

    image-20230221200846560

    为特殊算子服务

  4. 实验测试结果

    image-20230221201129115

标签:function,torch,python,aten,py,接口,pytorch,反向
From: https://www.cnblogs.com/rnly/p/17146763.html

相关文章

  • 照片的年龄变化之腾讯云接口测试
    代码:importjsonimportbase64fromtencentcloud.commonimportcredentialfromtencentcloud.common.profile.client_profileimportClientProfilefromtencentclo......
  • PyTorch使用预训练模型
    ​​​​​​state_dict()功能:获取模型当前的参数,以一个有序字典形式返回。这个有序字典中,key是各层参数名,value就是参数。load_state_dict(state_dict)功能:将state......
  • 19、损失函数与反向传播
    1、损失函数(1)计算实际输出和目标之间的差距;(2)为更新输出提供一定的依据(反向传播);LossFunction:nn.L1Loss:输入值是x,输出值是y,那么L1Loss是采用 |yi-xi|/x的个数,就是每......
  • PyTorch——SummaryWriter,TensorboardX
    Tensorboard的工作流程将代码运行过程中的,某些你关心的数据保存在一个文件夹中:这一步由代码中的writer完成再读取这个文件夹中的数据,用浏览器显示出来:这一步通过在命令行运......
  • 创建多线程方式3:实现Callable接口 改造下载图片案例
    packagecom.Test;importorg.apache.commons.io.FileUtils;importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.concurrent.*;//开......
  • 什么是接口测试?怎么做接口测试?
    今天我们就来浅聊一下什么是接口测试,接口测试又该如何进行呢?一、什么是接口测试?接口测试是一种常见的软件测试方法,用于测试软件系统中不同模块之间的接口。接口是指两个或多......
  • 接口测试和功能测试有什么不同?
    接口测试和功能测试是软件测试中的两种常见测试类型,主要用于评估软件系统的质量。尽管这两种测试都是为了评估软件系统的性能,但它们有很多不同之处。接口测试和功能测试的区......
  • Burp Suite+captcha-killer-modified,爆破带有验证码Web登录接口(保姆级教程)
    目录1需求描述2测试环境要求3配置测试环境3.1安装ddddocr+aiohttp3.2BurpSuite添加插件3.3启动图像识别接口4实战测试4.1获取验证码接口4.2获取请求包4.3插件配......
  • 什么是接口测试?怎么做接口测试?
    今天我们就来浅聊一下什么是接口测试,接口测试又该如何进行呢?一、什么是接口测试?接口测试是一种常见的软件测试方法,用于测试软件系统中不同模块之间的接口。接口是指两个......
  • Java 调接口类似postman用form-data方式post传输数据
    转自JavaHttpClient发送multipartform-data的Post请求  publicstaticStringgateway(Stringparam,Stringparamvalue,Stringservicename,Stringinterface_id......