为什么pytorch要对c++/cuda进行拓展

在初始阶段,使用pytorch提供的接口组合搭配自己的神经网络就可以了,但是,随着深入进行,比如说要实现一个自己新的算法,或者是自己定义的新的层,光使用pytorch模块是不够的。虽然,pytorch在特定的模块上进行了很好的优化,,但加入将这些组合起来,一般pytorch只会按照设计好的操作去使用gpu通道,这样会使得通道空闲或者超负载,然而python解释器也不能对此进行优化,导致程序执行速度变慢,所以就需要对其进行拓展,才能充分利用gpu,加快算法速度。

拓展的具体实现过程

在pytorch0.4中,结合c语言和cuda进行拓展,使用torch.utils.ffi模块,主要内容可以参考Pytorch拓展进阶(一):Pytorch结合C以及Cuda语言。但在pytoch1.0之后,这个模块就用不了了,用torch.utils.cpp_extension来进行代替,该模块是对c++进行拓展,而且它具有最小(但通常足够的)的参数来构建c++扩展的优点,具体的使用过程可以参考Pytorch拓展进阶(二):Pytorch结合C++以及Cuda拓展。如果想要对多个c++文件和cuda文件进行拓展的话,具体实现可以参考maskrcnn-benchmark。

【注】在使用的过程中遇到以下错误:

ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.

这就是说明pytorch的版本不兼容,这时候就需要修改setup.py文件。但是,cpp_extension是对c++文件进行拓展,需要将c语言文件转化为c++文件。而且使用ffi的时候会生成_ext文件,这个文件比较麻烦,在该文件夹下需要__init.py__文件。

setuptools

不论是ffi模块或是cpp_extension模块,它们的构建都使用了setuptools,它是python distutils增强版的集合,可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的包。他还提供了自动包查询程序,用来自动获取包之间的依赖关系,并完成这些包的安装,大大降低了安装各种包的难度,使之更加方便。所以使用pytorch的这些模块的主要目的是用来找到c文件或者是c++文件,定义编译方式,具体的创建和安装操作都是setuptools来完成。比如在一个文件夹下有如下文件:

image.png

__init__.py文件是必须要有的,setup.py是将correlation_cuda进行打包和安装的文件,里面的具体内容为:

image.png

可以看到,setup里面包含了要编译的文件(不用包含头文件),运行python setup.py install之后会生成3个文件夹,dist文件夹下的压缩包就是目标文件,build文件夹下会有.so文件的生成,另一个文件夹是以.egg-info为结尾的文件。在这里我们主要是用到build文件夹下生成的共享文件,通过correlation.py来进行调用,自定义层,之后外部如果要用到这个correlation,只需要调用*.py文件就可以啦,这就相当于定义了一个新的模块。

image.png

参考博客:
Pytorch拓展进阶(一):Pytorch结合C以及Cuda语言
Pytorch拓展进阶(二):Pytorch结合C++以及Cuda拓展
maskrcnn-benchmark
faster-rcnn源码阅读:C/C++/CU扩展的编译和安装

文中参考的文件

https://github.com/LilingZhou/learn_pytoch_setuptools

为什么在notebook里面还是显示torch_torch.utils.cpp_extension对c++/cuda进行拓展相关推荐

  1. pandas使用set_table_attributes函数、display_html函数等在jupyter notebook中并排显示两个dataframe的内容(side by side)

    pandas使用set_table_attributes函数.display_html函数等在jupyter notebook中并排显示两个dataframe的内容(side by side) 目录

  2. 【Python_025】解决jupyter notebook 画图不显示 及在深色背景下图表坐标看不清

    本篇博客分享一下解决jupyter notebook 画图不显示 及在深色背景下图表坐标看不清 画图不显示 在import 各种包最后加上一行 %matplotlib inline 这行代码用在Jup ...

  3. PyTorch 1.0 中文文档:torch.utils.cpp_extension

    译者: belonHan torch.utils.cpp_extension.CppExtension(name, sources, *args, **kwargs) 创建一个C++的setuptoo ...

  4. Jupyter Notebook中未显示Conda环境

    本文翻译自:Conda environments not showing up in Jupyter Notebook I installed Anaconda (with Python 2.7), ...

  5. 【Bug】jupyter notebook运行一直显示:kernel starting,please wait(Ubuntu)

    即使重装后kernel也一直卡在starting,弄了好长时间 参考的了这个博客https://blog.csdn.net/weixin_46088071/article/details/103803 ...

  6. 请教一个关于jupyter notebook结果输出显示的问题?

    想问下大家又遇到下面图上的问题吗?就是结果输出界面的左边一直无法显示完全,之前用matplotlib画图也是,y轴的label也没法完全显示出来.谢谢大家了

  7. cad中直径符号不显示_pyecharts图形在jupyter notebook中不显示的解决办法

    很多利用notebook做数据分析的小伙伴在安装pyecharts后容易忘记设置资源引用这一步骤,导致在使用 "图形对象.render_notebook()" 语句渲染到jupyt ...

  8. 在一个IPython Notebook单元中显示多个图像?

    https://qastack.cn/programming/19471814/display-multiple-images-in-one-ipython-notebook-cell

  9. 为什么在notebook里面还是显示torch_为什么肿瘤各项指标都显示正常,到最后还是复发了?忽略了这阶段...

    临床发现,大多数肿瘤病人死亡的时间是在治疗后的2年左右时间,这个时间段是康复的重要阶段,也是最重要的阶段.很多病人花费金钱在治疗上,忍受了很多痛苦,第一阶段成功后,在康复期间却不够重视,导致功败垂成, ...

最新文章

  1. 20步打造最安全的Nginx Web服务器
  2. html frame 菜单切换,官方底部导航如何通过frame0.html的JS控制切换
  3. Win8.1 “运行”在Ipad Mini上
  4. IBM HACMP 系列 -- 后期安装工作和管理任务二
  5. PyTorch基础(13)-- torch.nn.Unfold()方法
  6. 【quartus】原理图输入设计详解攻略
  7. VMware虚拟化云平台-最新版本vSphere 6.7
  8. 将小写金额转换成大写金额[存储过程版]
  9. 乔布斯18岁求职信拍卖价22.24万美元,值吗?
  10. 未分配利润与利润表不一致_财务报表中未分配利润和净利润不一样,这正常吗?...
  11. 游戏产业链:游戏分发/渠道商
  12. noip2013提高组初赛(答案+选择题题目+个人分析)
  13. JAVA编写飞机大战---分析过程及源代码(超详细超完整)
  14. eclipse导入wsdl文件_Eclipse+Axis使用WSDL文件生成Web Service服务端/客户端
  15. 编程计算三角形的面积和周长。要求如下: (1)、设计一个接口InterfaceShape,其中有计算三角形的面积和周长的抽象方法; (2)、设计一个点类Point,其中有必要的构造方法和一般的访问器方
  16. Windows优化大师域名解析问题
  17. 离散数学期末复习-基本回路系统和基本割集系统
  18. 有钱人的心肠更硬吗?
  19. 『牛角书』基于JS实现的鸿蒙游戏——二十四点纸牌
  20. MySQL的DDL(数据定义语言)

热门文章

  1. 使用方差阈值过滤(VarianceThreshold)进行特征选择、删除方差低于某一阈值的特征、详解及实战
  2. MATLAB计算杨氏模量,四阶弹性模量Cijkl如何在matlab里表示啊? - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  3. ps grep java_ps -ef | grep java 查看所有关于java的进程
  4. Python踩坑指南(第三季)
  5. 基因课 15天入门生物信息(2021年) 第三天 Linux基础命令(1)
  6. tensorflow创建张量
  7. ubuntu18.04.4 环境变量设置 export path
  8. ubuntu 16.0.4 opencv 4.0.0 + opencv_contrib 4.0.0 cmake-gui 安装
  9. ubuntu 16.04 python3 使用ryu
  10. 解决selenium报错--unknown error: DevToolsActivePort file doesn‘t exist