昇腾社区首页
中文
注册

BroadcastOperation

产品支持情况

硬件型号

是否支持

Atlas A3 推理系列产品 / Atlas A3 训练系列产品

Atlas A2 训练系列产品

Atlas 800I A2 推理产品

x

Atlas 训练系列产品

Atlas 推理系列产品

x

Atlas 200I/500 A2 推理产品

x

功能说明

将通信主卡上的数据广播到其他每张卡上。该算子为原地操作,输出tensor与输入tensor内存地址相同。

该算子涉及多卡相关操作,可根据实际需求配置HCCL相关环境变量,具体请参见《CANN 环境变量参考》中的“集合通信”章节。

使用场景

1对多,广播方式。主节点0将数据发送到其他节点,且数据内容相同。

图1 通信原理示意图

使用示例

参数设置

rankRoot=0
rankSize=2

输入输出

npu0 (通信主卡):
x=[67,60,-75]
output=[67,60,-75]
npu1:
x=[0,0,0]
output=[67,60,-75]

定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
struct BroadcastParam {
    int rank = 0;
    int rankSize = 0;
    int rankRoot = 0;
    HcclComm hcclComm = nullptr; 
    CommMode commMode = COMM_MULTI_PROCESS;
    std::string backend = "hccl";
    std::string rankTableFile;
    std::string commDomain;
    uint8_t rsv[64] = {0};
};

参数列表

成员名称

类型

默认值

描述

rank

int

0

当前卡所属通信编号。

rankSize

int

0

通信的卡的数量。

rankRoot

int

0

主通信编号。

hcclComm

HcclComm

nullptr

HCCL通信域指针。

默认为空,加速库为用户创建;若用户想要自己管理通信域,则需要传入该通信域指针,加速库使用传入的通信域指针来执行通信算子。

commMode

CommMode

COMM_MULTI_PROCESS

通信模式,CommMode类型枚举值。hccl多线程只支持外部传入通信域方式。

backend

string

“hccl”

通信后端指示,支持“hccl”和“lccl”。

当backend为hccl时,不支持 Atlas 800I A2 推理产品

当backend为lccl时:

  • Atlas 200T A2 Box16 异构子框场景下,通信域仅支持前8卡或后8卡内部建立,不支持同时包含前8卡和后8卡的通信域。
  • 只支持rankSize小于等于8。

rankTableFile

string

-

集群信息的配置文件路径,用于单机以及多机通信场景,当前仅支持HCCL后端场景。

若单机配置了ranktable,则以ranktable来初始化通信域。

ranktable配置请参考《TensorFlow 1.15模型迁移指南》的“模型训练>执行分布式训练>准备ranktable资源配置文件”章节。

commDomain

string

-

通信device组用通信域名标识,多通信域时使用。当backend为lccl时,commMode为多进程时,commDomain需要设置0-65535,支持设置通信域的内存大小,用于性能优化,配置方式通信域:通信域大小(MB),如“0:400”,当同一个通信域中多个算子配置冲突时,以第一个执行到的该通信域算子配置为准。

限制:默认值为200,当前配置大小不支持小于200。

rsv[64]

uint8_t

{0}

预留参数。

输入

参数

维度

数据类型

格式

描述

x

[dim_0, dim_1, ..., dim_n]

  • "hccl": float16/float/int8/int16/int32/int64/bf16
  • "lccl": float16/float/int8/int16/int32/int64/bf16

ND

输入tensor。

约束说明

rank、rankSize、rankRoot需满足以下条件。

  • 0 ≤ rank < rankSize
  • 0 ≤ rankRoot < rankSize
  • 多用户使用时需要使用ATB_SHARE_MEMORY_NAME_SUFFIX环境变量(请参见Transformer加速库环境变量说明)进行共享内存的区分,以进行初始化信息同步。
  • 当使用加速库的通信算子异常退出时,需要清空残留数据,避免影响之后的使用,命令参考如下:
    rm -rf /dev/shm/sem.lccl*
    rm -rf /dev/shm/sem.hccl*
    ipcrm -a
  • 当前不支持单device上跑多个HCCP进程实例,不能单卡同时跑多个通信算子。比如运行通信算子场景下,不支持同一张卡上跑多个模型。