熬了几个通宵,我写了份CUDA新手入门代码

简介: 熬了几个通宵,我写了份CUDA新手入门代码

在用PyTorch或者TensorFlow搭积木的时候,你是不是也遇到过下面这些情况:

  • 自带的算子及其组合都无法满足你超(bian)常(tai)的计算需求。
  • 自带的算子不可导,需要自己定义反向传播的梯度,例如argmax。
  • 自带的算子太慢了,严重影响了你发paper的速度。


这时候你就会想,要是能自己实现一个速度又快、又能满足需求的算子就好了。

你想到了CUDA,自己写一个CUDA算子不就完事了嘛!

然后问题又来了,写是写完了,怎么用python代码调用它呢?

还有一个问题,这个算子它没梯度啊,自动求导机制不顶用了!

你去网上各种搜索,方法倒是全有,但是源码都好复杂,你一个新手怎么可能有心思看完那么复杂的教程?


这时候,你突然看到了这篇文章,看完后你惊呼:“怎么会有这么简洁的示例代码,这就是我想要的!”

没错,这就是我熬了好几个通宵,查了无数bug后,写出来的一份示例代码。

话不多说,先上源码好吧:

https://github.com/godweiyang/NN-CUDA-Example

我给它命名为“Neural Network CUDA Example”,简称“NN CUDA Example”,意思就是神经网络调用CUDA的示例。

那么这玩意到底有啥用呢?目前为止,它可以让你学到下面这些东西:

  • 最简单的CUDA算子的写法。
  • 最简洁的PyTorch和TensorFlow封装CUDA算子的方法。
  • 几种编译CUDA算子的方法。
  • python调用CUDA算子的几种方式。
  • python中统计CUDA算子运行时间的正确方法。
  • PyTorch和TensorFlow自定义算子梯度的方法。


你直呼内行,要是早点能看到这篇文章,能多发好几篇论文啊。

看完代码,有些细节你还是懵逼了,这这这都是啥意思啊,为啥这么写啊?

这时候你又看到了几篇教程,哦原来都有讲解,那没事了。


从那以后,你代码能力飞速提升,一连发了好几篇顶会。

然后你顺手一键三连,把这篇文章转给了身边有需要的人,个个都夸你发现了宝藏。

相关文章
|
数据采集 存储 缓存
如何设计一个网络爬虫?
网络爬虫也被称为机器人或蜘蛛,它被搜索引擎用于发现网络上的新内容或更新内容。内容可以是网页、图片、视频、PDF文件等。网络爬虫开始时会收集一些网页,然后跟随这些网页上的链接收集新的内容
|
8月前
|
JSON 数据格式 AI芯片
飞桨x昇腾生态适配方案:14_loop算子缺失(上):ONNX模型拆分
本文针对NPU不支持LOOP算子的问题,提出一种解决方案:将ONNX模型拆分为含LOOP算子和不含LOOP算子的子图,单独推理LOOP部分。通过构造包含LOOP算子的ONNX模型,将其转换为JSON格式提取子图,并对子图进行修改(如添加输入节点、删除无关节点)。最后,将JSON转回ONNX格式,完成模型切分与优化。此方法适用于关键路径上的LOOP算子,可有效解决离线推理中的兼容性问题。
610 26
|
10月前
|
机器学习/深度学习 数据采集 算法
基于yolov2和googlenet网络的疲劳驾驶检测算法matlab仿真
本内容展示了基于深度学习的疲劳驾驶检测算法,包括算法运行效果预览(无水印)、Matlab 2022a 软件版本说明、部分核心程序(完整版含中文注释与操作视频)。理论部分详细阐述了疲劳检测原理,通过对比疲劳与正常状态下的特征差异,结合深度学习模型提取驾驶员面部特征变化。具体流程包括数据收集、预处理、模型训练与评估,使用数学公式描述损失函数和推理过程。课题基于 YOLOv2 和 GoogleNet,先用 YOLOv2 定位驾驶员面部区域,再由 GoogleNet 分析特征判断疲劳状态,提供高准确率与鲁棒性的检测方法。
|
编译器 网络虚拟化 C语言
2023年最全 Windows + VSCode 配置 OpenCV C++ 一站式开发调试环境教程
2023年最全 Windows + VSCode 配置 OpenCV C++ 一站式开发调试环境教程
3722 0
|
算法
广度优先遍历(BFS):逐层探索图的算法奥秘
在图论中,广度优先遍历(Breadth-First Search,BFS)是一种图遍历算法,它以一种逐层的方式探索图的节点。通过从起始节点开始,逐层向外扩展,BFS能够帮助我们解决许多与图相关的问题。
494 0
|
Android开发 开发者
Android开发之通过渲染纹理展示地球仪
该文阐述了如何使用OpenGL为三维物体添加纹理,以增强其真实感。纹理坐标是二维的,用于标记摊平后的“布料”对应物体的哪个部位,类似裁缝制作衣服的过程。在OpenGL中,启用纹理和深度测试是关键,还包括设置纹理参数、分配纹理编号、绑定位图材质等步骤。计算材质的纹理坐标后,通过`glDrawArrays`结合顶点和纹理坐标逐个贴图。最终示例展示了将世界地图贴到球体上形成逼真的地球仪效果。通过控制旋转、平移和缩放,能实现简单的三维动画效果。
303 2
Android开发之通过渲染纹理展示地球仪
|
缓存 Linux
[cmake] ---- set_property
[cmake] ---- set_property
522 1
|
机器学习/深度学习 数据采集 PyTorch
【单点知识】基于实例讲解PyTorch中的ImageFolder类
【单点知识】基于实例讲解PyTorch中的ImageFolder类
630 0
|
算法 Linux 网络安全
超详细!linux环境git clone探坑录
超详细!linux环境git clone探坑录
1016 0

热门文章

最新文章