Skip to content

[quantization] Introduce wrapper for Qwen3VLTextRotaryEmbedding#498

Draft
dvsav wants to merge 1 commit intoSamsung:mainfrom
dvsav:quant_text_rotary_embed
Draft

[quantization] Introduce wrapper for Qwen3VLTextRotaryEmbedding#498
dvsav wants to merge 1 commit intoSamsung:mainfrom
dvsav:quant_text_rotary_embed

Conversation

@dvsav
Copy link
Contributor

@dvsav dvsav commented Feb 17, 2026

This change introduces QuantQwen3VLTextRotaryEmbedding wrapper to support post-training quantization of Qwen3VLTextRotaryEmbedding module.

Why?

Qwen3VLTextRotaryEmbedding module is used in the language model of Qwen.
Trying to quantize Qwen3VLTextRotaryEmbedding via PTQ generates exception PTQQuantizer: no quantization wrapper for Qwen3VLTextRotaryEmbedding.

What

This change introduces:

  • Class QuantQwen3VLTextRotaryEmbedding (tico/quantization/wrapq/wrappers/qwen_vl/quant_text_rotary_embedding.py).
  • Unit tests: class TestQuantQwen3VLTextRotaryEmbedding (test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py) - skipped if transformers package is not installed.
  • New entry tico.quantization.wrapq.wrappers.qwen_vl.quant_text_rotary_embedding in _CORE_MODULES (tico/quantization/wrapq/wrappers/registry.py).
  • Example of Qwen3VLTextRotaryEmbedding quantization and conversion to Circle (tico/quantization/wrapq/examples/qwen/quantize_qwen_text_rotary_embedding.py).

Unit Tests

Unit tests results with coverage information:

$ coverage run -m pytest test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py -v
======================================================================================= test session starts ========================================================================================
platform linux -- Python 3.10.12, pytest-8.4.0, pluggy-1.6.0 -- /home/d.savchenkov/myenv/bin/python3
cachedir: .pytest_cache
rootdir: /home/d.savchenkov/TICO
configfile: pyproject.toml
plugins: anyio-4.12.0, mock-3.15.1, xdist-3.7.0, cov-6.2.1
collected 12 items                                                                                                                                                                                 

test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_activation_stats_collected PASSED                                    [  8%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_cos_sin_relationship PASSED                                          [ 16%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_different_batch_sizes PASSED                                         [ 25%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_different_sequence_lengths PASSED                                    [ 33%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_dtype_override PASSED                                                [ 41%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_mode_transitions PASSED                                              [ 50%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_no_learnable_parameters PASSED                                       [ 58%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_observer_count PASSED                                                [ 66%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_output_range PASSED                                                  [ 75%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_output_shape PASSED                                                  [ 83%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_quantised_output_close PASSED                                        [ 91%]
test/quantization/wrapq/wrappers/qwen_vl/test_quant_text_rotary_embedding.py::TestQuantQwen3VLTextRotaryEmbedding::test_registration_in_registry PASSED                                      [100%]

================================================================================== 12 passed, 2 warnings in 6.66s ==================================================================================```

Coverage info (irrelevant files skipped):
```sh
$ coverage report -m
Name                                                                      Stmts   Miss  Cover   Missing
-------------------------------------------------------------------------------------------------------
...
tico/quantization/wrapq/wrappers/qwen_vl/quant_text_rotary_embedding.py      52      0   100%
...
-------------------------------------------------------------------------------------------------------
TOTAL                                                                     10300   6628    36%

This change introduces QuantQwen3VLTextRotaryEmbedding wrapper to support post-training quantization of Qwen3VLTextRotaryEmbedding module.

TICO-DCO-1.0-Signed-off-by: d.savchenkov <d.savchenkov@partner.samsung.com>
@dvsav dvsav force-pushed the quant_text_rotary_embed branch from 36c7773 to d2f6509 Compare February 17, 2026 15:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant