【问题标题】:cuDF - Not leveraging GPU corescuDF - 不利用 GPU 内核
【发布时间】:2020-04-29 06:31:01
【问题描述】:

我是下面一段带有 cuDF 的 python 代码来加速这个过程。但是与我的 4 核本地计算机 cpu 相比,我看不出速度有任何差异。 GPU 配置为 4 x NVIDIA Tesla T4

def arima(train):
    h = []
    for each in train:
        model = pm.auto_arima(np.array(ast.literal_eval(each)))
        p = model.predict(1).item(0)
        h.append(p)
    return h


for t_df in pd.read_csv("testset.csv",chunksize=1000):
    t_df = cudf.DataFrame.from_pandas(t_df)
    t_df['predicted'] = arima(t_df['prev_sales'])

我在这里缺少什么?

【问题讨论】:

  • GPU 计算由两部分组成:将数据发送到 GPU 和计算本身。两者都需要一些时间。对于像您这样的简单计算,GPU 上的计算甚至可能比 CPU 上花费更多的时间。
  • 我有 200 万条记录,所以我选择了 GPU。在这种情况下,如何利用 GPU @SergeyBushmanov 发挥最大性能
  • 利用 GPU @SergeyBushmanov 的最大性能所需的任何代码级别更改

标签: python pandas gpu cudf


【解决方案1】:

虽然我会帮助您解决无法访问所有 GPU 的问题,但我将与您分享一个性能提示:如果您的所有数据都适合单个 GPU,那么您应该使用坚持使用单个 GPU 处理cudf 因为它更快,因为它不需要任何编排开销。如果没有,请继续阅读:)

您没有使用 4 个 GPU 的原因是您没有使用 dask-cudfcudf 是一个单一的 GPU 库。 dask-cudf 允许您将其扩展到多个 GPU 和多个节点,或处理“大于 GPU 内存”大小的数据集。

这是一个很好的起点:https://docs.rapids.ai/api/cudf/stable/10min.html

至于您的速度问题,如果可能的话,您应该通过 cudf 将 CSV 直接读入 GPU。在您的代码中,您要读取两次数据 - 一次是使用 pandas 托管 [CPU],一次是从 pandas 托管 cudf [GPU]。这是不必要的 - 而且您在读取时失去了 GPU 加速的所有好处。在大型数据集上,与 pandas 相比,cudf 将为您提供相当不错的文件读取速度。

import dask_cudf
df = dask_cudf.read_csv("testset.csv", npartitions=4) # or whatever multiples of the # of GPUs that you have

然后从那里开始。一定要设置客户端。 https://docs.rapids.ai/api/cudf/stable/10min.html#Dask-Performance-Tips。此信息也可在该链接中找到,该链接与上述链接在同一页面中。不需要for循环:)。

对于其余部分,我假设您将 cuml 用于您的机器学习算法,例如 ARIMA。 https://docs.rapids.ai/api/cuml/stable/api.html?highlight=arima#cuml.tsa.ARIMA。这是一个示例笔记本:https://github.com/rapidsai/cuml/blob/branch-0.14/notebooks/arima_demo.ipynb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 2013-02-03
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 2013-05-13
    • 2020-07-19
    • 2018-07-04
    相关资源
    最近更新 更多