GPU Dask Cuda群集:client.submit

问题描述 投票:0回答:1

我对为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内核上正确分配任务?

UPDATE:

通过首先安装Dask Distributed和Dask CUDA版本,我设法使其正常运行。

但是,我注意到只有1个工作线程可用,但是我有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
dask dask-distributed cupy
1个回答
0
投票

看来该问题在评论中有答案。我要复制Nick Becker的回复

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

© www.soinside.com 2019 - 2024. All rights reserved.