自定义实现C++拓展pytorch功能

ncrelu.cpp

cpp 复制代码
#include <torch/extension.h>					// 头文件引用部分

namespace py = pybind11;

torch::Tensor ncrelu_forward(torch::Tensor input) {
    auto pos = input.clamp_min(0);				       // 具体实现部分
    auto neg = input.clamp_max(0);
    return torch::cat({pos, neg}, 1);
}

PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {	// 绑定部分
    m.def("forward", &ncrelu_forward, py::arg("input"), "NCReLU forward");
}

setup.py

python 复制代码
from setuptools import setup
from torch.utils import cpp_extension


setup(
    name='ncrelu_cpp',
    version='1.0',# 编译后的链接库名称
    py_modules=['ncrelu_cpp'],
    ext_modules=[
        cpp_extension.CppExtension(
            'ncrelu_cpp', ['ncrelu.cpp'],
            extra_compile_args={'cxx': ['-O2']}
            # 待编译文件,及编译函数
        )
    ],
    cmdclass={						       # 执行编译命令设置
        'build_ext': cpp_extension.BuildExtension
    }
)

test.py

python 复制代码
import torch
import ncrelu_cpp
import sys
print(sys.path)
a = torch.randn(4,3)
print(a)
b = ncrelu_cpp.forward(a)

python setup.py install

或pip install .

但是在Windows平台下不知道为什么会报错找不到包,或者找不到函数,很奇怪,但是正常运行没有任何问题

相关推荐
漫谈网络20 分钟前
Telnetlib三种异常处理方案
python·异常处理·telnet·telnetlib
oioihoii26 分钟前
C++23 std::generator:用于范围的同步协程生成器 (P2502R2, P2787R0)
开发语言·c++·c++23
Xudde.28 分钟前
加速pip下载:永久解决网络慢问题
网络·python·学习·pip
兆。33 分钟前
电子商城后台管理平台-Flask Vue项目开发
前端·vue.js·后端·python·flask
未名编程43 分钟前
LeetCode 88. 合并两个有序数组 | Python 最简写法 + 实战注释
python·算法·leetcode
魔障阿Q1 小时前
windows使用bat脚本激活conda环境
人工智能·windows·python·深度学习·conda
Cuit小唐1 小时前
C++ 迭代器模式详解
c++·算法·迭代器模式
2401_858286111 小时前
CD37.【C++ Dev】string类的模拟实现(上)
开发语言·c++·算法
洋芋爱吃芋头1 小时前
hadoop中的序列化和反序列化(3)
大数据·hadoop·python
四谷夕雨1 小时前
C++八股 —— vector底层
开发语言·c++