作者 | godweiyang 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/360441891
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心技术交流群
导读
作者自己编写了一份新手入门神经网络调用CUDA的示例,能够帮助解决CUDA编写以及python调用CUDA算子等问题。
在用PyTorch或者TensorFlow搭积木的时候,你是不是也遇到过下面这些情况:
自带的算子及其组合都无法满足你超(bian)常(tai)的计算需求。
自带的算子不可导,需要自己定义反向传播的梯度,例如argmax。
自带的算子太慢了,严重影响了你发paper的速度。
![7ff993cf819e1de73c25b452a1f2e9d7.jpeg](https://img-blog.csdnimg.cn/img_convert/7ff993cf819e1de73c25b452a1f2e9d7.jpeg)
这时候你就会想,要是能自己实现一个速度又快、又能满足需求的算子就好了。
你想到了CUDA,自己写一个CUDA算子不就完事了嘛!
然后问题又来了,写是写完了,怎么用python代码调用它呢?
还有一个问题,这个算子它没梯度啊,自动求导机制不顶用了!
你去网上各种搜索,方法倒是全有,但是源码都好复杂,你一个新手怎么可能有心思看完那么复杂的教程?
这时候,你突然看到了这篇文章,看完后你惊呼:“怎么会有这么简洁的示例代码,这就是我想要的!”
没错,这就是我熬了好几个通宵,查了无数bug后,写出来的一份示例代码。
话不多说,先上源码好吧:
https://github.com/godweiyang/NN-CUDA-Example
我给它命名为“Neural Network CUDA Example”,简称“NN CUDA Example”,意思就是神经网络调用CUDA的示例。
![aba7fb84663eafc02a2e445ac4caf74f.jpeg](https://img-blog.csdnimg.cn/img_convert/aba7fb84663eafc02a2e445ac4caf74f.jpeg)
那么这玩意到底有啥用呢?目前为止,它可以让你学到下面这些东西:
最简单的CUDA算子的写法。
最简洁的PyTorch和TensorFlow封装CUDA算子的方法。
几种编译CUDA算子的方法。
python调用CUDA算子的几种方式。
python中统计CUDA算子运行时间的正确方法。
PyTorch和TensorFlow自定义算子梯度的方法。
你直呼内行,要是早点能看到这篇文章,能多发好几篇论文啊。
看完代码,有些细节你还是懵逼了,这这这都是啥意思啊,为啥这么写啊?
这时候你又看到了几篇教程,哦原来都有讲解,那没事了。
godweiyang:PyTorch自定义CUDA算子教程与运行时间分析
https://zhuanlan.zhihu.com/p/358220419
godweiyang:详解PyTorch编译并调用自定义CUDA算子的三种方式
https://zhuanlan.zhihu.com/p/358778742
godweiyang:三分钟教你如何PyTorch自定义反向传播
https://zhuanlan.zhihu.com/p/359524837
从那以后,你代码能力飞速提升,一连发了好几篇顶会。
然后你顺手一键三连,把这篇文章转给了身边有需要的人,个个都夸你发现了宝藏。
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D感知、多传感器融合、SLAM、高精地图、规划控制、AI模型部署落地等方向;
加入我们:自动驾驶之心技术交流群汇总!
自动驾驶之心【知识星球】
想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D感知、多传感器融合、目标跟踪)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!