Line data Source code
1 : /**
2 : * Copyright (c) 2025 Huawei Technologies Co., Ltd.
3 : * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
4 : * CANN Open Software License Agreement Version 2.0 (the "License").
5 : * Please refer to the License for details. You may not use this file except in compliance with the License.
6 : * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
7 : * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8 : * See LICENSE in the root of the software repository for the full text of the License.
9 : */
10 :
11 : #ifndef EXTERNALINPUT_H
12 : #define EXTERNALINPUT_H
13 :
14 : #include <map>
15 : #include <nlohmann/json.hpp>
16 :
17 : #include "externalinput_pub.h"
18 :
19 : constexpr s32 MAX_LENGTH_OF_U32 = 10;
20 : constexpr u32 MAX_LEN_OF_DIGIT_ENV = 10; // 数字环境变量最大长度
21 :
22 : constexpr u32 HCCL_WHITELIST_OFF = 0;
23 :
24 : constexpr s32 HCCL_MIN_LINK_TIME_OUT_S = 120; // HCCL 建链最小超时时间设置为120s
25 : constexpr s32 HCCL_MAX_LINK_TIME_OUT_S = (120 * 60); // HCCL 最大建链超时时间设置为120*60s
26 :
27 : constexpr s32 HCCL_EXEC_TIME_OUT_S = NOTIFY_MAX_WAIT_TIME; // 910B和910_93场景非HCCL默认的Notify wait超时时间设置为最大超时时间
28 : constexpr s32 HCCL_EXEC_TIME_OUT_S_910_93 = NOTIFY_MAX_WAIT_TIME_910_93; // 910B和910_93 HCCL默认的Notify wait超时时间设置为最大超时时间
29 : constexpr s32 HCCL_INTEVAL_EXEC_TIME_OUT_S = 68; // notifywait的设置参数必须是68的整数倍
30 :
31 : constexpr u32 HCCL_MEM_SAMPLER_ITER_U = 0x00000000; // 内存采样迭代轮次默认不启用值为0x00000000
32 : constexpr s32 HCCL_DEAFULT_P2P_DISABLE = 0; // HCCL 默认P2P使能
33 :
34 : constexpr u32 HCCL_RDMA_TC_DEFAULT = 132; // 默认的traffic class为132(33*4)
35 : constexpr u32 HCCL_RDMA_TC_MIN = 0; // traffic class最小值为0
36 : constexpr u32 HCCL_RDMA_TC_MAX = 255; // traffic class最大值为255
37 : constexpr u32 HCCL_RDMA_TC_BASE = 4; // RDMATrafficClass需要是4的整数倍
38 :
39 : constexpr u32 HCCL_RDMA_SL_DEFAULT = 4; // 默认的server level为4
40 : constexpr u32 HCCL_RDMA_SL_MIN = 0; // server level最小值为0
41 : constexpr u32 HCCL_RDMA_SL_MAX = 7; // server level最大值为7
42 :
43 : constexpr u32 HCCL_RDMA_TIMEOUT_DEFAULT = 20; // 默认的TIMEOUT配置为20(对应时间4.096*2^20us)
44 : constexpr u32 HCCL_RDMA_TIMEOUT_MIN = 5; // TIMEOUT最小值为5
45 : constexpr u32 HCCL_RDMA_TIMEOUT_MAX = 24; // TIMEOUT最大值为24
46 : constexpr u32 HCCL_RDMA_TIMEOUT_MAX_910_93 = 20; // 910B和910_93 TIMEOUT最大值为20
47 :
48 : constexpr u32 HCCL_RDMA_RETRY_CNT_DEFAULT = 7; // 默认的Retry Cnt为7
49 : constexpr u32 HCCL_RDMA_RETRY_CNT_MIN = 1; // Retry Cnt最小值为1
50 : constexpr u32 HCCL_RDMA_RETRY_CNT_MAX = 7; // Retry Cnt最大值为7
51 : constexpr u32 HCCL_BASE_PORT_MIN = 1024; // Base port最小值为1024
52 :
53 : constexpr u32 HCCL_RETRY_MAXCNT_DEFAULT = 1; // 最大重执行次数,默认配置1
54 : constexpr u32 HCCL_RETRY_HOLD_TIME_DEFAULT = 5000; // 首次重执行等待时间,默认5s
55 : constexpr u32 HCCL_RETRY_INTERVAL_DEFAULT = 1000; // 重执行间隔,默认1s
56 :
57 : constexpr u32 HCCL_RETRY_MAXCNT_MIN = 1; //最大重执行次数,最小值1次
58 : constexpr u32 HCCL_RETRY_MAXCNT_MAX = 10; // 最大重执行次数,最大值10次
59 : constexpr u32 HCCL_RETRY_HLOD_TIME_MAX = 60000; // 首次重执行等待时间,最大值60s, 单位ms
60 : constexpr u32 HCCL_RETRY_INTERVAL_MAX = 60000; // 重执行间隔,最大值60s, 单位ms
61 :
62 : constexpr u32 MAX_LEN_OF_LOGIC_SUPER_ID = 128; // 逻辑超节点最大长度
63 : // 外部输入参数
64 : struct ExternalInput {
65 : // 初始化判断
66 : bool initialized;
67 : HcclExecTimeoutSet execTimeOutSet;
68 :
69 : // 环境变量参数
70 : s32 linkTimeOut;
71 : double execTimeOut;
72 : u32 hcclIfBasePort;
73 : u32 rdmaTrafficClass;
74 : u32 rdmaServerLevel;
75 : u32 rdmaTimeOut; // RDMA超时时间,配置范围5-24,默认值为20
76 : u32 rdmaRetryCnt; // RDMA重传次数,配置范围1-7,默认值为7
77 : u32 taskExceptionSwitch; // task_exception_handler ctx子任务维度开关,默认0(关闭)
78 : u32 qpsPerConnection; // 用于多QP散列场景下,指定两个rank之间的连接个数
79 : u32 multiQpThreshold; // 多QP散列下,每个QP分担的数据量阈值,小于这个阈值则不切分多QP
80 : u32 retryMaxCnt; // 重执行最大尝试次数,配置范围[0,60000],默认值为3
81 : u32 retryIntervalTime; // 重执行间隔时间,配置范围[0,3600000],默认值1000
82 : u32 retryHoldTime; // 首次重执行等待时间,配置范围[0,3600000],默认值1000
83 :
84 : // cann版本信息
85 : std::string cannVersion;
86 :
87 : // 配置文件参数
88 : u32 intraRoceSwitch; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
89 :
90 : std::string hcclWhiteListFile;
91 : bool profilingMode;
92 : std::string profilingOption;
93 : u64 profConfig; // Msprof profiling配置
94 : u32 enableWhitelist;
95 : hccl::HcclIpAddress hcclControlIfIp;
96 : s32 hcclSocketFamily;
97 : HcclSocketIfName hcclSocketIfName;
98 : bool isTcpMode;
99 :
100 : u32 esMaxPsTable; // ES场景获取每条流上的最大表数
101 : u32 streamNum;
102 : bool dumpDebug;
103 : ProtocolType protocolType = ProtocolType::RESERVED;
104 : MasterInfo masterInfo;
105 : bool opCounterEnable;
106 : u64 cclBufferSize;
107 : bool enableFfts;
108 : u8 hcclDeterministic;
109 : bool isDeterministic;
110 : bool enablePipline;
111 : bool enableEntryLog;
112 : bool interHccsDisable;
113 : bool aicpuUnfold;
114 : uint8_t aicpuCacheEnable;
115 : bool aivMode;
116 : bool remoteIsHdc = false;
117 : bool hcclRetryConfig[HCCL_RETRY_ENABLE_LEVEL_NUM];
118 : std::string logicSuperPodId;
119 : bool rdmaFastPost;
120 : std::string multiQpSrcPortConfigPath;
121 : s32 increSaveExecTimeOut;
122 : u64 debugConfig;
123 42 : ExternalInput()
124 42 : {
125 42 : SetDefaultParams();
126 42 : }
127 917 : void SetDefaultParams()
128 : {
129 917 : initialized = false;
130 917 : execTimeOutSet = HcclExecTimeoutSet::HCCL_EXEC_TIMEOUT_NOT_SET;
131 917 : linkTimeOut = HCCL_LINK_TIME_OUT_S; // 120秒超时
132 917 : execTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
133 917 : rdmaTrafficClass = HCCL_RDMA_TC_DEFAULT;
134 917 : rdmaServerLevel = HCCL_RDMA_SL_DEFAULT;
135 917 : rdmaTimeOut = HCCL_RDMA_TIMEOUT_DEFAULT;
136 917 : rdmaRetryCnt = HCCL_RDMA_RETRY_CNT_DEFAULT;
137 917 : taskExceptionSwitch = 0;
138 917 : qpsPerConnection = HCCL_QPS_PER_CONNECTION_DEFAULT;
139 917 : multiQpThreshold = HCCL_MULTI_QP_THRESHOLD_DEFAULT;
140 917 : retryMaxCnt = HCCL_RETRY_MAXCNT_DEFAULT;
141 917 : retryHoldTime = HCCL_RETRY_HOLD_TIME_DEFAULT;
142 917 : retryIntervalTime = HCCL_RETRY_INTERVAL_DEFAULT;
143 917 : cannVersion = "";
144 917 : hcclIfBasePort = HCCL_INVALID_PORT; // 无效端口
145 917 : intraRoceSwitch = 0; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
146 :
147 917 : hcclWhiteListFile = "";
148 917 : profilingMode = false;
149 917 : profilingOption = "";
150 917 : profConfig = 0;
151 917 : enableWhitelist = HCCL_WHITELIST_OFF;
152 917 : hcclControlIfIp.clear();
153 917 : hcclSocketFamily = -1;
154 917 : hcclSocketIfName.configIfNames = {};
155 917 : hcclSocketIfName.searchExact = false; // false: 默认为前缀匹配
156 917 : hcclSocketIfName.searchNot = false; // false: 默认为匹配
157 :
158 917 : isTcpMode = false;
159 :
160 917 : esMaxPsTable = 0;
161 917 : streamNum = 1;
162 917 : dumpDebug = false;
163 917 : protocolType = ProtocolType::RESERVED;
164 :
165 917 : masterInfo.serverIp.clear();
166 917 : masterInfo.port = HCCL_INVALID_PORT;
167 917 : masterInfo.serverDeviceId = INVALID_VALUE_RANKID;
168 917 : masterInfo.rankSize = INVALID_VALUE_RANKSIZE;
169 917 : masterInfo.agentIp.clear();
170 :
171 917 : cclBufferSize = HCCL_CCL_COMM_DEFAULT_BUFFER_SIZE * HCCL_CCL_COMM_FIXED_CALC_BUFFER_SIZE;
172 917 : enableFfts = true;
173 917 : hcclDeterministic = DETERMINISTIC_DISABLE;// 确定性配置 0:不支持;1:支持确定性不支持规约保序;2:支持确定性&规约保序
174 917 : isDeterministic = false; // 兼容性考虑,提供确定性bool
175 917 : enablePipline = false;
176 917 : enableEntryLog = false;
177 917 : interHccsDisable = false;
178 917 : aicpuCacheEnable = 1; // 默认开启aicpu cache (只有当aicpuUnfold为true时才生效)
179 917 : opCounterEnable = true;
180 917 : logicSuperPodId = "";
181 917 : rdmaFastPost = false;
182 917 : multiQpSrcPortConfigPath = "";
183 917 : increSaveExecTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
184 917 : debugConfig = 0;
185 917 : }
186 : };
187 :
188 : HcclResult InitEnvVarParam();
189 :
190 : HcclResult ParseLinkConnTimeOut();
191 :
192 : HcclResult ParseExecTimeOut();
193 :
194 : HcclResult ParseIntraLinkType();
195 :
196 : HcclResult GetIntraLinkTypeDigit();
197 :
198 : HcclResult ParseHcclWhitelistFilePath();
199 :
200 : HcclResult ParseHcclWhitelistSwitch();
201 :
202 : HcclResult ParseHcclIfIp();
203 :
204 : HcclResult ParseHcclSocketIfName();
205 :
206 : HcclResult ParseHcclSocketFamily();
207 :
208 : HcclResult SplitHcclSocketIfName(const std::string &socketIfName, std::vector<std::string> &configIfNames);
209 :
210 : HcclResult ParseHcclIfBasePort();
211 :
212 : bool CheckEnvLen(const char *envStr, u32 envMaxLen);
213 :
214 : HcclResult ParseRDMATrafficClass();
215 :
216 : HcclResult ParseRDMAServerLevel();
217 :
218 : HcclResult ParseRDMATimeOut(std::pair<u32, u32> &rdmaTimeOutRange);
219 :
220 : HcclResult ParseRDMARetryCnt();
221 :
222 : HcclResult ParseRdmaQpsPerConnection();
223 :
224 : HcclResult ParseMultiQpThreshold();
225 :
226 : HcclResult ParseCannVersion();
227 :
228 : HcclResult ParseCclBufferSize();
229 :
230 : HcclResult ParseDeterministic();
231 :
232 : HcclResult ParseHcclPiplineModeEnable();
233 :
234 : HcclResult ParseTaskExceptionSwitch();
235 :
236 : HcclResult ParseEntryLogEnable();
237 :
238 : HcclResult ParseOpExpansion();
239 :
240 : HcclResult ResetInitState();
241 :
242 : HcclResult ParseInterLinkType();
243 :
244 : HcclResult ParseRetryEnable();
245 :
246 : HcclResult ParseProfilingConfig();
247 :
248 : HcclResult ParseRetryParams();
249 :
250 : HcclResult ParseLogicSuperPodId();
251 :
252 : HcclResult ParseDebugConfig();
253 :
254 : HcclResult SplitHcclRetryEnable(const std::string &retryConfig, std::vector<std::string> &retryEnables);
255 :
256 : HcclResult CollectRetryEnableFromConfig(const std::vector<std::string> &retryEnables);
257 :
258 : u32 GetEsMaxPsTable();
259 :
260 : HcclResult SetEsStreamNum(const u32 streamNum);
261 :
262 : u32 GetEsStreamNum();
263 :
264 : const u32& GetExternalInputRdmaTrafficClass();
265 :
266 : const u32& GetExternalInputRdmaServerLevel();
267 :
268 : const u32& GetExternalInputRdmaTimeOut();
269 :
270 : const u32& GetExternalInputRdmaRetryCnt();
271 :
272 : const hccl::HcclIpAddress& GetExternalInputHcclControlIfIp();
273 :
274 : const HcclSocketIfName& GetExternalInputHcclSocketIfName();
275 :
276 : HcclResult ParseRdmaFastPost();
277 :
278 : HcclResult ParseMultiQpSrcPortConfigPath();
279 : HcclResult SetIncreSaveExecTimeOut(const s32 execTimeout);
280 : const s32& GetIncreSaveExecTimeOut();
281 :
282 : const u64& GetProfConfig();
283 :
284 : const u64& GetExternalInputDebugConfig();
285 : void SetExternalInputProtocolType(ProtocolType prot);
286 : #endif // EXTERNALINPUT_H
|