alltoallvc
功能说明
集合通信域alltoallvc操作接口。向通信域内所有rank发送数据(数据量可以定制),并从所有rank接收数据。
alltoallvc通过输入参数send_count_matrix传入所有rank的收发参数,与alltoallv相比,性能更优。
两个NPU之间共享数据的缓存区大小默认为200M,可通过环境变量HCCL_BUFFIZE进行调整,单位为M,取值需要大于等于1,默认值是200M。集合通信网络中,每一个集合通信域都会占用HCCL_BUFFSIZE大小的缓冲区,用户可以根据通信数据量与业务模型数据量的大小,适当调整HCCL_BUFFSIZE的大小,提升网络执行性能,例如:
export HCCL_BUFFSIZE=2048
函数原型
def all_to_all_v_c(send_data, send_count_matrix, rank, fusion=0, fusion_id=-1, group="hccl_world_group")
参数说明
返回值
recv_data:对输入tensor执行完all_to_all_v_c操作之后的结果tensor。
约束说明
- 调用该接口的rank必须在当前接口入参group定义的范围内,输入的rank id有效且不重复,否则调用该接口会失败。
- 针对Atlas 训练系列产品,alltoallvc的通信域需要满足如下约束:
单server 1p、2p通信域要在同一个cluster内(server内0-3卡和4-7卡各为一个cluster),单server4p、8p和多server通信域中rank要以cluster为基本单位,并且server间cluster选取要一致。
- 各节点输入的send_count_matrix要保持一致。
- alltoallvc操作的性能与NPU之间共享数据的缓存区大小有关,当通信数据量超过缓存区大小时性能将出现明显下降。若业务中alltoallvc通信数据量较大,建议通过配置环境变量HCCL_BUFFSIZE适当增大缓存区大小以提升通信性能。
支持的型号
Atlas 训练系列产品
Atlas A2 训练系列产品
调用示例
1 2 |
from npu_bridge.npu_init import * result = hccl_ops.all_to_all_v_c(send_data_tensor, send_count_matrix_tensor, rank_tensor) |