cupyx.distributed.array.DistributedArray#

class cupyx.distributed.array.DistributedArray(self, shape, dtype, chunks_map, mode=REPLICA, comms=None)[源代码][源代码]#

跨多个CUDA设备的多维数组。

此类实现了 cupy.ndarray 提供的一些基本操作。数组内容被分割成块,这些块是与原始数组切片相对应的连续数组。请注意,一个设备可以容纳多个块。

这个直接构造函数是为内部调用设计的。用户应该使用 distributed_array() 来创建分布式数组。

参数:
  • shape (tuple of ints) – 创建的数组的形状。

  • dtype (dtype_like) – 任何可以被解释为 numpy 数据类型的对象。

  • chunks_map (dict from int to list of chunks) – 与每个设备关联的块对象列表。

  • mode (mode object, optional) – 确定如何解释块重叠的模式。默认为 cupyx.distributed.array.REPLICA

  • comms (optional) – 分布式数组内部持有的通信器对象。与其他分布式数组共享它们可以节省时间,因为它们的初始化是一个代价高昂的操作。

返回类型:

DistributedArray

参见

DistributedArray.mode 关于模式的详细信息。

方法

__getitem__(*args, **kwargs)[源代码][源代码]#

不支持。

__setitem__(*args, **kwargs)[源代码][源代码]#

不支持。

__len__(*args, **kwargs)[源代码][源代码]#

不支持。

__iter__(*args, **kwargs)[源代码][源代码]#

不支持。

__copy__(*args, **kwargs)[源代码][源代码]#

不支持。

all(*args, **kwargs)[源代码][源代码]#

不支持。

all_chunks()[源代码][源代码]#

返回带有所有缓冲数据刷新的块。

缓冲数据是在诸如重新分片和模式更改的情况下创建的。

返回类型:

dict[int, list[cupy.ndarray]]

any(*args, **kwargs)[源代码][源代码]#

不支持。

argmax(*args, **kwargs)[源代码][源代码]#

不支持。

argmin(*args, **kwargs)[源代码][源代码]#

不支持。

argpartition(*args, **kwargs)[源代码][源代码]#

不支持。

argsort(*args, **kwargs)[源代码][源代码]#

不支持。

astype(*args, **kwargs)[源代码][源代码]#

不支持。

change_mode(mode)[源代码][源代码]#

以给定模式返回视图或副本。

参数:

mode (mode Object) – 如何解释块的重叠。

返回类型:

DistributedArray

参见

DistributedArray.mode 关于模式的详细信息。

choose(*args, **kwargs)[源代码][源代码]#

不支持。

clip(*args, **kwargs)[源代码][源代码]#

不支持。

compress(*args, **kwargs)[源代码][源代码]#

不支持。

conj(self) ndarray#
conjugate(self) ndarray#
copy(*args, **kwargs)[源代码][源代码]#

不支持。

cumprod(*args, **kwargs)[源代码][源代码]#

不支持。

cumsum(*args, **kwargs)[源代码][源代码]#

不支持。

diagonal(*args, **kwargs)[源代码][源代码]#

不支持。

dot(*args, **kwargs)[源代码][源代码]#

不支持。

dump(*args, **kwargs)[源代码][源代码]#

不支持。

dumps(*args, **kwargs)[源代码][源代码]#

不支持。

fill(*args, **kwargs)[源代码][源代码]#

不支持。

flatten(*args, **kwargs)[源代码][源代码]#

不支持。

get(stream=None, order='C', out=None, blocking=True)[源代码][源代码]#

返回主机内存中数组的副本。

返回类型:

ndarray

item(*args, **kwargs)[源代码][源代码]#

不支持。

max(axis=None, out=None, keepdims=False)[源代码][源代码]#

返回沿给定轴的最大值。

备注

目前,它仅支持 axis 的非 None 值以及 outkeepdims 的默认值。

参见

cupy.ndarray.max(), numpy.ndarray.max()

mean(*args, **kwargs)[源代码][源代码]#

不支持。

min(axis=None, out=None, keepdims=False)[源代码][源代码]#

沿指定轴返回最小值。

备注

目前,它仅支持 axis 的非 None 值以及 outkeepdims 的默认值。

参见

cupy.ndarray.min(), numpy.ndarray.min()

nonzero(*args, **kwargs)[源代码][源代码]#

不支持。

partition(*args, **kwargs)[源代码][源代码]#

不支持。

prod(axis=None, dtype=None, out=None, keepdims=None)[源代码][源代码]#

沿指定轴返回最小值。

备注

目前,它仅支持 axis 的非 None 值以及 outkeepdims 的默认值。

参见

cupy.ndarray.prod(), numpy.ndarray.prod()

ptp(*args, **kwargs)[源代码][源代码]#

不支持。

put(*args, **kwargs)[源代码][源代码]#

不支持。

ravel(*args, **kwargs)[源代码][源代码]#

不支持。

reduced_view(*args, **kwargs)[源代码][源代码]#

不支持。

repeat(*args, **kwargs)[源代码][源代码]#

不支持。

reshape(*args, **kwargs)[源代码][源代码]#

不支持。

reshard(index_map)[源代码][源代码]#

返回一个视图或副本,具有给定的 index_map。

设备之间的数据传输是在内部创建的单独流上完成的。为了使它们异步,传输的数据会被缓冲,并在必要时反映到数据块中。

参数:

index_map (dict from int to array indices) – 具有指定ID的设备所拥有的块的索引。可以从 DistributedArray.index_map 获取分布式数组的当前 index_map。

返回类型:

DistributedArray

round(*args, **kwargs)[源代码][源代码]#

不支持。

scatter_add(*args, **kwargs)[源代码][源代码]#

不支持。

scatter_max(*args, **kwargs)[源代码][源代码]#

不支持。

scatter_min(*args, **kwargs)[源代码][源代码]#

不支持。

searchsorted(*args, **kwargs)[源代码][源代码]#

不支持。

set(*args, **kwargs)[源代码][源代码]#

不支持。

sort(*args, **kwargs)[源代码][源代码]#

不支持。

squeeze(*args, **kwargs)[源代码][源代码]#

不支持。

std(*args, **kwargs)[源代码][源代码]#

不支持。

sum(axis=None, dtype=None, out=None, keepdims=False)[源代码][源代码]#

沿指定轴返回最小值。

备注

目前,它仅支持 axis 的非 None 值以及 outkeepdims 的默认值。

参见

cupy.ndarray.sum(), numpy.ndarray.sum()

swapaxes(*args, **kwargs)[源代码][源代码]#

不支持。

take(*args, **kwargs)[源代码][源代码]#

不支持。

toDlpack(*args, **kwargs)[源代码][源代码]#

不支持。

tobytes(*args, **kwargs)[源代码][源代码]#

不支持。

tofile(*args, **kwargs)[源代码][源代码]#

不支持。

tolist(*args, **kwargs)[源代码][源代码]#

不支持。

trace(*args, **kwargs)[源代码][源代码]#

不支持。

transpose(*args, **kwargs)[源代码][源代码]#

不支持。

var(*args, **kwargs)[源代码][源代码]#

不支持。

view(*args, **kwargs)[源代码][源代码]#

不支持。

__eq__(value, /)#

返回 self==value。

__ne__(value, /)#

返回 self!=value。

__lt__(value, /)#

返回 self<value。

__le__(value, /)#

返回 self<=value。

__gt__(value, /)#

返回 self>value。

__ge__(value, /)#

返回 self>=value。

__bool__()#

如果 self 为真则返回 True,否则返回 False

属性

T#

不支持。

base#

不支持。

cstruct#

不支持。

data#

不支持。

device#

不支持。

devices#

一组持有部分数据的设备ID。

dtype#
flags#

不支持。

flat#

不支持。

imag#

不支持。

index_map#

具有指定ID的设备所拥有的块的索引。

itemsize#

每个元素的大小(以字节为单位)。

参见

numpy.ndarray.itemsize

mode#

描述如何解释块的重叠部分。

在副本模式下,块在其重叠段上的值保证是相同的。在其他模式下,它们不一定相同,并且表示原始数据的最大值、总和等。

DistributedArray 目前支持 cupyx.distributed.array.REPLICAcupyx.distributed.array.MINcupyx.distributed.array.MAXcupyx.distributed.array.SUMcupyx.distributed.array.PROD 模式。

许多对分布式数组的操作,包括 cupy.ufuncmatmul(),都需要事先更改它们的状态。这些状态转换是自动完成的,因此在大多数情况下,用户不需要手动管理状态。

示例

>>> A = distributed_array(
...     cupy.arange(6).reshape(2, 3),
...     make_2d_index_map([0, 2], [0, 1, 3],
...                       [[{0}, {1, 2}]]))
>>> B = distributed_array(
...     cupy.arange(12).reshape(3, 4),
...     make_2d_index_map([0, 1, 3], [0, 2, 4],
...                       [[{0}, {0}],
...                        [{1}, {2}]]))
>>> C = A @ B
>>> C
array([[20, 23, 26, 29],
       [56, 68, 80, 92]])
>>> C.mode
'sum'
>>> C.all_chunks()
{0: [array([[0, 0],
            [0, 3]]),     # left half
     array([[0, 0],
            [6, 9]])],    # right half
 1: [array([[20, 23],
            [56, 65]])],  # left half
 2: [array([[26, 29],
            [74, 83]])]}  # right half
>>> C_replica = C.change_mode('replica')
>>> C_replica.mode
'replica'
>>> C_replica.all_chunks()
{0: [array([[20, 23],
            [56, 68]]),   # left half
     array([[26, 29],
            [80, 92]])],  # right half
 1: [array([[20, 23],
            [56, 68]])],  # left half
 2: [array([[26, 29],
            [80, 92]])]}  # right half
nbytes#

所有元素的总大小(以字节为单位)。

它不计算元素之间的跳过次数。

参见

numpy.ndarray.nbytes

ndim#

维度数量。

a.ndim 等同于 len(a.shape)

参见

numpy.ndarray.ndim

real#

不支持。

shape#

数组维度的元组。

目前不支持对此属性的赋值。

size#
strides#

不支持。