mindspore.mint.distributed.batch_isend_irecv

查看源文件
mindspore.mint.distributed.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模式。

参数:
返回:

list[CommHandle],当前list元素为1,CommHandle是一个异步工作句柄。

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

  • TypeError - 通信组名在 p2p_op_list 不一致。

  • TypeError - tensorp2p_op_list 中不为Tensor。

  • TypeError - opp2p_op_list 中不是'isend'或'irecv'。

支持平台:

Ascend

样例:

说明

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

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

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

>>> import numpy as np
>>> import mindspore
>>> from mindspore.mint.distributed import init_process_group, get_rank, get_world_size
>>> from mindspore.mint.distributed 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