fix(quant): resolve hyphenated registry methods and disk-dict from_config in quant factory
_normalize_method_name canonicalizes dashes to underscores for _OVERRIDES
lookup, but vLLM's QUANTIZATION_METHODS keeps historical spellings
('compressed-tensors'), so both --quantization compressed-tensors and
checkpoint auto-detection raised 'Unknown quantization method'. Resolve
the normalized name back to the registry spelling, and fall back to
from_config for registry configs whose __init__ does not take the
serialized schema (compressed-tensors config_groups/format/ignore).
This commit is contained in:
1 parent
3e705fcdb1
commit
2f8363c5fc
2 files changed
+98
-6
No files matched your search
@@ -0,0 +1,72 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
|
||||
"""Tests for the quantization config factory's method-name and disk-dict resolution."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
from vllm.model_executor.layers.quantization.compressed_tensors.compressed_tensors import (
|
||||
CompressedTensorsConfig,
|
||||
)
|
||||
|
||||
from vllm_omni.quantization import build_quant_config, resolve_component_quant_config
|
||||
from vllm_omni.quantization.component_config import (
|
||||
ComponentQuantizationConfig,
|
||||
resolve_encoder_quant_config,
|
||||
)
|
||||
from vllm_omni.quantization.factory import SUPPORTED_QUANTIZATION_METHODS, _build_single
|
||||
|
||||
|
||||
def _int8_weight_only_disk_config() -> dict:
|
||||
"""Serialized compressed-tensors int8 weight-only metadata as it appears on disk."""
|
||||
weights = {
|
||||
"num_bits": 8,
|
||||
"type": "int",
|
||||
"symmetric": True,
|
||||
"strategy": "channel",
|
||||
"dynamic": False,
|
||||
"observer": "minmax",
|
||||
}
|
||||
return {
|
||||
"quant_method": "compressed-tensors",
|
||||
"format": "pack-quantized",
|
||||
"config_groups": {"group_0": {"targets": ["Linear"], "weights": weights}},
|
||||
"ignore": ["img_in"],
|
||||
"quantization_status": "frozen",
|
||||
}
|
||||
|
||||
|
||||
def test_hyphenated_registry_method_builds_from_str() -> None:
|
||||
config = _build_single("compressed-tensors")
|
||||
assert isinstance(config, CompressedTensorsConfig)
|
||||
assert config.get_name() == "compressed-tensors"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("spelling", ["compressed-tensors", "compressed_tensors"])
|
||||
def test_disk_dict_builds_via_from_config(spelling: str) -> None:
|
||||
disk = _int8_weight_only_disk_config()
|
||||
disk["quant_method"] = spelling
|
||||
config = build_quant_config(disk)
|
||||
assert isinstance(config, CompressedTensorsConfig)
|
||||
|
||||
|
||||
def test_per_component_dict_routes_transformer_only() -> None:
|
||||
disk = {"transformer": _int8_weight_only_disk_config()}
|
||||
config = build_quant_config(disk)
|
||||
assert isinstance(config, ComponentQuantizationConfig)
|
||||
assert isinstance(
|
||||
resolve_component_quant_config(config, "transformer"), CompressedTensorsConfig
|
||||
)
|
||||
encoder = resolve_encoder_quant_config(
|
||||
resolve_component_quant_config(config, "text_encoder")
|
||||
)
|
||||
assert encoder is None
|
||||
|
||||
|
||||
def test_unknown_method_still_raises() -> None:
|
||||
with pytest.raises(ValueError, match="Unknown quantization method"):
|
||||
_build_single("not-a-real-method")
|
||||
|
||||
|
||||
def test_supported_list_advertises_hyphenated_registry_names() -> None:
|
||||
assert "compressed-tensors" in SUPPORTED_QUANTIZATION_METHODS
|
||||
Reference in new issue
Block a user