8K star!互动式学习,0基础入门CUDA

文摘   科技   2024-09-27 11:31   北京  

点击上方蓝字关注我们

IT 咖啡馆,探索无限可能!

恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。

 

现在AI越来越火爆,而在AI背后做支持的就是GPU,GPU架构开发正变得越来越重要,也有越来越多的开发者对CUDA的编程开发感兴趣。

今天我们分享的开源项目,它可以初学者以互动的方式学习CUDA编程,即时没有基础也可以通过直观的形式来了解大部分CUDA的概念,它就是:GPU-Puzzles




GPU-Puzzles 是什么



GPU Puzzles是由Sasha Rush开发的一个开源项目,旨在帮助初学者以互动的方式学习CUDA编程。

GPU 架构对于机器学习至关重要,而且似乎每天都在变得越来越重要。但是抽象的说明很难理解,本笔记本旨在以互动的方式教授初学者 GPU 编程。即使您从未接触过 GPU 代码,也可以成为机器学习专家。

本项目利用NUMBA框架,它能够将Python代码直接映射到CUDA内核,使得用户能够在相对较低的门槛下进行GPU编程。




安装使用


 

建议在 Colab 中执行这些操作,因为它很容易上手。创建自己的副本后,在设置中打开 GPU 模式,然后开始编码。其中包含了从MAP、ZIP、广播到矩阵乘法供14个挑战项目。

使用时先把前面的依赖安装一下,之后就可以开始下面的挑战了。

以最基本的Map为例,你会在Colab中得到这样的代码:

def map_spec(a):    return a + 10
def map_test(cuda): def call(out, a) -> None: local_i = cuda.threadIdx.x # FILL ME IN (roughly 1 lines)
return call
SIZE = 4out = np.zeros((SIZE,))a = np.arange(SIZE)problem = CudaProblem( "Map", map_test, [a], out, threadsperblock=Coord(SIZE, 1), spec=map_spec)problem.show()

这些代码看起来像 Python,但实际上是 CUDA!您不能使用标准 Python 工具库,挑战都是为了说明概念,所以只需要执行简单的操作,基本上是 +、*、简单数组索引、for 循环和 if 语句,在这个例子中你只需处理局部变量来完成输入输出的传递,将该函数视为call每个线程运行一次。唯一的区别cuda.threadIdx.x每次都会发生变化。

完成后,你可以点击测试,来验证是否通过,如果通过了会放一个狗狗的视频,作者看来很喜欢狗。

这里还有一些其他的挑战示例。

挑战5 Broadcast

实现一个内核,将ab添加并将其存储在out中。输入ab是向量。您的线程数多于职位数。

def broadcast_test(cuda):    def call(out, a, b, size) -> None:        local_i = cuda.threadIdx.x        local_j = cuda.threadIdx.y        # FILL ME IN (roughly 2 lines)
return call
SIZE = 2out = np.zeros((SIZE, SIZE))a = np.arange(SIZE).reshape(SIZE, 1)b = np.arange(SIZE).reshape(1, SIZE)problem = CudaProblem( "Broadcast", broadcast_test, [a, b], out, [SIZE], threadsperblock=Coord(3, 3), spec=zip_spec,)problem.show()
# Broadcast
 
 Score (Max Per Thread):   |  Global Reads | Global Writes |  Shared Reads | Shared Writes |   |             0 |             0 |             0 |             0 | 




总结



整体来说GPU Puzzles是一个非常好的了解CUDA开发的项目,尤其对于不了解CUDA的初学者,可以不必有什么负担,快速的理解内容,从而加深对GPU架构和CUDA操作的理解。

对于想深入研究CUDA的同学,在了解了基础内容后,可以继续深入学习,建议查看官方的内容:CUDA Samples。这是NVIDIA为学习CUDA编程提供的丰富示例和教程,涵盖了从基本操作到复杂算法实现的各个方面。

同时项目的作者还有另一个同类的项目:Tensor Puzzles,是PyTorch的互动挑战。使用Tensor操作提升深度学习理解。

   




项目信息


    • 项目名称:GPU-Puzzles

    • GitHub 链接:https://github.com/srush/GPU-Puzzles

    • Star 数:8K


往期推荐

5k star!可视化的定任务管理系统

4k star!OCR进入2.0时代,端到端的开源模型

「Github一周热点41期」eBPF的捕获工具、本地版AWS、Devops脚本等

  




识别二维码关注我们
微信号- it-coffee
B站 - IT-咖啡馆
头条号- IT咖啡馆

IT咖啡馆
开源项目、IT技能和有趣的事情
 最新文章