mindspore.communication.comm_func.batch_isend_irecv

查看源文件
mindspore.communication.comm_func.batch_isend_irecv(p2p_op_list)[源代码]

异步地发送和接收张量。

说明

  • 不同设备中, p2p_op_list 中的 P2POp"isend"irecv" 应该互相匹配。

  • p2p_op_list 中的 P2POp 应该使用同一个通信组。

  • 暂不支持 p2p_op_list 中的 P2POp 含有 tag 入参。

  • p2p_op_list 中的 P2POptensor 的值不会被最后的结果原地修改。

  • 仅支持PyNative模式,目前不支持Graph模式。

参数:
返回:

Tuple(Tensor)。根据 p2p_op_list 中的 P2POp 的发送/接收顺序,得到的接收张量元组。 当 P2POp 为发送时, 相应位置的结果是没有意义的张量。 当 P2POp 为接收时, 相应位置的结果是从其他设备接收到的张量。

异常:
  • TypeError - p2p_op_list 中不全是 P2POp 类型。

支持平台:

Ascend

样例:

说明

运行以下样例之前,需要配置好通信环境变量。

针对Ascend/GPU/CPU设备,推荐使用msrun启动方式,无第三方以及配置文件依赖。详见 msrun启动

该样例需要在2卡环境下运行。

>>> import numpy as np
>>> import mindspore
>>> from mindspore.communication import init, get_rank, get_group_size
>>> from mindspore.communication.comm_func import batch_isend_irecv, P2POp
>>> from mindspore import Tensor
>>>
>>> init()
>>> this_rank = get_rank()
>>> world_size = get_group_size()
>>> next_rank = (this_rank + 1) % world_size
>>> prev_rank = (this_rank + world_size - 1) % world_size
>>>
>>> send_tensor = Tensor(this_rank + 1, dtype=mindspore.float32)
>>> recv_tensor = Tensor(0., dtype=mindspore.float32)
>>>
>>> send_op = P2POp('isend', send_tensor, next_rank)
>>> recv_op = P2POp('irecv', recv_tensor, prev_rank)
>>>
>>> p2p_op_list = [send_op, recv_op]
>>> output = batch_isend_irecv(p2p_op_list)
>>> print(output)
rank 0:
(Tensor(shape=[], dtype=Float32, value= 0), Tensor(shape=[], dtype=Float32, value= 2))
rank 1:
(Tensor(shape=[], dtype=Float32, value= 0), Tensor(shape=[], dtype=Float32, value= 1))