【问题标题】:Adding arrays on Nvidia's GPU在 Nvidia 的 GPU 上添加数组
【发布时间】:2021-10-17 04:28:32
【问题描述】:

我正在 Win 10、Intel I7(3.4 GHz、16 MB RAM)、Nvidia GTX 760(计算级别 = 3.0)、最新安装的 numpy、numba、cuda 和相关工具上学习 GPU/Python。我有三个相关的问题。

下面给出的示例在 GPU 上的运行速度比在 CPU 上慢!我想知道为什么会这样。

import numpy as np
from numba import jit

@jit
def Add_GPU(a, b):
  return a + b

def Add_CPU(a, b):
  return a + b

def f3():
    # Initialize arrays
    N = 10000000
    A = np.ones(N, dtype=np.float32)
    B = np.ones(A.shape, dtype=A.dtype)
    C = np.empty_like(A, dtype=A.dtype)

    # Add arrays.
    start = timer()
    C = Add_GPU(A, B)
    print("Time Add_GPU:", timer()-start)

    start = timer()
    C = Add_CPU(A, B)
    print("Time Add_CPU:", timer()-start)

f3()

结果是:

WI - Python> test_GPU
Time Add_GPU: 0.3832171000000001
Time Add_CPU: 0.013704299999999892

在上面的代码中,如果我将@jit 替换为@vectorize(['float32(float32, float32)'], target='cuda'),编译器会说需要compute-level=3.5。请让我知道那里发生了什么。

是否有此类要求的表格?例如,PyTorch 或 TensorFlow 需要什么计算级别?

【问题讨论】:

  • 您的(8 岁)GPU 太旧,无法支持任何当前版本的 CUDA 或任何可以使用最新版本 CUDA GPU 和工具包进行加速的 Python 框架。而且您的第一个代码 sn-p 根本不在 GPU 上运行,它是为您的 CPU 编译的。而且它更慢,因为您测量的时间包括编译它的时间。运行两次,测量第二次调用的执行时间
  • 定时函数可能很有用,但前提是正确执行 - 查看标准库 timeit 以获得易于使用和准确的实用函数。
  • 在 Windows 上,时间粒度功能非常糟糕。在我的机器上,这会在忽略编译时间后给出这样的排序结果:0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0065, 0.0156, 0.0156, 0.0156, 0.0156, 0.0156, 0.0156, 0.0156, 6,015 6,0156, 5,01. 0.0156,0.0156。可以看到时序阈值使基准测试完全有缺陷(独立于调用Add_CPUAdd_GPU(不使用GPU)。除此之外,使用GPU实现必然会因为PCI+内存传输而变慢,而CPU 实现只支付内存传输。
  • 我也忘了提到“Intel i7”处理器,因为它是a brand。架构实际上更重要。事实上,i7 Bloomfield(13 岁)处理器肯定会比 i7 Rocket Lake(今年发布)慢得多,甚至可能比 i5 Rocket Lake 还要慢。确切的型号也很重要,因为所有 i7 Rocket Lake 处理器都不是严格等效的。这有点像说您使用 Nvidia GTX(或者说 GT)而不提及 760。
  • 所有三个 cmets 都很有用且内容丰富。我学到了一些关于我的 GTX 卡、CUDA 和 Python 计时器的知识。谢谢大家。

标签: python gpu numba


【解决方案1】:

根据评论者提供的指导和额外的网络搜索,我已经能够使用 GTX 760 卡(计算能力 = 3.0),如下所示。关键是找到兼容的早期软件版本。

  1. 卸载除视频驱动程序以外的所有 Nvidia 软件(通过 Windows)。
  2. 卸载 Python 包(如果已安装): conda uninstall numba cudatoolkit
  3. https://developer.nvidia.com/cuda-toolkit-archive下载安装cudatoolkit V 10.2。
  4. 安装 Python 包以使用 pytorch 功能:
conda install -c anaconda cudatoolkit==10.2.89
conda install numba=0.50
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 -c pytorchy
pip install cupy-cuda102

我发布了命令以防其他人处于类似情况。上面的安装没有最新的那么强大,但它让我可以在一张不起眼的 GTX 卡上学习和实验。 numba 文档中给出的示例现在可以使用 - 没有错误消息。

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2012-10-29
    • 2012-07-08
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多