点击上方蓝字关注我们
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 = 4
out = 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
实现一个内核,将a
和b
添加并将其存储在out
中。输入a
和b
是向量。您的线程数多于职位数。
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 = 2
out = 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