From 30256dc05b304ed144774b4a151e5e06f2007f12 Mon Sep 17 00:00:00 2001 From: Tai An Date: Sun, 30 Aug 2026 16:27:51 -0700 Subject: [PATCH 1/2] fix(fx): drop the dynamic_range argument from the 8 remaining mark_as_int8_layer calls 13873bd ("remove dynamic_range in fx", #4221) changed mark_as_int8_layer(layer, dynamic_range) to mark_as_int8_layer(layer) and cleaned up 6 files, but 8 call sites across 5 files still pass two positional arguments and raise TypeError: mark_as_int8_layer() takes 1 positional argument but 2 were given on every quantized conversion that reaches them: add.py:47/64/70, batchnorm.py:21, linear.py:43/51, mul.py:46 and impl/convolution.py:130. linear.py:27, the one site #4221 did update, is the intended shape. Follows the same idiom as #4221: keep the call, drop the argument, and remove the get_dyn_range() computations and imports that become unused. get_dyn_range itself is kept -- quantization.py still uses it. --- py/torch_tensorrt/fx/converters/add.py | 10 ++++------ py/torch_tensorrt/fx/converters/batchnorm.py | 6 ++---- py/torch_tensorrt/fx/converters/impl/convolution.py | 3 +-- py/torch_tensorrt/fx/converters/linear.py | 7 +++---- py/torch_tensorrt/fx/converters/mul.py | 5 ++--- 5 files changed, 12 insertions(+), 19 deletions(-) diff --git a/py/torch_tensorrt/fx/converters/add.py b/py/torch_tensorrt/fx/converters/add.py index c60b0313a36..a50b92f27a5 100644 --- a/py/torch_tensorrt/fx/converters/add.py +++ b/py/torch_tensorrt/fx/converters/add.py @@ -6,7 +6,7 @@ from ..converter_registry import tensorrt_converter -from .converter_utils import get_dyn_range, mark_as_int8_layer +from .converter_utils import mark_as_int8_layer @tensorrt_converter(operator.add) @@ -43,8 +43,7 @@ def quantized_add(network, target, args, kwargs, layer_name): layer = network.add_elementwise(lhs_val, rhs_val, trt.ElementWiseOperation.SUM) layer.name = layer_name - dyn_range = get_dyn_range(kwargs["scale"], kwargs["zero_point"], torch.quint8) - mark_as_int8_layer(layer, dyn_range) + mark_as_int8_layer(layer) return layer.get_output(0) @@ -60,13 +59,12 @@ def quantized_add_relu(network, submod, args, kwargs, layer_name): layer = network.add_elementwise(lhs_val, rhs_val, trt.ElementWiseOperation.SUM) layer.name = f"{layer_name}_add" - dyn_range = get_dyn_range(kwargs["scale"], kwargs["zero_point"], torch.quint8) - mark_as_int8_layer(layer, dyn_range) + mark_as_int8_layer(layer) layer = network.add_activation( input=layer.get_output(0), type=trt.ActivationType.RELU ) layer.name = f"{layer_name}_relu" - mark_as_int8_layer(layer, dyn_range) + mark_as_int8_layer(layer) return layer.get_output(0) diff --git a/py/torch_tensorrt/fx/converters/batchnorm.py b/py/torch_tensorrt/fx/converters/batchnorm.py index 130991df543..41a91cafd1f 100644 --- a/py/torch_tensorrt/fx/converters/batchnorm.py +++ b/py/torch_tensorrt/fx/converters/batchnorm.py @@ -6,7 +6,7 @@ from ..converter_registry import tensorrt_converter -from .converter_utils import get_dyn_range, mark_as_int8_layer, to_numpy +from .converter_utils import mark_as_int8_layer, to_numpy def common_batchnorm(network, mod, input_val, layer_name, is_quantized): @@ -18,9 +18,7 @@ def common_batchnorm(network, mod, input_val, layer_name, is_quantized): layer.name = layer_name if is_quantized: - mark_as_int8_layer( - layer, get_dyn_range(mod.scale, mod.zero_point, torch.quint8) - ) + mark_as_int8_layer(layer) return layer.get_output(0) diff --git a/py/torch_tensorrt/fx/converters/impl/convolution.py b/py/torch_tensorrt/fx/converters/impl/convolution.py index 84071ed2d4a..985acb89aff 100644 --- a/py/torch_tensorrt/fx/converters/impl/convolution.py +++ b/py/torch_tensorrt/fx/converters/impl/convolution.py @@ -9,7 +9,6 @@ from torch_tensorrt.fx.converters.converter_utils import ( SourceIR, extend_attr_to_tuple, - get_dyn_range, mark_as_int8_layer, set_layer_name, has_dynamic_shape, @@ -127,7 +126,7 @@ def convNd( # Handle quantization cases if scale is not None and zero_point is not None: # Assume the dtype of activation is torch.quint8 - mark_as_int8_layer(conv_layer, get_dyn_range(scale, zero_point, torch.quint8)) + mark_as_int8_layer(conv_layer) result = conv_layer.get_output(0) diff --git a/py/torch_tensorrt/fx/converters/linear.py b/py/torch_tensorrt/fx/converters/linear.py index 1ad6968a155..e6e5461d12c 100644 --- a/py/torch_tensorrt/fx/converters/linear.py +++ b/py/torch_tensorrt/fx/converters/linear.py @@ -4,7 +4,7 @@ from ..converter_registry import tensorrt_converter -from .converter_utils import get_dyn_range, mark_as_int8_layer, to_numpy +from .converter_utils import mark_as_int8_layer, to_numpy def common_linear(network, mod, input_val, layer_name, is_quantized): @@ -39,8 +39,7 @@ def common_linear(network, mod, input_val, layer_name, is_quantized): layer.name = f"{layer_name}_linear" if is_quantized: - dyn_range = get_dyn_range(mod.scale, mod.zero_point, torch.quint8) - mark_as_int8_layer(layer, dyn_range) + mark_as_int8_layer(layer) # reshape the output from (*, K, 1, 1) to (*, K) layer = network.add_shuffle(layer.get_output(0)) @@ -48,7 +47,7 @@ def common_linear(network, mod, input_val, layer_name, is_quantized): layer.name = f"{layer_name}_post_shuffle" if is_quantized: - mark_as_int8_layer(layer, dyn_range) + mark_as_int8_layer(layer) return layer.get_output(0) diff --git a/py/torch_tensorrt/fx/converters/mul.py b/py/torch_tensorrt/fx/converters/mul.py index a1d9858ebd8..1bfb48de998 100644 --- a/py/torch_tensorrt/fx/converters/mul.py +++ b/py/torch_tensorrt/fx/converters/mul.py @@ -6,7 +6,7 @@ from ..converter_registry import tensorrt_converter -from .converter_utils import get_dyn_range, mark_as_int8_layer +from .converter_utils import mark_as_int8_layer @tensorrt_converter(torch.mul) @@ -42,7 +42,6 @@ def quantized_mul(network, target, args, kwargs, layer_name): layer = network.add_elementwise(lhs_val, rhs_val, trt.ElementWiseOperation.PROD) layer.name = layer_name - dyn_range = get_dyn_range(kwargs["scale"], kwargs["zero_point"], torch.quint8) - mark_as_int8_layer(layer, dyn_range) + mark_as_int8_layer(layer) return layer.get_output(0) From 367eff132103faeb44a2285e5748b7bc9b39e14f Mon Sep 17 00:00:00 2001 From: Anai-Guo Date: Wed, 2 Sep 2026 20:06:10 -0700 Subject: [PATCH 2/2] fix(fx): remove get_dyn_range, now that it has no callers Per review: after dropping the extra `get_dyn_range(...)` argument from the eight `mark_as_int8_layer` call sites, and after #4221 removed the last use in quantization.py, `get_dyn_range` has no remaining callers. It is leftover from the old `ITensor.dynamic_range` path that TRT 10 no longer exposes. Delete the helper from converter_utils.py and drop the now-unused import in quantization.py. --- py/torch_tensorrt/fx/converters/converter_utils.py | 14 -------------- py/torch_tensorrt/fx/converters/quantization.py | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/py/torch_tensorrt/fx/converters/converter_utils.py b/py/torch_tensorrt/fx/converters/converter_utils.py index e6bbff0a5a8..1ca01245d23 100644 --- a/py/torch_tensorrt/fx/converters/converter_utils.py +++ b/py/torch_tensorrt/fx/converters/converter_utils.py @@ -693,20 +693,6 @@ def add_reduce_layer( return layer.get_output(0) -def get_dyn_range(scale, zero_point, dtype): - """ - Get the dynamic range of a tensor based on its scale, zero_point and dtype. - """ - if dtype == torch.quint8: - min_val, max_val = 0, 255 - elif dtype == torch.qint8: - min_val, max_val = -128, 127 - else: - raise RuntimeError(f"Unsupported quantized dtype {dtype}") - - return (min_val - zero_point) * scale, (max_val - zero_point) * scale - - def mark_as_int8_layer(layer): """ Set the precision of a layer to int8 as well as the type of its outputs. diff --git a/py/torch_tensorrt/fx/converters/quantization.py b/py/torch_tensorrt/fx/converters/quantization.py index 968ff955a46..2a0876fcd7d 100644 --- a/py/torch_tensorrt/fx/converters/quantization.py +++ b/py/torch_tensorrt/fx/converters/quantization.py @@ -4,7 +4,7 @@ from ..converter_registry import tensorrt_converter -from .converter_utils import get_dyn_range, get_inputs_from_args_and_kwargs +from .converter_utils import get_inputs_from_args_and_kwargs quantize_per_tensor_inputs = ["input", "scale", "zero_point", "dtype"]