mindspore.ops.communication.batch_isend_irecv

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

批量异步发送和接收张量。

说明

  • p2p_op_listP2POp"isend""irecv" 在rank之间需要相互匹配。

  • p2p_op_list 中的 P2POp 只能使用相同的通信组。

  • p2p_op_listP2POptag 暂不支持。

  • p2p_op_listP2POptensor 不会被结果原地修改。

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

参数:
返回:

list[CommHandle]。CommHandle是一个异步工作句柄。目前仅支持一个包装句柄。

异常:
  • TypeError - 如果 p2p_op_list 为空或 p2p_op_list 不全是 P2POp 类型。

  • TypeError - p2p_op_list 中的组名不一致。

  • TypeError - p2p_op_list 中的 tensor 不是Tensor。

  • TypeError - p2p_op_list 中的 op 不是isend或irecv。

支持平台:

Ascend

样例:

说明

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

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

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

>>> import numpy as np
>>> import mindspore
>>> from mindspore.ops.communication import init_process_group, get_rank, get_world_size
>>> from mindspore.ops.communication import batch_isend_irecv, P2POp
>>> from mindspore import Tensor
>>>
>>> init_process_group()
>>> this_rank = get_rank()
>>> world_size = get_world_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(recv_tensor)
rank 0:
2.0
rank 1:
1.0