已合并
chore: 补充Batch一致性资料和日志 #4233
chore: 补充Batch一致性资料和日志 #4233
已合并
ClarkXie创建于 7月31日
8 个文件变更+67-7
@@ -246,10 +246,11 @@ DEFINE_string(deterministic, "0",
246 246 
247DEFINE_string(deterministic_level, "0",247DEFINE_string(deterministic_level, "0",
248 "Optional; "248 "Optional; "
249- "For deterministic and strong consistency calculation"249+ "For deterministic, strong consistency and batch consistency calculation. "
250 "0: deterministic off. "250 "0: deterministic off. "
251 "1: deterministic on. "251 "1: deterministic on. "
252 "2: strong consistency on. "252 "2: strong consistency on. "
253+ "3: batch consistency on. "
253 "Default is 0.");254 "Default is 0.");
254 255 
255DEFINE_string(host_env_os, "",256DEFINE_string(host_env_os, "",
@@ -715,8 +715,9 @@ class GFlagUtils {
715 " 0 (default): centralized clean. 1: separate clean.\n"715 " 0 (default): centralized clean. 1: separate clean.\n"
716 " --deterministic For deterministic calculation.\n"716 " --deterministic For deterministic calculation.\n"
717 " 0 (default): deterministic off. 1: deterministic on.\n"717 " 0 (default): deterministic off. 1: deterministic on.\n"
718- " --deterministic_level For deterministic and strong consistency calculation.\n"718+ " --deterministic_level For deterministic, strong consistency and batch consistency calculation.\n"
719- " 0 (default): deterministic off. 1: deterministic on. 2: strong consistency on.\n" +719+ " 0 (default): deterministic off. 1: deterministic on. 2: strong consistency on. "
720+ "3: batch consistency on.\n" +
720 oo_help_info[static_cast<size_t>(OoCategory::kDebug)]);721 oo_help_info[static_cast<size_t>(OoCategory::kDebug)]);
721 722 
722 return flgs::ParseCommandLine(argc, argv);723 return flgs::ParseCommandLine(argc, argv);
@@ -604,6 +604,8 @@ ge::graphStatus RtParseAndTiling(const ge::Operator &op, const char_t *const com
604 int32_t deterministic = 0;604 int32_t deterministic = 0;
605 int32_t deterministic_level = 0;605 int32_t deterministic_level = 0;
606 GE_ASSERT_SUCCESS(GetDeterministicConfig(op_desc, deterministic, deterministic_level));606 GE_ASSERT_SUCCESS(GetDeterministicConfig(op_desc, deterministic, deterministic_level));
607+ GELOGI("Get deterministic: %d, deterministic level: %d from node: %s", deterministic, deterministic_level,
608+ op_desc->GetName().c_str());
607 609 
608 /*610 /*
609 * 后续切换OpTilingContextBuilder时,出于兼容性考虑(新GE包+老metadef包),建议deterministic_level的设置通过调用纯C弱符号接口611 * 后续切换OpTilingContextBuilder时,出于兼容性考虑(新GE包+老metadef包),建议deterministic_level的设置通过调用纯C弱符号接口
@@ -64,6 +64,57 @@ HF32是昇腾推出的专门用于算子内部计算的单精度浮点类型,
64 64 
65<!-- end id1 -->65<!-- end id1 -->
66 66 
67+## DETERMINISTIC\_LEVEL
68+ 
69+**该参数为调试参数,暂不支持应用于生产环境,后续版本会作为正式特性更新发布。**
70+ 
71+确定性计算级别。此参数实际对应的options参数为`ge.deterministicLevel`
72+ 
73+默认情况下,确定性级别为0,即不开启确定性计算,是否开启确定性计算的选项`DETERMINISTIC`也需要是0。当需要开启确定性计算时,确定性级别需要设置为1,同时确定性计算选项`DETERMINISTIC`也需设置为1。当开启强一致性计算时,级别需要设置为2,同时确定性计算选项`DETERMINISTIC`也需设置为1。当开启Batch一致性计算时,级别需要设置为3,同时确定性计算选项`DETERMINISTIC`也需设置为1。
74+ 
75+当开启强一致性计算功能时(DETERMINISTIC\_LEVEL=2),计算结果是确定的,多次执行将产生相同的输出。此外,计算结果与数据的位置无关。例如,在进行矩阵乘时,不同行的累加顺序可能不同,这可能会导致相同数据在不同行的计算结果出现细微差异。但在启用强一致性计算的情况下,只要输入相同,即使在不同的行中,计算结果都将保持一致。
76+ 
77+默认情况下,强一致性计算功能不会启用。在这种默认模式下,相同数据出现在不同行时,可能会产生计算结果上的不一致。
78+ 
79+**参数取值:**
80+ 
81+- 0:(默认值)不开启确定性计算。
82+- 1:开启确定性计算。
83+- 2:开启强一致性计算。
84+- 3:开启Batch一致性计算。
85+ 
86+**配置示例:**
87+ 
88+```c++
89+{ge::ir_option::DETERMINISTIC, "1"},
90+{ge::ir_option::DETERMINISTIC_LEVEL, "2"}
91+```
92+ 
93+**产品支持情况:**
94+ 
95+<!-- npu="950" id15 -->
96+- Ascend 950PR/Ascend 950DT:支持
97+<!-- end id15 -->
98+<!-- npu="A3" id16 -->
99+- Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
100+<!-- end id16 -->
101+<!-- npu="910b" id17 -->
102+- Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
103+<!-- end id17 -->
104+<!-- npu="310b" id18 -->
105+- Atlas 200I/500 A2 推理产品:不支持
106+<!-- end id18 -->
107+<!-- npu="310p" id19 -->
108+- Atlas 推理系列产品:支持
109+<!-- end id19 -->
110+<!-- npu="910" id20 -->
111+- Atlas 训练系列产品:支持
112+<!-- end id20 -->
113+<!-- npu="IPV350" id21 -->
114+- IPV350:不支持
115+<!-- end id21 -->
116+<!-- @ref: ge/res/docs/zh/api/graph_engine_api/cpp/ge/aclgrphBuildInitialize_config_params/experimental_parameters_res.md#id1 -->
117+ 
67## OO\_CONSTANT\_FOLDING118## OO\_CONSTANT\_FOLDING
68 119 
69**调试功能扩展参数,暂不支持应用于生产环境,后续版本会作为正式功能更新发布。**120**调试功能扩展参数,暂不支持应用于生产环境,后续版本会作为正式功能更新发布。**
@@ -39,7 +39,7 @@
39 39 
40确定性计算级别。40确定性计算级别。
41 41 
42-默认情况下,确定性级别为0,即不开启确定性计算,是否开启确定性计算的选项ge.deterministic也需要是0。当需要开启确定性计算时,确定性级别需要设置为1,同时确定性计算选项ge.deterministic也需设置为1。当开启强一致性计算时,级别需要设置为2,同时确定性计算选项ge.deterministic也需设置为1。42+默认情况下,确定性级别为0,即不开启确定性计算,是否开启确定性计算的选项ge.deterministic也需要是0。当需要开启确定性计算时,确定性级别需要设置为1,同时确定性计算选项ge.deterministic也需设置为1。当开启强一致性计算时,级别需要设置为2,同时确定性计算选项ge.deterministic也需设置为1。当开启Batch一致性计算时,级别需要设置为3,同时确定性计算选项ge.deterministic也需设置为1。
43 43 
44当开启强一致性计算功能时(ge.deterministicLevel=2),计算结果是确定的,多次执行将产生相同的输出。此外,计算结果与数据的位置无关。例如,在进行矩阵乘时,不同行的累加顺序可能不同,这可能会导致相同数据在不同行的计算结果出现细微差异。但在启用强一致性计算的情况下,只要输入相同,即使在不同的行中,计算结果都将保持一致。44当开启强一致性计算功能时(ge.deterministicLevel=2),计算结果是确定的,多次执行将产生相同的输出。此外,计算结果与数据的位置无关。例如,在进行矩阵乘时,不同行的累加顺序可能不同,这可能会导致相同数据在不同行的计算结果出现细微差异。但在启用强一致性计算的情况下,只要输入相同,即使在不同的行中,计算结果都将保持一致。
45 45 
@@ -52,6 +52,7 @@
52- 0:(默认值)不开启确定性计算。52- 0:(默认值)不开启确定性计算。
53- 1:开启确定性计算。53- 1:开启确定性计算。
54- 2:开启强一致性计算。54- 2:开启强一致性计算。
55+- 3:开启Batch一致性计算。
55 56 
56**配置示例:**57**配置示例:**
57 58 
@@ -33,7 +33,7 @@
33 33 
34确定性计算级别。34确定性计算级别。
35 35 
36-默认情况下,确定性级别为0,即不开启确定性计算,是否开启确定性计算的选项[--deterministic](--deterministic.md)也需要是0。当需要开启确定性计算时,确定性级别需要设置为1,同时确定性计算选项--deterministic也需设置为1。当开启强一致性计算时,级别需要设置为2,同时确定性计算选项--deterministic也需设置为1。36+默认情况下,确定性级别为0,即不开启确定性计算,是否开启确定性计算的选项[--deterministic](--deterministic.md)也需要是0。当需要开启确定性计算时,确定性级别需要设置为1,同时确定性计算选项--deterministic也需设置为1。当开启强一致性计算时,级别需要设置为2,同时确定性计算选项--deterministic也需设置为1。当开启Batch一致性计算时,级别需要设置为3,同时确定性计算选项--deterministic也需设置为1。
37 37 
38当开启强一致性计算功能时(--deterministic\_level=2),计算结果是确定的,多次执行将产生相同的输出。此外,计算结果与数据的位置无关。例如,在进行矩阵乘时,不同行的累加顺序可能不同,这可能会导致相同数据在不同行的计算结果出现细微差异。但在启用强一致性计算的情况下,只要输入相同,即使在不同的行中,计算结果都将保持一致。38当开启强一致性计算功能时(--deterministic\_level=2),计算结果是确定的,多次执行将产生相同的输出。此外,计算结果与数据的位置无关。例如,在进行矩阵乘时,不同行的累加顺序可能不同,这可能会导致相同数据在不同行的计算结果出现细微差异。但在启用强一致性计算的情况下,只要输入相同,即使在不同的行中,计算结果都将保持一致。
39 39 
@@ -50,6 +50,7 @@
50- 0:(默认值)不开启确定性计算。50- 0:(默认值)不开启确定性计算。
51- 1:开启确定性计算。51- 1:开启确定性计算。
52- 2:开启强一致性计算。52- 2:开启强一致性计算。
53+- 3:开启Batch一致性计算。
53 54 
54## 推荐配置及收益55## 推荐配置及收益
55 56 
@@ -136,12 +136,14 @@ Status ArgsFormatUtils::SinkTilingContext(const NodePtr &node, DavinciModel &dav
136 uint8_t *context_host_begin = &host_pointer[aligned_tiling_size + workspace_addr_size];136 uint8_t *context_host_begin = &host_pointer[aligned_tiling_size + workspace_addr_size];
137 uint64_t context_dev_begin = PtrToValue(device_addr) + aligned_tiling_size + workspace_addr_size;137 uint64_t context_dev_begin = PtrToValue(device_addr) + aligned_tiling_size + workspace_addr_size;
138 138 
139- int32_t deterministic = 0;
140 gert::TiledKernelContextHolder tiling_context_holder;139 gert::TiledKernelContextHolder tiling_context_holder;
141 tiling_context_holder.compute_node_info_size_ = compute_node_info_size;140 tiling_context_holder.compute_node_info_size_ = compute_node_info_size;
142 tiling_context_holder.host_compute_node_info_ = compute_node_extend_holder.get();141 tiling_context_holder.host_compute_node_info_ = compute_node_extend_holder.get();
142+ int32_t deterministic = 0;
143 int32_t deterministic_level = 0;143 int32_t deterministic_level = 0;
144 GE_ASSERT_SUCCESS(optiling::GetDeterministicConfig(node->GetOpDesc(), deterministic, deterministic_level));144 GE_ASSERT_SUCCESS(optiling::GetDeterministicConfig(node->GetOpDesc(), deterministic, deterministic_level));
145+ GELOGI("Get deterministic: %d, deterministic level: %d from node: %s", deterministic, deterministic_level,
146+ node->GetName().c_str());
145 147 
146 auto context_builder = gert::DeviceTilingContextBuilder();148 auto context_builder = gert::DeviceTilingContextBuilder();
147 Status ret =149 Status ret =
@@ -242,7 +242,8 @@ ge::Status BuildTilingDeterministicInput(const ge::NodePtr &node, LoweringGlobal
242 if (GetDeterministicConfig(node, deterministic, deterministic_level) != ge::SUCCESS) {242 if (GetDeterministicConfig(node, deterministic, deterministic_level) != ge::SUCCESS) {
243 return ge::FAILED;243 return ge::FAILED;
244 }244 }
245- GELOGI("Get DETERMINISTIC: %d, DETERMINISTIC LEVEL: %d", deterministic, deterministic_level);245+ GELOGI("Get DETERMINISTIC: %d, DETERMINISTIC LEVEL: %d from node: %s", deterministic, deterministic_level,
246+ node->GetName().c_str());
246 247 
247 auto deterministic_builder = [deterministic]() -> std::vector<ValueHolderPtr> {248 auto deterministic_builder = [deterministic]() -> std::vector<ValueHolderPtr> {
248 return bg::FrameSelector::OnInitRoot([deterministic]() -> std::vector<ValueHolderPtr> {249 return bg::FrameSelector::OnInitRoot([deterministic]() -> std::vector<ValueHolderPtr> {