Skip to content

Commit c486f35

Browse files
authored
Revert "[GPU] Keep RMS normalization nodes in FP32 to prevent NaN from FP16 overflow (#36504)" (#36892)
### Details: - Revert PR #36504 which forces all RMS normalization nodes to FP32 - This change causes significant global LLM performance regression. ### Root Cause PR #36504 was introduced to fix NaN in ParlerTTS Mini (CVS-187992) by keeping RMS nodes in FP32. However, it unconditionally marks ALL RMS nodes across all models, adding FP16↔FP32 conversion overhead on every transformer layer. ### Tickets: - *190812*
1 parent d8047fb commit c486f35

2 files changed

Lines changed: 1 addition & 66 deletions

File tree

src/common/transformations/src/transformations/fp16_compression/mark_subgraphs_to_keep_in_mixed_precision.cpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
#include "openvino/pass/pattern/op/optional.hpp"
5050
#include "openvino/pass/pattern/op/or.hpp"
5151
#include "openvino/pass/pattern/op/wrap_type.hpp"
52-
#include "ov_ops/rms.hpp"
5352
#include "transformations/common_optimizations/mark_precision_sensitive_shapeof_subgraphs.hpp"
5453
#include "transformations/fp16_compression/mark_floatpoint_range.hpp"
5554
#include "transformations/rt_info/disable_precision_conversion.hpp"
@@ -400,28 +399,6 @@ class MarkDivWithEps : public MatcherPass {
400399
}
401400
};
402401

403-
class MarkRMS : public MatcherPass {
404-
public:
405-
OPENVINO_MATCHER_PASS_RTTI("MarkRMS");
406-
MarkRMS() {
407-
MATCHER_SCOPE(MarkRMS);
408-
auto rms_pattern = pattern::wrap_type<ov::op::internal::RMS>([](const Output<Node>& output) -> bool {
409-
return !is_conversion_disabled(output.get_node_shared_ptr(), element::f16);
410-
});
411-
412-
matcher_pass_callback callback = [=](pattern::Matcher& m) {
413-
const auto& node = m.get_match_root();
414-
if (!node)
415-
return false;
416-
417-
disable_conversion(node, element::f16);
418-
return true;
419-
};
420-
auto m = make_shared<pattern::Matcher>(rms_pattern, matcher_name);
421-
register_matcher(m, callback);
422-
}
423-
};
424-
425402
class PropagateDownDisableSensitivityForQuantized : public MatcherPass {
426403
public:
427404
OPENVINO_MATCHER_PASS_RTTI("PropagateDownDisableSensitivityForQuantized");
@@ -493,7 +470,6 @@ bool MarkSugraphsToKeepInMixedPrecision::run_on_model(const shared_ptr<ov::Model
493470
REGISTER_PASS(manager, MarkDivWithEps)
494471
REGISTER_PASS(manager, MarkExpInReduceOpPath)
495472
REGISTER_PASS(manager, MarkRandomUniform)
496-
REGISTER_PASS(manager, MarkRMS)
497473
REGISTER_PASS(manager, PropagateDownDisableSensitivityForQuantized)
498474

499475
// both Up and Down propagations are needed.

src/common/transformations/tests/common_optimizations/mark_subgraph_to_keep_in_mixed_precision_test.cpp

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include "openvino/opsets/opset10_decl.hpp"
2929
#include "openvino/opsets/opset2_decl.hpp"
3030
#include "openvino/pass/manager.hpp"
31-
#include "ov_ops/rms.hpp"
3231
#include "transformations/convert_precision.hpp"
3332
#include "transformations/fp16_compression/mark_subgraphs_to_keep_in_mixed_precision.hpp"
3433
#include "transformations/rt_info/disable_precision_conversion.hpp"
@@ -1385,44 +1384,4 @@ TEST_F(TransformationTestsF, MarkRandomUniformAsPrecisionSensitive) {
13851384

13861385
model_ref = model->clone();
13871386
manager.register_pass<ov::pass::ConvertPrecision>(fp_convert_precision_map, empty_fuse_map, true, false, true);
1388-
}
1389-
1390-
TEST(TransformationTests, MarkRMS_keeps_rms_in_fp32) {
1391-
shared_ptr<Model> model, model_ref;
1392-
pass::Manager manager;
1393-
{
1394-
auto input = make_shared<v0::Parameter>(element::f32, PartialShape{1, 39, 768});
1395-
auto weight = v0::Constant::create(element::f32, Shape{768, 768}, {0.01f});
1396-
auto matmul = make_shared<v0::MatMul>(input, weight, false, true);
1397-
1398-
auto gamma = v0::Constant::create(element::f32, Shape{768}, {1.0f});
1399-
auto rms = make_shared<ov::op::internal::RMS>(matmul, gamma, 1e-6);
1400-
1401-
model = make_shared<Model>(OutputVector{rms}, ParameterVector{input});
1402-
1403-
manager.register_pass<pass::MarkSugraphsToKeepInMixedPrecision>();
1404-
manager.run_passes(model);
1405-
}
1406-
1407-
{
1408-
auto input = make_shared<v0::Parameter>(element::f32, PartialShape{1, 39, 768});
1409-
auto weight = v0::Constant::create(element::f32, Shape{768, 768}, {0.01f});
1410-
auto matmul = make_shared<v0::MatMul>(input, weight, false, true);
1411-
1412-
auto gamma = v0::Constant::create(element::f32, Shape{768}, {1.0f});
1413-
auto rms = make_shared<ov::op::internal::RMS>(matmul, gamma, 1e-6);
1414-
1415-
disable_conversion(rms, element::f16);
1416-
disable_conversion(gamma, element::f16);
1417-
1418-
model_ref = make_shared<Model>(OutputVector{rms}, ParameterVector{input});
1419-
}
1420-
1421-
const FunctionsComparator func_comparator =
1422-
FunctionsComparator::with_default().enable(FunctionsComparator::RUNTIME_KEYS);
1423-
// need to compare twice to ensure that no extra nodes are marked
1424-
FunctionsComparator::Result result = func_comparator(model_ref, model);
1425-
ASSERT_TRUE(result.valid) << result.message;
1426-
result = func_comparator(model, model_ref);
1427-
ASSERT_TRUE(result.valid) << result.message;
1428-
}
1387+
}

0 commit comments

Comments
 (0)