Skip to content

Commit b02e888

Browse files
authored
fix(quantization): accept QuantizeAlgorithmConfig in get_modelike_from_algo_cfg (#201) (#1528)
Fixes #201 `get_modelike_from_algo_cfg` was typed to accept `QuantizeAlgoCfgType` (which includes `QuantizeAlgorithmConfig` instances), but the body only handled list / str / None / dict and raised `ValueError("Invalid config type")` for `QuantizeAlgorithmConfig` instances. This broke the documented pattern of passing typed config objects (`MaxCalibConfig`, `AWQLiteCalibConfig`, etc.) via `quant_config['algorithm']`. The fix pre-converts a `QuantizeAlgorithmConfig` instance to its `model_dump()` dict at function entry, so the existing dict path handles it unchanged. Two-line change; no new branch needed. Verification: added a unit test in `tests/unit/torch/quantization/test_mode.py` that builds a `MaxCalibConfig`, calls `get_modelike_from_algo_cfg` on both the object and its equivalent dict, and asserts the two paths produce the same tuple. Also covers the list-of-object path. Opened by OnCallBot on behalf of realAsma. Please review the diff before merging. cc Chenjie Luo (module owner for torch.quantization) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * `get_modelike_from_algo_cfg` now accepts configuration objects directly alongside existing input formats. * **Tests** * Added regression test to verify configuration object handling works correctly. <!-- review_stack_entry_start --> [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/Model-Optimizer/pull/1528?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: realAsma <akuriparambi@nvidia.com>
1 parent e2d4d73 commit b02e888

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

modelopt/torch/quantization/mode.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,8 @@ def get_modelike_from_algo_cfg(algo_cfg: QuantizeAlgoCfgType) -> ModeConfigList:
372372
f"Nested lists received as config! config: {algo_cfg}"
373373
)
374374
return [get_modelike_from_algo_cfg(c)[0] for c in algo_cfg]
375+
if isinstance(algo_cfg, QuantizeAlgorithmConfig):
376+
algo_cfg = algo_cfg.model_dump()
375377
if algo_cfg is None or isinstance(algo_cfg, str):
376378
algo_name, algo_cfg = algo_cfg, {}
377379
elif isinstance(algo_cfg, dict):

tests/unit/torch/quantization/test_mode.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919

2020
from modelopt.torch.opt.config import ModeloptField
2121
from modelopt.torch.opt.mode import _ModeRegistryCls
22-
from modelopt.torch.quantization.config import QuantizeAlgorithmConfig
22+
from modelopt.torch.quantization.config import MaxCalibConfig, QuantizeAlgorithmConfig
2323
from modelopt.torch.quantization.mode import (
2424
BaseCalibrateModeDescriptor,
2525
CalibrateModeRegistry,
2626
QuantizeModeRegistry,
27+
get_modelike_from_algo_cfg,
2728
)
2829

2930

@@ -60,3 +61,19 @@ def config_class(self) -> QuantizeAlgorithmConfig:
6061
@CalibrateModeRegistry.register_mode
6162
class TestIncorrectCalibrateModeDescriptor:
6263
pass
64+
65+
66+
def test_get_modelike_from_algo_cfg_accepts_quantize_algorithm_config():
67+
"""Regression test for #201: ``QuantizeAlgorithmConfig`` instances must be accepted."""
68+
cfg_obj = MaxCalibConfig(method="max", distributed_sync=False)
69+
cfg_dict = cfg_obj.model_dump()
70+
71+
from_obj = get_modelike_from_algo_cfg(cfg_obj)
72+
from_dict = get_modelike_from_algo_cfg(cfg_dict)
73+
74+
assert from_obj == from_dict
75+
assert from_obj[0][1] == cfg_dict
76+
77+
# List handling should also accept ``QuantizeAlgorithmConfig`` instances.
78+
from_list = get_modelike_from_algo_cfg([cfg_obj])
79+
assert from_list == from_obj

0 commit comments

Comments
 (0)