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

pytorch使用c++/cuda扩展

1、编写:c++/cuda拓展源文件

pybind11_demo/
├── setup.py
├── example.cpp
└── test.py

example.cpp

#include <torch/extension.h>
#include <vector>// Forward declaration of the function
torch::Tensor custom_add(torch::Tensor a, torch::Tensor b);// The actual implementation
torch::Tensor custom_add(torch::Tensor a, torch::Tensor b) {// Simple element-wise additionreturn a + b;
}// Pybind11 module definition
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {m.def("custom_add", &custom_add, "A function that adds two tensors");
}

PyTorch中的PYBIND11_MODULE

PYBIND11_MODULE是Pybind11库中的一个宏,它用于定义一个Python模块,并将C++类、函数或其他对象绑定到该模块。这使得Python可以直接调用C++编写的函数和类,极大地提高了Python的性能,尤其是当计算密集型任务需要底层C++实现时。

2、编译:setuptools指导c++/cuda拓展的编译

setup.py

from setuptools import setup, Extension
from torch.utils.cpp_extension import CppExtension, BuildExtension,CUDAExtensionsetup(name='python_demo', # python包的名称ext_modules=[CppExtension(name='demo', # 扩展模块名称,后面import使用sources=['example.cpp'],extra_compile_args={'CXX': ['-w', '-std=c++14']})],cmdclass={'build_ext': BuildExtension}
)# python setup.py install
# or for development:
# python setup.py develop

指定构建命令

cmdclass={  'build_ext': BuildExtension  
}

cmdclass是一个字典,用于指定自定义的构建命令。

'build_ext'是setuptools中的一个标准构建命令,用于构建扩展模块。

BuildExtension是PyTorch提供的BuildExtension类,它扩展了setuptools的build_ext命令,以支持C++和CUDA扩展的编译。

3、python调用编译完成的库

test.py

import torch
import demo  # The name you specified in setup.pya = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([4.0, 5.0, 6.0])result = demo.custom_add(a, b)
print(result)  # Should output tensor([5., 7., 9.])# python test.py

参考

https://zhuanlan.zhihu.com/p/459955492

深入解析PyTorch中的PYBIND11_MODULE:功能与实现_pytorch pybind11-CSDN博客

 

相关文章:

  • Docker compose入门
  • c#OleDb连接池管理功能
  • C# 中参数前加 this 关键字
  • 【scikit-learn基础】--『监督学习』之 贝叶斯分类
  • 高速电路中的电感、磁珠的选型及应用
  • 浏览器崩溃问题处理方案
  • Deeplizard 深度学习课程(一)—— Pytorch 和 Tensor 简介
  • iotdb时序数据库使用
  • Go:测试
  • 强化学习的数学原理(十)actor-critic 方法
  • 接口测试(get请求方法)-----------实战演练
  • 得物golang一面
  • 在 Visual Studio Code 中安装通义灵码 - 智能编码助手
  • 【网络安全】谁入侵了我的调制解调器?(二)
  • NLP高频面试题(四十四)——RLHF过程中的马尔科夫决策过程及对话场景MDP设计
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——音频测试 #ES8388 #录音测试
  • AI Agent分类详解与对比
  • 力扣刷题Day 18:字符串解码(394)
  • 码界奇缘 Java 觉醒 后记 第二十五章 安全结界攻防战 - 从沙箱到模块化
  • 【SpringBoot】99、SpringBoot中整合RabbitMQ实现重试功能
  • 上海网站建设,分类广告/西安seo站内优化
  • 学校网站建设及使用档案/2023重大新闻事件10条
  • 重庆璧山网站制作公司推荐/怎样把个人介绍放到百度
  • 东莞建网站公司/目前最流行的拓客方法
  • 自己做静态网站的步骤/seo搜索排名优化方法
  • 私做网站名电子章/如何在百度上开店铺