【问题标题】:cuDF low GPU utilizationcuDF GPU 利用率低
【发布时间】:2020-12-31 05:17:06
【问题描述】:

我的任务涉及在数据帧上运行许多查询。我比较了在 Xeon CPU (Pandas) 与 RTX 2080 (CUDF) 上运行这些查询的性能。对于 100k 行的数据帧,GPU 速度更快,但速度并不快。查看 nvidia-smi 输出,运行查询时 GPU 利用率约为 3-4%。

我的问题是如何加快 cuDF 任务并实现高 GPU 利用率?

例如,对于 CPU 用例,我可以在 8 个 CPU 内核上并行运行其中的 8 个查询。

NUM_ELEMENTS = 100000

df = cudf.DataFrame()
df['value1'] = cp.random.sample(NUM_ELEMENTS)
df['value2'] = cp.random.sample(NUM_ELEMENTS)
df['value3'] = cp.random.sample(NUM_ELEMENTS)


c1 = np.random.random()
c2 = np.random.random()
c3 = np.random.random()
res = df.query('((value1 < @c1) & (value2 > @c2) & (value3 < @c3))')

这是一个不需要大量 GPU 周期的示例代码,但是我想对数据运行数千个这样的查询,我不想按顺序运行它们。有没有办法在 cuDF 数据帧上并行运行多个 query() 调用以最大限度地提高 GPU 利用率?

【问题讨论】:

  • 为了帮助提高 cudf 任务的速度,我需要有关函数和正在使用的代码的更多信息。请提供代码的 sn-p 和/或 cudf 函数在其中使用的方式以及有关数据集的信息(维度、dtypes 等)
  • 您的代码 sn-p 有点难以阅读。请在代码的开头和结尾使用 ``` 使其更具可读性。
  • 我更新了原来的问题。谢谢!
  • 假设对我的 cudf.Dataframe 的 query() 调用需要 3% 的 GPU 利用率(我知道这与 CPU 利用率不完全相同),我应该能够运行至少 20 个这样的并行查询,这是一个公平的假设吗?

标签: cudf


【解决方案1】:

我们正在努力在 cudf 中启用此功能,但目前这是 cuDF 库的限制。您正在寻找的并行机制是使用 CUDA Streams (https://developer.nvidia.com/blog/gpu-pro-tip-cuda-7-streams-simplify-concurrency/)。我们还不完全支持 cuDF Python 库中的 CUDA 流,但我们正在积极努力。

您可以结合使用 cupy 和 numba 以及它们对 CUDA 流的支持(https://docs.cupy.dev/en/stable/reference/generated/cupy.cuda.Stream.htmlhttps://numba.pydata.org/numba-doc/dev/cuda-reference/host.html#stream-management)来解决此问题,但您将处于一个非常实验性的领域。

【讨论】:

  • 感谢您的指点,基思。这很有帮助。继续围绕 CUDA 和所有 cu* 的出色工作,你们摇滚。
猜你喜欢
  • 2019-09-26
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 2021-05-09
  • 1970-01-01
  • 2013-05-13
  • 2018-06-29
相关资源
最近更新 更多