vllm-project--vllm-omni
148 行
5.0 KiB
Python
148 行
5.0 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
"""Tests for INC/AutoRound quantization via the unified framework."""
|
|
|
|
import pytest
|
|
|
|
pytestmark = [pytest.mark.core_model, pytest.mark.diffusion]
|
|
|
|
|
|
def test_build_quant_config_autoround():
|
|
"""build_quant_config("auto-round", ...) should produce an INCConfig."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.quantization import build_quant_config
|
|
|
|
config = build_quant_config(
|
|
"auto-round",
|
|
bits=4,
|
|
group_size=128,
|
|
sym=True,
|
|
packing_format="auto_round:auto_gptq",
|
|
)
|
|
assert config is not None
|
|
assert isinstance(config, INCConfig)
|
|
assert config.weight_bits == 4
|
|
assert config.group_size == 128
|
|
|
|
|
|
def test_build_quant_config_inc():
|
|
"""build_quant_config("inc", ...) should also produce an INCConfig."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.quantization import build_quant_config
|
|
|
|
config = build_quant_config("inc", bits=4, group_size=128)
|
|
assert isinstance(config, INCConfig)
|
|
assert config.weight_bits == 4
|
|
|
|
|
|
def test_build_quant_config_autoround_dict():
|
|
"""Dict-style config with method=auto-round should work."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.quantization import build_quant_config
|
|
|
|
config = build_quant_config(
|
|
{
|
|
"method": "auto-round",
|
|
"bits": 4,
|
|
"group_size": 128,
|
|
"sym": True,
|
|
"packing_format": "auto_round:auto_gptq",
|
|
}
|
|
)
|
|
assert isinstance(config, INCConfig)
|
|
assert config.weight_bits == 4
|
|
|
|
|
|
def test_build_quant_config_autoround_filters_metadata():
|
|
"""Checkpoint metadata keys (autoround_version, batch_size, iters)
|
|
should be silently filtered out instead of causing TypeError."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.quantization import build_quant_config
|
|
|
|
config = build_quant_config(
|
|
"auto-round",
|
|
bits=4,
|
|
group_size=128,
|
|
sym=True,
|
|
packing_format="auto_round:auto_gptq",
|
|
block_name_to_quantize="transformer_blocks,single_transformer_blocks",
|
|
autoround_version="0.12.0", # metadata — must be filtered
|
|
batch_size=1, # metadata — must be filtered
|
|
iters=0, # metadata — must be filtered
|
|
)
|
|
assert isinstance(config, INCConfig)
|
|
assert config.weight_bits == 4
|
|
assert config.group_size == 128
|
|
|
|
|
|
def test_build_quant_config_bits_to_weight_bits_mapping():
|
|
"""The 'bits' key from checkpoints should be mapped to 'weight_bits'."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.quantization import build_quant_config
|
|
|
|
# If weight_bits is already provided, bits should be ignored
|
|
config = build_quant_config("auto-round", weight_bits=4, group_size=128)
|
|
assert isinstance(config, INCConfig)
|
|
assert config.weight_bits == 4
|
|
|
|
|
|
def test_autoround_in_supported_methods():
|
|
"""auto-round and inc should appear in SUPPORTED_QUANTIZATION_METHODS."""
|
|
from vllm_omni.quantization import SUPPORTED_QUANTIZATION_METHODS
|
|
|
|
assert "auto-round" in SUPPORTED_QUANTIZATION_METHODS
|
|
assert "inc" in SUPPORTED_QUANTIZATION_METHODS
|
|
|
|
|
|
def test_integration_autoround_via_omni_diffusion_config():
|
|
"""OmniDiffusionConfig with auto-round quantization dict should resolve."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.diffusion.data import OmniDiffusionConfig
|
|
|
|
config = OmniDiffusionConfig(
|
|
model="test",
|
|
quantization_config={
|
|
"method": "auto-round",
|
|
"bits": 4,
|
|
"group_size": 128,
|
|
"sym": True,
|
|
},
|
|
)
|
|
assert isinstance(config.quantization_config, INCConfig)
|
|
assert config.quantization_config.weight_bits == 4
|
|
|
|
|
|
def test_integration_autodetect_from_transformer_config():
|
|
"""When TransformerConfig has quant_config, OmniDiffusionConfig should
|
|
auto-detect it even without explicit quantization_config."""
|
|
from vllm.model_executor.layers.quantization.inc import INCConfig
|
|
|
|
from vllm_omni.diffusion.data import OmniDiffusionConfig, TransformerConfig
|
|
|
|
tf_config = TransformerConfig.from_dict(
|
|
{
|
|
"quantization_config": {
|
|
"quant_method": "auto-round",
|
|
"bits": 4,
|
|
"group_size": 128,
|
|
"sym": True,
|
|
"packing_format": "auto_round:auto_gptq",
|
|
"autoround_version": "0.12.0",
|
|
"batch_size": 1,
|
|
"iters": 0,
|
|
}
|
|
}
|
|
)
|
|
assert tf_config.quant_method == "auto-round"
|
|
assert isinstance(tf_config.quant_config, INCConfig)
|
|
|
|
od_config = OmniDiffusionConfig(model="test", tf_model_config=tf_config)
|
|
assert isinstance(od_config.quantization_config, INCConfig)
|
|
assert od_config.quantization_config.weight_bits == 4
|