alltoallv
函数原型
def all_to_all_v(send_data, send_counts, send_displacements, recv_counts, recv_displacements, group="hccl_world_group")
功能说明
集合通信域alltoallv操作接口。向通信域内所有rank发送数据(数据量可以定制),并从所有rank接收数据。
使用此接口时,默认昇腾AI处理器间数据的通信方式是多次拷贝、多次收发。您也可以通过环境变量HCCL_ALLTOALL_Z_COPY更改数据拷贝方式,若需更改,请仔细阅读注意事项。
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
send_data |
输入 |
待发送的数据。 tensorflow的tensor类型。 针对Atlas 训练系列产品,tensor支持的数据类型为 int8, uint8, uint16, int32, uint32, int64, uint64, float16, float32, float64 。 |
send_counts |
输入 |
发送的数据量,send_counts[i]表示本rank发给rank i的数据个数,基本单位是send_data数据类型对应的字节数。 例:send_data的数据类型为int32,send_counts[0]=1,send_count[1]=2,表示本rank给rank0发送1个int32类型的数据,给rank1发送2个int32类型的数据。 tensorflow的tensor类型,tensor支持的数据类型为int64。 |
send_displacements |
输入 |
发送数据的偏移量,send_displacements[i] 表示本rank发送给rank i的数据块相对于send_data的偏移量,基本单位是send_data数据类型对应字节数。 例:
则表示本rank给rank0发送send_data上的第1个int32类型的数据,给rank1发送send_data上第2个与第3个int32类型的数据。 tensorflow的tensor类型,tensor支持的数据类型为int64。 |
recv_counts |
输入 |
接收的数据量,recv_counts[i]表示本rank从rank i收到的数据量。使用方法与send_counts类似。 tensorflow的tensor类型。tensor支持的数据类型为int64。 |
recv_displacements |
输入 |
接收数据的偏移量,recv_displacements[i] 表示本rank发送给rank i数据块相对于recv_data的偏移量,基本单位是recv_data_type的字节数。使用方法与send_displacements类似。 tensorflow的tensor类型。tensor支持的数据类型为int64。 |
group |
输入 |
group名称,可以为用户自定义group或者"hccl_world_group"。 String类型,最大长度为128字节,含结束符。 |
返回值
recv_data:对输入tensor执行完all_to_all_v操作之后的结果tensor。
调用示例
from npu_bridge.npu_init import * result = hccl_ops.all_to_all_v(send_data_tensor, send_counts_tensor, send_displacements_tensor, recv_counts_tensor, recv_displacements_tensor)
约束说明
- 调用该接口的rank必须在当前接口入参group定义的范围内,不在此范围内的rank调用该接口会失败。
- alltoallv的通信域需要满足:单server 1p、2p通信域要在同一个cluster内(server内0-3卡和4-7卡各为一个cluster),单server 4p、8p和多server通信域中rank要以cluster为基本单位,并且server间cluster选取要一致。