Align Frontier FP8 profiling with vLLM runtime
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
diff --git a/frontier/config/quantization_manager.py b/frontier/config/quantization_manager.py
|
||||
--- a/frontier/config/quantization_manager.py
|
||||
+++ b/frontier/config/quantization_manager.py
|
||||
@@ -356,9 +356,17 @@ class QuantizationManager:
|
||||
target_precision = self.get_precision(op_name)
|
||||
precision_match = target_precision == profiling_precision
|
||||
quant_match = profiling_quant_signature == expected_quant_signature
|
||||
+ # A mixed-precision profiling CSV records the model's output dtype at
|
||||
+ # file level. Quantized operators in that CSV were nevertheless
|
||||
+ # measured with the exact quantization scheme identified by the
|
||||
+ # quant signature. Treating those samples as BF16 and scaling them
|
||||
+ # again would double-apply the FP8 speedup.
|
||||
+ exact_fp8_profile = quant_match and target_precision == PrecisionType.FP8
|
||||
with self._lock:
|
||||
- self._operation_profiling_precision[op_name] = profiling_precision
|
||||
- if precision_match:
|
||||
+ self._operation_profiling_precision[op_name] = (
|
||||
+ target_precision if exact_fp8_profile else profiling_precision
|
||||
+ )
|
||||
+ if precision_match or exact_fp8_profile:
|
||||
self._operation_data_sources[op_name] = "profiling"
|
||||
self._operation_approximation_factors.pop(op_name, None)
|
||||
self._operation_speedup_factors.pop(op_name, None)
|
||||
diff --git a/tests/unit/test_quantization_profile_contract.py b/tests/unit/test_quantization_profile_contract.py
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/tests/unit/test_quantization_profile_contract.py
|
||||
@@ -0,0 +1,61 @@
|
||||
+from unittest.mock import MagicMock
|
||||
+
|
||||
+import pytest
|
||||
+
|
||||
+from frontier.config.model_config import QuantizationConfig
|
||||
+from frontier.config.precision_type import PrecisionType
|
||||
+from frontier.config.quantization_manager import QuantizationManager
|
||||
+
|
||||
+
|
||||
+def test_exact_fp8_quant_signature_does_not_rescale_mixed_profile() -> None:
|
||||
+ manager = QuantizationManager()
|
||||
+ manager.load_config()
|
||||
+
|
||||
+ quant_config = QuantizationConfig(
|
||||
+ quant_method="fp8",
|
||||
+ activation_scheme="dynamic",
|
||||
+ is_checkpoint_fp8_serialized=True,
|
||||
+ weight_block_size=(128, 128),
|
||||
+ )
|
||||
+ quant_signature = quant_config.get_quant_signature()
|
||||
+ model_config = MagicMock()
|
||||
+ model_config.get_default_precision.return_value = PrecisionType.BF16
|
||||
+ model_config.get_name.return_value = "Qwen3-235B-A22B-FP8"
|
||||
+ model_config.torch_dtype = "bfloat16"
|
||||
+ model_config.quantization_config = quant_config
|
||||
+ model_config.get_quant_signature.return_value = quant_signature
|
||||
+
|
||||
+ manager.configure_from_model_config(model_config)
|
||||
+ manager.register_profiling_metadata(
|
||||
+ operation_names=["attn_pre_proj"],
|
||||
+ profiling_precision=PrecisionType.BF16,
|
||||
+ profiling_quant_signature=quant_signature,
|
||||
+ expected_quant_signature=quant_signature,
|
||||
+ file_path="linear_op.csv",
|
||||
+ )
|
||||
+
|
||||
+ metadata = {
|
||||
+ item["operation"]: item
|
||||
+ for item in manager.get_operation_precision_metadata()
|
||||
+ }
|
||||
+ assert metadata["attn_pre_proj"]["data_source"] == "profiling"
|
||||
+ assert metadata["attn_pre_proj"]["approximation_factor"] is None
|
||||
+ assert manager.has_precision_mismatch("attn_pre_proj") is False
|
||||
+ assert manager.adjust_compute_time("attn_pre_proj", 1.25) == pytest.approx(1.25)
|
||||
+
|
||||
+
|
||||
+def test_mismatched_fp8_quant_signature_still_uses_approximation() -> None:
|
||||
+ manager = QuantizationManager()
|
||||
+ manager.load_config()
|
||||
+ manager._operation_precisions["attn_pre_proj"] = PrecisionType.FP8
|
||||
+
|
||||
+ manager.register_profiling_metadata(
|
||||
+ operation_names=["attn_pre_proj"],
|
||||
+ profiling_precision=PrecisionType.BF16,
|
||||
+ profiling_quant_signature="none",
|
||||
+ expected_quant_signature="method=fp8",
|
||||
+ file_path="linear_op.csv",
|
||||
+ )
|
||||
+
|
||||
+ assert manager.has_precision_mismatch("attn_pre_proj") is True
|
||||
+ assert manager.adjust_compute_time("attn_pre_proj", 1.0) == pytest.approx(0.5)
|
||||
Reference in New Issue
Block a user