diff --git a/tf_adapter/tests/st/util/testcase/npu_attrs_test.cc b/tf_adapter/tests/st/util/testcase/npu_attrs_test.cc index 11324fba428ab9b3817ca7a4d60f20e7e3bf3b68..4b19af03f7a31a98e206fb7959eb7cea4b7f4513 100644 --- a/tf_adapter/tests/st/util/testcase/npu_attrs_test.cc +++ b/tf_adapter/tests/st/util/testcase/npu_attrs_test.cc @@ -117,6 +117,62 @@ TEST_F(NpuAttrTest, CheckPrecisionModeV2) { EXPECT_EQ(s.ok(), false); } +TEST_F(NpuAttrTest, CheckModifyMixList_Failed) { + GraphOptimizationPassOptions options; + SessionOptions session_options; + session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_do_function_inlining(true); + auto *custom_config = + session_options.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers(); + custom_config->set_name("NpuOptimizer"); + options.session_options = &session_options; + + AttrValue modify_mixlist = AttrValue(); + modify_mixlist.set_s("list"); + (*custom_config->mutable_parameter_map())["modify_mixlist"] = modify_mixlist; + Status s = NpuAttrs::SetNpuOptimizerAttr(options, reinterpret_cast(1)); + EXPECT_EQ(s.ok(), false); +} + +TEST_F(NpuAttrTest, CheckModifyMixList_Failed_WithWrongPrecisonModeV2) { + GraphOptimizationPassOptions options; + SessionOptions session_options; + session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_do_function_inlining(true); + auto *custom_config = + session_options.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers(); + custom_config->set_name("NpuOptimizer"); + options.session_options = &session_options; + + AttrValue modify_mixlist = AttrValue(); + modify_mixlist.set_s("list"); + (*custom_config->mutable_parameter_map())["modify_mixlist"] = modify_mixlist; + + AttrValue precision_mode_v2 = AttrValue(); + precision_mode_v2.set_s("fp16"); + (*custom_config->mutable_parameter_map())["precision_mode_v2"] = precision_mode_v2; + Status s = NpuAttrs::SetNpuOptimizerAttr(options, reinterpret_cast(1)); + EXPECT_EQ(s.ok(), false); +} + +TEST_F(NpuAttrTest, CheckModifyMixList_Failed_WithWrongPrecisionMode) { + GraphOptimizationPassOptions options; + SessionOptions session_options; + session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_do_function_inlining(true); + auto *custom_config = + session_options.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers(); + custom_config->set_name("NpuOptimizer"); + options.session_options = &session_options; + + AttrValue modify_mixlist = AttrValue(); + modify_mixlist.set_s("list"); + (*custom_config->mutable_parameter_map())["modify_mixlist"] = modify_mixlist; + + AttrValue precision_mode = AttrValue(); + precision_mode.set_s("force_fp16"); + (*custom_config->mutable_parameter_map())["precision_mode"] = precision_mode; + Status s = NpuAttrs::SetNpuOptimizerAttr(options, reinterpret_cast(1)); + EXPECT_EQ(s.ok(), false); +} + TEST_F(NpuAttrTest, CheckPrecisionModeV2_Failed_WhenAssignedBoth) { GraphOptimizationPassOptions options; SessionOptions session_options; diff --git a/tf_adapter/tests/ut/util/testcase/npu_attrs_test.cc b/tf_adapter/tests/ut/util/testcase/npu_attrs_test.cc index d72247977699d2d37eaec900e3e6857df6fd9c0e..9f927ef84193cd3edd63b06caf543ee894698096 100644 --- a/tf_adapter/tests/ut/util/testcase/npu_attrs_test.cc +++ b/tf_adapter/tests/ut/util/testcase/npu_attrs_test.cc @@ -102,6 +102,62 @@ TEST_F(NpuAttrTest, CheckPrecisionMode ) { EXPECT_EQ(s.ok(), false); } +TEST_F(NpuAttrTest, CheckModifyMixList_Failed) { + GraphOptimizationPassOptions options; + SessionOptions session_options; + session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_do_function_inlining(true); + auto *custom_config = + session_options.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers(); + custom_config->set_name("NpuOptimizer"); + options.session_options = &session_options; + + AttrValue modify_mixlist = AttrValue(); + modify_mixlist.set_s("list"); + (*custom_config->mutable_parameter_map())["modify_mixlist"] = modify_mixlist; + Status s = NpuAttrs::SetNpuOptimizerAttr(options, reinterpret_cast(1)); + EXPECT_EQ(s.ok(), false); +} + +TEST_F(NpuAttrTest, CheckModifyMixList_Failed_WithWrongPrecisonModeV2) { + GraphOptimizationPassOptions options; + SessionOptions session_options; + session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_do_function_inlining(true); + auto *custom_config = + session_options.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers(); + custom_config->set_name("NpuOptimizer"); + options.session_options = &session_options; + + AttrValue modify_mixlist = AttrValue(); + modify_mixlist.set_s("list"); + (*custom_config->mutable_parameter_map())["modify_mixlist"] = modify_mixlist; + + AttrValue precision_mode_v2 = AttrValue(); + precision_mode_v2.set_s("fp16"); + (*custom_config->mutable_parameter_map())["precision_mode_v2"] = precision_mode_v2; + Status s = NpuAttrs::SetNpuOptimizerAttr(options, reinterpret_cast(1)); + EXPECT_EQ(s.ok(), false); +} + +TEST_F(NpuAttrTest, CheckModifyMixList_Failed_WithWrongPrecisionMode) { + GraphOptimizationPassOptions options; + SessionOptions session_options; + session_options.config.mutable_graph_options()->mutable_optimizer_options()->set_do_function_inlining(true); + auto *custom_config = + session_options.config.mutable_graph_options()->mutable_rewrite_options()->add_custom_optimizers(); + custom_config->set_name("NpuOptimizer"); + options.session_options = &session_options; + + AttrValue modify_mixlist = AttrValue(); + modify_mixlist.set_s("list"); + (*custom_config->mutable_parameter_map())["modify_mixlist"] = modify_mixlist; + + AttrValue precision_mode = AttrValue(); + precision_mode.set_s("force_fp16"); + (*custom_config->mutable_parameter_map())["precision_mode"] = precision_mode; + Status s = NpuAttrs::SetNpuOptimizerAttr(options, reinterpret_cast(1)); + EXPECT_EQ(s.ok(), false); +} + TEST_F(NpuAttrTest, CheckPrecisionModeV2) { GraphOptimizationPassOptions options; SessionOptions session_options; diff --git a/tf_adapter/util/npu_attrs.cc b/tf_adapter/util/npu_attrs.cc index 1cb0041efd48efe5e234c1225e7c1ebf75e9668f..dbbfc515f26beda2df8d4556e3408cf7dafebb3e 100644 --- a/tf_adapter/util/npu_attrs.cc +++ b/tf_adapter/util/npu_attrs.cc @@ -2048,15 +2048,63 @@ Status NpuAttrs::SetNpuOptimizerAttr(const GraphOptimizationPassOptions &options } } if (params.count("modify_mixlist") > 0) { - if (params.count("precision_mode") > 0 && params.at("precision_mode").s() == "allow_mix_precision") { + bool check_precision_mode = false; + bool check_precision_mode_v2 = false; + if (params.count("precision_mode") > 0) { + const std::string precision_mode = params.at("precision_mode").s(); + check_precision_mode = ((precision_mode == "allow_mix_precision") || + (precision_mode == "allow_mix_precision_fp16") || + (precision_mode == "allow_mix_precision_bf16")); + } else if (params.count("precision_mode_v2") > 0) { + const std::string precision_mode_v2 = params.at("precision_mode_v2").s(); + check_precision_mode_v2 = ((precision_mode_v2 == "mixed_float16") || + (precision_mode_v2 == "mixed_bfloat16")); + } + + if (check_precision_mode || check_precision_mode_v2) { modify_mixlist = params.at("modify_mixlist").s(); + } else if (params.count("precision_mode") > 0) { + ADP_LOG(ERROR) + << "modify_mixlist is assigned, please ensure that precision_mode is assigned to " + << "'allow_mix_precision' or 'allow_mix_precision_fp16' or " + << "'allow_mix_precision_bf16'(if available)."; + LOG(ERROR) + << "modify_mixlist is assigned, please ensure that precision_mode is assigned to " + << "'allow_mix_precision' or 'allow_mix_precision_fp16' or " + << "'allow_mix_precision_bf16'(if available)."; + return errors::Internal( + "modify_mixlist is assigned, please ensure that precision_mode is assigned to " + "'allow_mix_precision' or 'allow_mix_precision_fp16' or " + "'allow_mix_precision_bf16'(if available)."); + } else if (params.count("precision_mode_v2") > 0) { + ADP_LOG(ERROR) + << "modify_mixlist is assigned, please ensure that precision_mode_v2 is assigned to " + << "'mixed_float16' or 'mixed_bfloat16'(if available)."; + LOG(ERROR) + << "modify_mixlist is assigned, please ensure that precision_mode_v2 is assigned to " + << "'mixed_float16' or 'mixed_bfloat16'(if available)."; + return errors::Internal( + "modify_mixlist is assigned, please ensure that precision_mode_v2 is assigned to " + "'mixed_float16' or 'mixed_bfloat16'(if available)."); } else { ADP_LOG(ERROR) - << "modify_mixlist is assigned, please ensure that precision_mode is assigned to 'allow_mix_precision'."; + << "modify_mixlist is assigned, please ensure precision_mode only can be assigned" + << "to 'allow_mix_precision' or 'allow_mix_precision_fp16' or " + << "'allow_mix_precision_bf16'(if available)." + << "precision_mode_v2 only can be assigned to mixed_float16' or " + << "'mixed_bfloat16'(if available)."; LOG(ERROR) - << "modify_mixlist is assigned, please ensure that precision_mode is assigned to 'allow_mix_precision'."; + << "modify_mixlist is assigned, please ensure precision_mode only can be assigned" + << "to 'allow_mix_precision' or 'allow_mix_precision_fp16' or " + << "'allow_mix_precision_bf16'(if available)." + << "precision_mode_v2 only can be assigned to mixed_float16' or " + << "'mixed_bfloat16'(if available)."; return errors::Internal( - "modify_mixlist is assigned, please ensure that precision_mode is assigned to 'allow_mix_precision'."); + "modify_mixlist is assigned, please ensure precision_mode only can be assigned" + "to 'allow_mix_precision' or 'allow_mix_precision_fp16' or " + "'allow_mix_precision_bf16'(if available)." + "precision_mode_v2 only can be assigned to mixed_float16' or " + "'mixed_bfloat16'(if available)."); } } if ((params.count("precision_mode") > 0) && (params.count("precision_mode_v2") > 0)) {