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
${py_method_defs}

Function.cpp/h
${autograd_function_declarations} ${autograd_function_definitions}

python_function.cpp
${py_function_initializers}

尝试找到需要替换得地方,替换的地方就是需要添加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

posted @   HiIcy  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示