如何从CuPy阵列创建dask阵列?

如何从CuPy阵列创建dask阵列?,dask,dask-distributed,cupy,dask-ml,Dask,Dask Distributed,Cupy,Dask Ml,我正试图用大量数据启动dask.cluster.Kmeans。 使用CPU是可以的,因为我用dask.array包装numpy数组。 由于未在cupy中实现功能,因此无法使用GPU 我尝试从CuPy random generator生成随机dask数组时重现Mattew Rocklin示例(),它是有效的,但我不想使用这种情况 用dask.array包装cupy-不起作用 >>> import dask.array as da >>> import cupy

我正试图用大量数据启动
dask.cluster.Kmeans
。 使用CPU是可以的,因为我用
dask.array
包装
numpy
数组。 由于未在
cupy
中实现功能,因此无法使用GPU

我尝试从CuPy random generator生成随机dask数组时重现Mattew Rocklin示例(),它是有效的,但我不想使用这种情况

dask.array
包装
cupy
-不起作用

>>> import dask.array as da
>>> import cupy as cp
>>> da.from_array(cp.arange(100000)).sum().compute()
我期望此数组的和,但得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/base.py", line 175, in compute
    (result,) = compute(self, traverse=False, **kwargs)
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/base.py", line 446, in compute
    results = schedule(dsk, keys, **kwargs)
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/threaded.py", line 82, in get
    **kwargs
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/local.py", line 491, in get_async
    raise_exception(exc, tb)
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/compatibility.py", line 130, in reraise
    raise exc
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/local.py", line 233, in execute_task
    result = _execute_task(task, data)
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/core.py", line 119, in _execute_task
    return func(*args2)
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/array/core.py", line 100, in getter
    c = np.asarray(c)
  File "/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/numpy/core/numeric.py", line 538, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: object __array__ method not producing an array
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site packages/dask/base.py”,第175行,在compute中
(结果,)=compute(自我,遍历=False,**kwargs)
compute中的文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site packages/dask/base.py”,第446行
结果=进度表(dsk、键、**kwargs)
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/threaded.py”,get中的第82行
**夸尔斯
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site packages/dask/local.py”,第491行,异步获取
raise_异常(exc、tb)
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/compatibility.py”,第130行,重新登录
加薪
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site packages/dask/local.py”,第233行,在执行任务中
结果=_执行_任务(任务、数据)
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site packages/dask/core.py”,第119行,在执行任务中
返回函数(*args2)
文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site-packages/dask/array/core.py”,第100行,在getter中
c=np.asarray(c)
asarray中的文件“/home/ubuntu/miniconda3/envs/cupy/lib/python3.6/site packages/numpy/core/numeric.py”,第538行
返回数组(a,数据类型,copy=False,order=order)
ValueError:对象_数组_方法未生成数组

那么,如何通过dask数组管理与CuPy的工作呢?

从CuPy数组创建dask数组时,需要提供
da.from_array
关键字参数
asarray=False
。因此,您的代码如下所示

>>将dask.array作为da导入
>>>作为cp导入cupy
>>>da.from_数组(cp.arange(100000),asarray=False).sum().compute()

你的cupy版本是什么?@mdurant,软件包的版本:
cupy-6.0.0
dask-2.0.0
默认值安装
谢谢@akirkham,它可以工作。不幸的是,未实现的CuPy功能无法让我有机会在
CuPy
对象的
dask.array
上启动
dask_ml.cluster.KMeans
。感谢您提供的信息,@RostislavPovelikin。如果你知道CuPy缺少哪些功能,你能提出一些关于回购协议的问题吗?我们可以在那里跟进。独立地,您还可以考虑尝试<代码> das-Cuq,这也实现了<代码> kMease>代码>。