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
28 : = NOTIFY_MAX_WAIT_TIME; // 910B和910_93场景非HCCL默认的Notify wait超时时间设置为最大超时时间
29 : constexpr s32 HCCL_EXEC_TIME_OUT_S_910_93
30 : = NOTIFY_MAX_WAIT_TIME_910_93; // 910B和910_93 HCCL默认的Notify wait超时时间设置为最大超时时间
31 : constexpr s32 HCCL_INTEVAL_EXEC_TIME_OUT_S = 68; // notifywait的设置参数必须是68的整数倍
32 :
33 : constexpr u32 HCCL_MEM_SAMPLER_ITER_U = 0x00000000; // 内存采样迭代轮次默认不启用值为0x00000000
34 : constexpr s32 HCCL_DEAFULT_P2P_DISABLE = 0; // HCCL 默认P2P使能
35 :
36 : constexpr u32 HCCL_RDMA_TC_DEFAULT = 132; // 默认的traffic class为132(33*4)
37 : constexpr u32 HCCL_RDMA_TC_MIN = 0; // traffic class最小值为0
38 : constexpr u32 HCCL_RDMA_TC_MAX = 255; // traffic class最大值为255
39 : constexpr u32 HCCL_RDMA_TC_BASE = 4; // RDMATrafficClass需要是4的整数倍
40 :
41 : constexpr u32 HCCL_RDMA_SL_DEFAULT = 4; // 默认的server level为4
42 : constexpr u32 HCCL_RDMA_SL_MIN = 0; // server level最小值为0
43 : constexpr u32 HCCL_RDMA_SL_MAX = 7; // server level最大值为7
44 :
45 : constexpr u32 HCCL_RDMA_TIMEOUT_DEFAULT = 20; // 默认的TIMEOUT配置为20(对应时间4.096*2^20us)
46 : constexpr u32 HCCL_RDMA_TIMEOUT_MIN = 5; // TIMEOUT最小值为5
47 : constexpr u32 HCCL_RDMA_TIMEOUT_MAX = 24; // TIMEOUT最大值为24
48 : constexpr u32 HCCL_RDMA_TIMEOUT_MAX_910_93 = 20; // 910B和910_93 TIMEOUT最大值为20
49 :
50 : constexpr u32 HCCL_RDMA_RETRY_CNT_DEFAULT = 7; // 默认的Retry Cnt为7
51 : constexpr u32 HCCL_RDMA_RETRY_CNT_MIN = 1; // Retry Cnt最小值为1
52 : constexpr u32 HCCL_RDMA_RETRY_CNT_MAX = 7; // Retry Cnt最大值为7
53 : constexpr u32 HCCL_BASE_PORT_MIN = 1024; // Base port最小值为1024
54 :
55 : constexpr u32 HCCL_RETRY_MAXCNT_DEFAULT = 1; // 最大重执行次数,默认配置1
56 : constexpr u32 HCCL_RETRY_HOLD_TIME_DEFAULT = 5000; // 首次重执行等待时间,默认5s
57 : constexpr u32 HCCL_RETRY_INTERVAL_DEFAULT = 1000; // 重执行间隔,默认1s
58 :
59 : constexpr u32 HCCL_RETRY_MAXCNT_MIN = 1; // 最大重执行次数,最小值1次
60 : constexpr u32 HCCL_RETRY_MAXCNT_MAX = 10; // 最大重执行次数,最大值10次
61 : constexpr u32 HCCL_RETRY_HLOD_TIME_MAX = 60000; // 首次重执行等待时间,最大值60s, 单位ms
62 : constexpr u32 HCCL_RETRY_INTERVAL_MAX = 60000; // 重执行间隔,最大值60s, 单位ms
63 :
64 : constexpr u32 MAX_LEN_OF_LOGIC_SUPER_ID = 128; // 逻辑超节点最大长度
65 : // 外部输入参数
66 : struct ExternalInput {
67 : // 初始化判断
68 : bool initialized;
69 : HcclExecTimeoutSet execTimeOutSet;
70 :
71 : // 环境变量参数
72 : s32 linkTimeOut;
73 : double execTimeOut;
74 : u32 hcclIfBasePort;
75 : u32 rdmaTrafficClass;
76 : u32 rdmaServerLevel;
77 : u32 rdmaTimeOut; // RDMA超时时间,配置范围5-24,默认值为20
78 : u32 rdmaRetryCnt; // RDMA重传次数,配置范围1-7,默认值为7
79 : u32 taskExceptionSwitch; // task_exception_handler ctx子任务维度开关,默认0(关闭)
80 : u32 qpsPerConnection; // 用于多QP散列场景下,指定两个rank之间的连接个数
81 : u32 multiQpThreshold; // 多QP散列下,每个QP分担的数据量阈值,小于这个阈值则不切分多QP
82 : u32 retryMaxCnt; // 重执行最大尝试次数,配置范围[0,60000],默认值为3
83 : u32 retryIntervalTime; // 重执行间隔时间,配置范围[0,3600000],默认值1000
84 : u32 retryHoldTime; // 首次重执行等待时间,配置范围[0,3600000],默认值1000
85 :
86 : // cann版本信息
87 : std::string cannVersion;
88 :
89 : // 配置文件参数
90 : u32 intraRoceSwitch; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
91 :
92 : std::string hcclWhiteListFile;
93 : bool profilingMode;
94 : std::string profilingOption;
95 : u64 profConfig; // Msprof profiling配置
96 : u32 enableWhitelist;
97 : hccl::HcclIpAddress hcclControlIfIp;
98 : s32 hcclSocketFamily;
99 : HcclSocketIfName hcclSocketIfName;
100 : bool isTcpMode;
101 :
102 : u32 esMaxPsTable; // ES场景获取每条流上的最大表数
103 : u32 streamNum;
104 : bool dumpDebug;
105 : ProtocolType protocolType = ProtocolType::RESERVED;
106 : MasterInfo masterInfo;
107 : bool opCounterEnable;
108 : u64 cclBufferSize;
109 : bool enableFfts;
110 : u8 hcclDeterministic;
111 : bool isDeterministic;
112 : bool enablePipline;
113 : bool enableEntryLog;
114 : bool interHccsDisable;
115 : bool aicpuUnfold;
116 : uint8_t aicpuCacheEnable;
117 : bool aivMode;
118 : bool remoteIsHdc = false;
119 : bool hcclRetryConfig[HCCL_RETRY_ENABLE_LEVEL_NUM];
120 : std::string logicSuperPodId;
121 : bool rdmaFastPost;
122 : std::string multiQpSrcPortConfigPath;
123 : s32 increSaveExecTimeOut;
124 : u64 debugConfig;
125 48 : ExternalInput() { SetDefaultParams(); }
126 1178 : void SetDefaultParams()
127 : {
128 1178 : initialized = false;
129 1178 : execTimeOutSet = HcclExecTimeoutSet::HCCL_EXEC_TIMEOUT_NOT_SET;
130 1178 : linkTimeOut = HCCL_LINK_TIME_OUT_S; // 120秒超时
131 1178 : execTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
132 1178 : rdmaTrafficClass = HCCL_RDMA_TC_DEFAULT;
133 1178 : rdmaServerLevel = HCCL_RDMA_SL_DEFAULT;
134 1178 : rdmaTimeOut = HCCL_RDMA_TIMEOUT_DEFAULT;
135 1178 : rdmaRetryCnt = HCCL_RDMA_RETRY_CNT_DEFAULT;
136 1178 : taskExceptionSwitch = 0;
137 1178 : qpsPerConnection = HCCL_QPS_PER_CONNECTION_DEFAULT;
138 1178 : multiQpThreshold = HCCL_MULTI_QP_THRESHOLD_DEFAULT;
139 1178 : retryMaxCnt = HCCL_RETRY_MAXCNT_DEFAULT;
140 1178 : retryHoldTime = HCCL_RETRY_HOLD_TIME_DEFAULT;
141 1178 : retryIntervalTime = HCCL_RETRY_INTERVAL_DEFAULT;
142 1178 : cannVersion = "";
143 1178 : hcclIfBasePort = HCCL_INVALID_PORT; // 无效端口
144 1178 : intraRoceSwitch = 0; // server内的通信方式 与intraPcieSwitch组合使用,默认为0
145 :
146 1178 : hcclWhiteListFile = "";
147 1178 : profilingMode = false;
148 1178 : profilingOption = "";
149 1178 : profConfig = 0;
150 1178 : enableWhitelist = HCCL_WHITELIST_OFF;
151 1178 : hcclControlIfIp.clear();
152 1178 : hcclSocketFamily = -1;
153 1178 : hcclSocketIfName.configIfNames = {};
154 1178 : hcclSocketIfName.searchExact = false; // false: 默认为前缀匹配
155 1178 : hcclSocketIfName.searchNot = false; // false: 默认为匹配
156 :
157 1178 : isTcpMode = false;
158 :
159 1178 : esMaxPsTable = 0;
160 1178 : streamNum = 1;
161 1178 : dumpDebug = false;
162 1178 : protocolType = ProtocolType::RESERVED;
163 :
164 1178 : masterInfo.serverIp.clear();
165 1178 : masterInfo.port = HCCL_INVALID_PORT;
166 1178 : masterInfo.serverDeviceId = INVALID_VALUE_RANKID;
167 1178 : masterInfo.rankSize = INVALID_VALUE_RANKSIZE;
168 1178 : masterInfo.agentIp.clear();
169 :
170 1178 : cclBufferSize = HCCL_CCL_COMM_DEFAULT_BUFFER_SIZE * HCCL_CCL_COMM_FIXED_CALC_BUFFER_SIZE;
171 1178 : enableFfts = true;
172 : hcclDeterministic
173 1178 : = DETERMINISTIC_DISABLE; // 确定性配置 0:不支持;1:支持确定性不支持规约保序;2:支持确定性&规约保序
174 1178 : isDeterministic = false; // 兼容性考虑,提供确定性bool
175 1178 : enablePipline = false;
176 1178 : enableEntryLog = false;
177 1178 : interHccsDisable = false;
178 1178 : aicpuCacheEnable = 1; // 默认开启aicpu cache (只有当aicpuUnfold为true时才生效)
179 1178 : opCounterEnable = true;
180 1178 : logicSuperPodId = "";
181 1178 : rdmaFastPost = false;
182 1178 : multiQpSrcPortConfigPath = "";
183 1178 : increSaveExecTimeOut = NOTIFY_DEFAULT_WAIT_TIME; // HCCL 默认的Notify wait超时时间设置
184 1178 : debugConfig = 0;
185 1178 : }
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
|