下载
中文
注册

HcclCreateSubCommConfig

功能说明

基于既有的全局通信域,切分具有特定配置的子通信域。

该子通信域创建方式无需进行socket建链与rank信息交换,可应用于业务故障下的快速通信域创建。

函数原型

HcclResult HcclCreateSubCommConfig(HcclComm *comm, uint32_t rankNum, uint32_t *rankIds, uint64_t subCommId, uint32_t subCommRankId, HcclCommConfig *config, HcclComm *comm)

参数说明

参数名

输入/输出

描述

comm

输入

被切分的全局通信域。

HcclComm类型的定义可参见HcclComm

rankNum

输入

需要切分的子通信域中的rank数量。

rankIds

输入

子通信域中rank在全局通信域中的rank id组成的数组。

需要注意:该数组应当是有序的,数组中每个rank的下标将映射为其在子通信域的rank id。

subCommId

输入

当前子通信域标识。

用户自定义,在全局通信域中唯一即可。

subCommRankId

输入

本rank在子通信域中的rank id。

请配置为当前rank在rankIds数组中的下标索引。

config

输入

通信域配置项,目前的可配置项为buffer大小、确定性计算开关、通信域名称。

需要注意:

  • 传入的config必须先调用HcclCommConfigInit对其进行初始化。
  • config中的配置参数需确保在合法值域内,详见7.10 HcclCommConfig的定义。
  • 若通过config指定通信域名称,需确保与其他通信域中的名称不重复。
  • config中的配置项hcclBufferSize优先级高于环境变量HCCL_BUFFSIZE,配置项hcclDeterministic优先级高于环境变量HCCL_DETERMINISTIC。关于环境变量的详细说明,可参见环境变量参考

comm

输出

将初始化后的子通信域以指针的信息回传给调用者。

HcclComm类型的定义可参见HcclComm

返回值

HcclResult:接口成功返回HCCL_SUCCESS,其他失败。

约束说明

  • 属于同一子通信域的rank调用该接口时传入的rankNum、rankIds、subCommId、config均应相同。
  • 不需要创建子通信域的rank应当传入rankIds==nullptr和subCommId=0xFFFFFFFF。
  • 对于同一个全局通信域,不可使用重复的subCommId创建子通信域。
  • 只支持从全局通信域切分子通信域,不支持通信域嵌套切分。

支持的型号

Atlas 训练系列产品

Atlas A2 训练系列产品

调用示例

一个简单的代码示例片段如下:
1
2
3
4
5
6
7
8
9
HcclComm globalHcclComm;
HcclCommInitClusterInfo(rankTableFile, devId, &globalHcclComm);
HcclCommConfig config;
HcclCommConfigInit(&config);
config.hcclBufferSize = 50;
strcpy(config.hcclCommName, "comm_1");
HcclComm hcclComm;
uint32_t rankIds[4] = {0, 1, 2, 3};
HCCLCHECK(HcclCreateSubCommConfig(&globalHcclComm, 4, rankIds, 1, devId, &config, &hcclComm));

完整的代码示例可参见样例代码