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 阵列)。
我对 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 阵列)。