熬了几个通宵,我写了份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自定义算子梯度的方法。


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

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

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


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

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

相关文章
|
网络协议 Docker 容器
Docker容器内不能联网的6种解决方案
Docker容器内不能联网的6种解决方案   注:下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.
12147 2
|
5月前
|
JSON 数据格式 AI芯片
飞桨x昇腾生态适配方案:14_loop算子缺失(上):ONNX模型拆分
本文针对NPU不支持LOOP算子的问题,提出一种解决方案:将ONNX模型拆分为含LOOP算子和不含LOOP算子的子图,单独推理LOOP部分。通过构造包含LOOP算子的ONNX模型,将其转换为JSON格式提取子图,并对子图进行修改(如添加输入节点、删除无关节点)。最后,将JSON转回ONNX格式,完成模型切分与优化。此方法适用于关键路径上的LOOP算子,可有效解决离线推理中的兼容性问题。
355 26
|
Android开发 开发者
Android开发之通过渲染纹理展示地球仪
该文阐述了如何使用OpenGL为三维物体添加纹理,以增强其真实感。纹理坐标是二维的,用于标记摊平后的“布料”对应物体的哪个部位,类似裁缝制作衣服的过程。在OpenGL中,启用纹理和深度测试是关键,还包括设置纹理参数、分配纹理编号、绑定位图材质等步骤。计算材质的纹理坐标后,通过`glDrawArrays`结合顶点和纹理坐标逐个贴图。最终示例展示了将世界地图贴到球体上形成逼真的地球仪效果。通过控制旋转、平移和缩放,能实现简单的三维动画效果。
225 2
Android开发之通过渲染纹理展示地球仪
|
缓存 Linux
[cmake] ---- set_property
[cmake] ---- set_property
427 1
|
Python C++ PyTorch
PyTorch 2.2 中文官方教程(十二)(1)
流畅的 Python 第二版(GPT 重译)(八)
224 1
|
机器学习/深度学习 数据采集 PyTorch
【单点知识】基于实例讲解PyTorch中的ImageFolder类
【单点知识】基于实例讲解PyTorch中的ImageFolder类
474 0
|
存储 编译器 C语言
【C/C++ 关键字 存储类说明符 】一文带你了解C/C++ 中extern 外部声明 关键字的使用
【C/C++ 关键字 存储类说明符 】一文带你了解C/C++ 中extern 外部声明 关键字的使用
305 1
|
IDE 数据中心 Docker
使用PyCharm与Docker容器进行开发:从入门到精通
使用PyCharm与Docker容器进行开发:从入门到精通
3540 0
生产环境日志还用notepad++?难怪定位慢,UltraEdit了解一下
最近这两天运营部门反馈有会员的会员卡开卡时间与相关页面显示的开卡时间不一致,需要定位确定哪个时间是准确的。对于线上数据异常问题一定要谨慎处理,因为很有可能会是用户的某些非常规操作导致部分场景漏测。
生产环境日志还用notepad++?难怪定位慢,UltraEdit了解一下
|
算法 Linux 网络安全
超详细!linux环境git clone探坑录
超详细!linux环境git clone探坑录
821 0