我有一些关于将 Numpy 与 GPU (nvidia GTX 1080 Ti) 结合使用的基本问题。我是 GPU 新手,想确保我正确使用 GPU 来加速 Numpy/Python。我在互联网上搜索了一段时间,但没有找到解决我问题的简单教程。如果有人能给我一些指示,我将不胜感激:
1) Numpy/Python 是否会自动检测 GPU 的存在并利用它来加速矩阵计算(例如 numpy.multiply、numpy.linalg.inv 等)?或者我是否有特定方式的代码来利用 GPU 进行快速计算?
2)有人可以推荐关于使用 Numpy/Python 和 GPU(nvidia 的)的好教程/介绍材料吗?
非常感谢!
Numpy/Python 是否自动检测 GPU 的存在并利用 它可以加速矩阵计算(例如numpy.multiply, numpy.linalg.inv,...等)?
没有。
或者我是否有特定方式的代码来利用 GPU 来实现快速 计算?
是的。搜索 Numba、CuPy、Theano、PyTorch 或 PyCUDA,了解使用 GPU 加速 Python 的不同范例。
不,您也可以使用 CuPy,它与 numpy 具有类似的接口。 https://cupy.chainer.org/
不。 Numpy 不使用 GPU。但你可以使用 CuPy。 CuPy 的语法与 NumPy 非常兼容。因此,要使用 GPU,您只需替换以下代码行
import numpy as np
与
import cupy as np
仅此而已。继续运行您的代码。我想我应该在这里提到的另一件事是,要安装 CuPy,您首先需要安装 CUDA。由于您问题的目标是通过使用 GPU 来加快计算速度,因此我还建议您探索 PyTorch。使用 PyTorch,您几乎可以完成使用 NumPy 可以完成的所有操作,甚至更多。如果您已经熟悉 NumPy,那么学习曲线也会非常平滑。您可以在此处找到有关用 PyTorch 替换 NumPy 的更多详细信息:https://www.youtube.com/watch?v=p3iYN-2XL8w
JAX 使用 XLA 编译 NumPy 代码以在 GPU/TPU 上运行:https://github.com/google/jax
如果你的GPU不支持CUDA,似乎可以使用PyOpenCL。
据了解,其与 NumPy 完全兼容的语法的工作原理如下:
import pyopencl as cl
import pyopencl.array as cl_array
import numpy as np
platform = cl.get_platforms()[0]
device = platform.get_devices()[0]
context = cl.Context([device])
queue = cl.CommandQueue(context)
N = 10000 # array size
# Create array in main memory
a_cpu = np.random.rand(N,N).astype(np.float32)
# Compute on CPU: slow
result_from_cpu = a_cpu**100
# Copy to GPU, compute on GPU, fetch result from GPU: fast
a_gpu = cl_array.to_device(queue, a_cpu)
result_from_gpu = a_gpu**100
result_from_gpu_copied_to_main_memory = result_from_gpu.get()