GPU Dask Cuda 集群:client.submit

GPU Dask Cuda cluster: client.submit

我对 CPU 分布式 Dask 非常熟悉。我想探索向 运行 我的代码在 GPU 内核上的过渡。当我向 LocalCUDACluster 提交任务时,出现此错误:

ValueError: tuple is not allowed for map key

这是我的测试用例:

import cupy as cp
import numpy as np
from dask_cuda import LocalCUDACluster
from dask.distributed import Client

cluster = LocalCUDACluster()
c = Client(cluster)

def test_function(x):
    return(x+1)

sample_np = np.array([0,1])
sample_cp = cp.asarray(sample_np)

test_1 = test_function(sample_cp)
test_2 = c.submit(test_function,sample_cp)
test_2 = test_2.result()

test_1 输出:

array([1, 2])

test_2 输出:

distributed.protocol.core - CRITICAL - Failed to deserialize
.....
ValueError: tuple is not allowed for map key

如何在 CUDA 核心上正确分配任务?

更新:

我设法通过首先安装 Dask Distributed 和 Dask CUDA 版本来让它工作。

但是,我注意到只有 1 个 worker 可用,但我有 600 个 CUDA 内核。我如何在这 600 个 CUDA 内核上分配单独的任务?我想在这 600 个内核上并行化任务。

版本:

dask 2.17.2
dask-cuda 0.13.0
cupy 7.5.0
cudf 0.13.0
msgpack-python 1.0.0

看来这个问题在评论里有答案了。我要复制 Nick Becker

的回复

Dask 的分布式调度程序是单线程的(CPU 和 GPU),而 Dask-CUDA 每个 GPU 模型使用一个 worker。这意味着分配给给定 GPU 的每个任务将 运行 串行,但任务本身将使用 GPU 进行并行计算。您可能想查看 Dask 文档并探索 Dask.Array(它也支持 GPU 阵列)。