用numba和cuda

80倍更快的Python?发现一行如何将您的代码变成GPU野兽!

来源:KDnuggets
作者的图像|意识形态图

GPU非常适合您需要跨不同数据进行相同操作的任务。这被称为单个指令,多个数据(SIMD)方法。与CPU(只有几个强大的核心)不同,GPU具有数千个可以一次运行这些重复操作的较小较小的核心。您会在机器学习中经常看到这种模式,例如,在添加或乘以大量向量时,因为每个计算都是独立的。这是使用GPU与并行性加速任务的理想情况。

单个指令,多个数据(SIMD)

nvidia创建了CUDA,是开发人员编写在GPU而不是CPU上运行的程序的方式。它基于C,可让您编写称为内核的特殊功能,该功能可以同时运行许多操作。问题在于,在C或C ++中编写CUDA并不是对初学者的友好型。您必须处理手动内存分配,线程协调并了解GPU在低级别的工作方式。这可能是压倒性的,尤其是如果您习惯在Python中编写代码。

cuda

这是Numba可以为您提供帮助的地方。它允许使用LLVM(低级虚拟机)编译器基础架构编写Python的CUDA内核,以将Python代码直接编译为CUDA兼容的内核。通过及时的(JIT)汇编,您可以用装饰器注释您的功能,Numba为您处理所有其他功能。

numba 它允许使用LLVM(低级虚拟机)编译器基础架构编写Python的CUDA内核,以将您的Python代码直接编译为兼容CUDA兼容的内核。

在本文中,我们将使用一个常见的向量添加示例,然后将简单的CPU代码转换为带有Numba的CUDA内核。向量添加是平行性的理想例子,因为单个索引之间的添加与其他指数无关。这是完美的SIMD场景,因此可以同时添加所有索引以在一个操作中完成矢量添加。

colab的