已合并
chore: 补充Batch一致性资料和日志 #4233
ClarkXie创建于 7月31日
chore: 补充Batch一致性资料和日志 #4233
已合并
共 8 个文件变更+67-7
| @@ -246,10 +246,11 @@ DEFINE_string(deterministic, "0", | |||
| 246 | 246 | ||
| 247 | DEFINE_string(deterministic_level, "0", | 247 | DEFINE_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 | ||
| 255 | DEFINE_string(host_env_os, "", | 256 | DEFINE_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弱符号接口 |
Mdocs/zh/api/graph_engine_api/cpp/ge/aclgrphBuildInitialize_config_params/experimental_parameters.md+51-0
| @@ -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\_FOLDING | 118 | ## 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> { |