pytorch/test/test_quantization.py
Zafar 04a8412b86 [quant] Quantizable LSTM (#49671)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/49671

- Introduces the `torch.nn.quantizable` namespace
- Adds the `torch.nn.quantizable.LSTM` module

The point of the `quantizable` namespace is to segregate the purely quantized modules with the modules that could be quantized through a normal quantization flow, but are not using the quantized kernels explicitly.
That means the quantizable modules are functionally and numerically equivalent to the FP ones and can be used instead of the FP ones without any loss.

The main difference between the `torch.nn.LSTM` and the `torch.nn.quantizable.LSTM` is that the former one does not support observation for the linear layers, because all the computation is internal to the `aten` namespace.
The `torch.nn.quantizable.LSTM`, however, uses explicit linear layers that can be observed for further quantization.

Test Plan: Imported from OSS

Differential Revision: D25663870

Reviewed By: vkuzo

Pulled By: z-a-f

fbshipit-source-id: 70ff5463bd759b9a7922571a5712d3409dfdfa06
2020-12-30 15:21:38 -08:00

93 lines
4.3 KiB
Python

# -*- coding: utf-8 -*-
from torch.testing._internal.common_utils import run_tests
# Quantized Tensor
from quantization.test_quantized_tensor import TestQuantizedTensor # noqa: F401
# Quantized Op
# TODO: merge test cases in quantization.test_quantized
from quantization.test_quantized_op import TestQuantizedOps # noqa: F401
from quantization.test_quantized_op import TestQNNPackOps # noqa: F401
from quantization.test_quantized_op import TestQuantizedLinear # noqa: F401
from quantization.test_quantized_op import TestQuantizedConv # noqa: F401
from quantization.test_quantized_op import TestDynamicQuantizedLinear # noqa: F401
from quantization.test_quantized_op import TestComparatorOps # noqa: F401
from quantization.test_quantized_op import TestPadding # noqa: F401
from quantization.test_quantized_op import TestQuantizedEmbeddingOps # noqa: F401
from quantization.test_quantized_op import TestDynamicQuantizedRNNOp # noqa: F401
# Quantized Functional
from quantization.test_quantized_functional import TestQuantizedFunctional # noqa: F401
# Quantized Module
from quantization.test_quantized_module import TestStaticQuantizedModule # noqa: F401
from quantization.test_quantized_module import TestDynamicQuantizedModule # noqa: F401
# Quantization Aware Training
from quantization.test_qat_module import TestQATModule # noqa: F401
# Quantization specific fusion passes
from quantization.test_fusion_passes import TestFusionPasses # noqa: F401
# Module
# TODO: some of the tests are actually operator tests, e.g. test_forward_per_tensor, and
# should be moved to test_quantized_op
from quantization.test_workflow_module import TestFakeQuantize # noqa: F401
from quantization.test_workflow_module import TestObserver # noqa: F401
# TODO: merge with TestObserver
# TODO: some tests belong to test_quantize.py, e.g. test_record_observer
from quantization.test_workflow_module import TestRecordHistogramObserver # noqa: F401
from quantization.test_workflow_module import TestDistributed # noqa: F401
# Workflow
# 1. Eager mode quantization
from quantization.test_quantize import TestPostTrainingStatic # noqa: F401
from quantization.test_quantize import TestPostTrainingDynamic # noqa: F401
from quantization.test_quantize import TestQuantizationAwareTraining # noqa: F401
from quantization.test_quantize import TestEagerModeOps # noqa: F401
from quantization.test_quantize import TestEagerModeQATOps # noqa: F401
# TODO: merge with other tests in test_quantize.py?
from quantization.test_quantize import TestFunctionalModule # noqa: F401
from quantization.test_quantize import TestFusion # noqa: F401
from quantization.test_quantize import TestModelNumerics # noqa: F401
from quantization.test_quantize import TestQuantizeONNXExport # noqa: F401
from quantization.test_quantize import TestDeprecatedJitQuantized # noqa: F401
# 2. Graph mode quantization
from quantization.test_quantize_jit import TestQuantizeJit # noqa: F401
from quantization.test_quantize_jit import TestQuantizeJitPasses # noqa: F401
from quantization.test_quantize_jit import TestQuantizeJitOps # noqa: F401
from quantization.test_quantize_jit import TestQuantizeDynamicJitPasses # noqa: F401
from quantization.test_quantize_jit import TestQuantizeDynamicJitOps # noqaa: F401
# 3. GraphModule based graph mode quantization
try:
from quantization.test_quantize_fx import TestFuseFx # noqa: F401
from quantization.test_quantize_fx import TestQuantizeFx # noqa: F401
from quantization.test_quantize_fx import TestQuantizeFxOps # noqa: F401
from quantization.test_quantize_fx import TestQuantizeFxModels # noqa: F401
except ImportError:
# In FBCode we separate FX out into a separate target for the sake of dev
# velocity. These are covered by a separate test target `quantization_fx`
pass
# Tooling: numeric_suite
from quantization.test_numeric_suite import TestEagerModeNumericSuite # noqa: F401
try:
from quantization.test_numeric_suite_fx import TestGraphModeNumericSuite # noqa: F401
except ImportError:
pass
# Backward Compatibility
from quantization.test_backward_compatibility import TestSerialization # noqa: F401
# Equalization
from quantization.test_equalize import TestEqualizeEager # noqa: F401
# Bias Correction
from quantization.test_bias_correction import TestBiasCorrection # noqa: F401
if __name__ == '__main__':
run_tests()