cupyx.distributed.array.DistributedArray#
- class cupyx.distributed.array.DistributedArray(self, shape, dtype, chunks_map, mode=REPLICA, comms=None)[source]#
跨多个 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.mode
。方法
- change_mode(mode)[source]#
以给定模式返回视图或副本。
- 参数:
mode (mode Object) – 如何解释块重叠的模式。
- 返回类型:
另请参阅
有关模式的详细信息,请参阅
DistributedArray.mode
。
- max(axis=None, out=None, keepdims=False)[source]#
沿给定轴返回最大值。
注意
目前,它仅支持
axis
的非None
值以及out
和keepdims
的默认值。
- min(axis=None, out=None, keepdims=False)[source]#
沿给定轴返回最小值。
注意
目前,它仅支持
axis
的非None
值以及out
和keepdims
的默认值。
- prod(axis=None, dtype=None, out=None, keepdims=None)[source]#
沿给定轴返回最小值。
注意
目前,它仅支持
axis
的非None
值以及out
和keepdims
的默认值。
- reshard(index_map)[source]#
返回具有给定 index_map 的视图或副本。
跨设备的数据传输在内部创建的单独流上完成。为了使其异步,传输的数据会被缓冲并在必要时反映到块中。
- 参数:
index_map (dict from int to array indices) – 具有指定 ID 的设备拥有的块的索引。分布式数组当前的 index_map 可以从
DistributedArray.index_map
获取。- 返回类型:
- sum(axis=None, dtype=None, out=None, keepdims=False)[source]#
沿给定轴返回最小值。
注意
目前,它仅支持
axis
的非None
值以及out
和keepdims
的默认值。
- __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 则返回 True,否则返回 False
属性
- T#
不支持。
- base#
不支持。
- cstruct#
不支持。
- data#
不支持。
- device#
不支持。
- devices#
持有部分数据的设备 ID 的集合。
- dtype#
- flags#
不支持。
- flat#
不支持。
- imag#
不支持。
- index_map#
具有指定 ID 的设备拥有的块的索引。
- itemsize#
每个元素占用的字节大小。
- mode#
描述如何解释块之间的重叠。
在 replica 模式下,块在其重叠段上保证具有相同的值。在其他模式下,它们不一定相同,并将其最大值、总和等作为原始数据表示。
DistributedArray
当前支持cupyx.distributed.array.REPLICA
,cupyx.distributed.array.MIN
,cupyx.distributed.array.MAX
,cupyx.distributed.array.SUM
,cupyx.distributed.array.PROD
模式。许多对分布式数组的操作,包括
cupy.ufunc
和matmul()
,都涉及事先改变其模式。这些模式转换是自动完成的,因此在大多数情况下,用户无需手动管理模式。示例
>>> 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#
所有元素占用的总字节大小。
不计算元素之间的间隔。
另请参阅
- ndim#
维度数量。
a.ndim
等效于len(a.shape)
。另请参阅
- real#
不支持。
- shape#
数组维度的元组。
当前不支持对此属性进行赋值。
- size#
- strides#
不支持。