Commit Graph

9 Commits

Author SHA1 Message Date
asl3
13ad4739a6 [quant] Implement PTQ for APoT FakeQuant (#81040)
### Summary:
This PR implements PTQ for APoT FakeQuant. It runs models (Resnet-18 pre-trained model, ImageNet dataset) to compare accuracy metrics for different qconfig settings of uniform vs. APoT quantized activation and weight.

According to the collected accuracy stats, model #2 (uniform activation and APoT weight) appears to have a slight improvement in accuracy compared to model #1 (uniform activation and uniform weight) for 8-bit and significant improvement for 4-bit (see "Accuracy Stats" section below).

### Test Plan:
Run models with: `python test/quantization/core/experimental/fx_graph_mode_apot.py`

### Accuracy Stats:
8-bit (Uniform int8, APoT b = 8 k = 2)

**Model #1:** Uniform activation, uniform weight (FX Graph Mode quantized)
Evaluation accuracy on test dataset: 64.43% (Top-1), 85.62% (Top-5)

**Model #2:** Uniform activation, APoT weight (FX Graph Mode quantized)
Evaluation accuracy on test dataset: 64.51% (Top-1), 85.78% (Top-5)

**Model #3:** APoT activation, APoT weight (FX Graph Mode quantized)
Evaluation accuracy on test dataset: 64.32% (Top-1), 85.78% (Top-5)

4-bit (Uniform int4, APoT b = 4 k = 2)

**Model #1:** Uniform activation, uniform weight (FX Graph Mode quantized)
Evaluation accuracy on test dataset: 45.63% (Top-1), 71.96% (Top-5)

**Model #2:** Uniform activation, APoT weight (FX Graph Mode quantized)
Evaluation accuracy on test dataset: 64.24% (Top-1), 85.56% (Top-5)

**Model #3:** APoT activation, APoT weight (FX Graph Mode quantized)
Evaluation accuracy on test dataset: 45.40% (Top-1), 76.21% (Top-5)

**Full Precision model (FX Graph Mode quantized)**
Evaluation accuracy on test dataset: 69.76% (Top-1), 89.08% (Top-5)

**Eager mode quantized model**
Evaluation accuracy on test dataset: 69.49% (Top-1), 88.90% (Top-5)
Pull Request resolved: https://github.com/pytorch/pytorch/pull/81040
Approved by: https://github.com/jerryzh168
2022-07-28 07:21:31 +00:00
asl3
2727d88569 [quant] Modify APoT global methods to align with uniform API (#80364)
### Summary:
This PR updates the APoT global API method signatures and parameters for `dequantize_APoT` and `calculate_qparams` to align with their uniform counterparts in the codebase.

### Test Plan:
Run unit tests with:
`python pytorch/test/quantization/core/experimental/test_nonuniform_observer.py`
`python pytorch/test/quantization/core/experimental/test_quantizer.py`
Pull Request resolved: https://github.com/pytorch/pytorch/pull/80364
Approved by: https://github.com/jerryzh168
2022-06-27 22:48:09 +00:00
asl3
777c12f2df [quant] Modify APoT nonuniform quantization workflow (#80075)
### Summary:
This PR updates the design of APoT Observer, Quantizer, and Tensor to be more consistent with their uniform counterparts in the PyTorch framework. APoT Observer now calculates alpha as the max between the absolute values of the max and min values in the input tensor. APoT Quantizer is modified so its instance methods quantize_APoT and dequantize_APoT are called by their global method counterparts. APoT Tensor is modified to account for the new method definition of the `quantize_APoT` from APoT Quantizer.

### Test Plan:
Run APoT Observer class unit tests with: `python pytorch/test/quantization/core/experimental/test_nonuniform_observer.py`
Run APoT Quantize class unit tests with: `python pytorch/test/quantization/core/experimental/test_quantizer.py`
Run APoT Tensor class unit tests with: `python pytorch/test/quantization/core/experimental/test_quantized_tensor.py`
Pull Request resolved: https://github.com/pytorch/pytorch/pull/80075
Approved by: https://github.com/jerryzh168
2022-06-27 14:54:06 +00:00
asl3
0eee81aaad [quant] Modify APoT qparam quantization levels calculation (#80303)
### Summary:
This PR updates an error in the the computation for APoT quantization levels to match the formula defined in the APoT paper: https://arxiv.org/pdf/1909.13144.pdf.

### Test Plan:
Run unit tests with:` python pytorch/test/quantization/core/experimental/test_nonuniform_observer.py`
Pull Request resolved: https://github.com/pytorch/pytorch/pull/80303
Approved by: https://github.com/dzdang
2022-06-27 13:34:05 +00:00
asl3
228e082ca9 [quant] Refactor nonuniform quantization mapping functions
Pull Request resolved: https://github.com/pytorch/pytorch/pull/79790

Approved by: https://github.com/dzdang
2022-06-20 13:06:22 +00:00
asl3
afc037ae38 [quant] Add quantized levels visualization
Pull Request resolved: https://github.com/pytorch/pytorch/pull/79198

Approved by: https://github.com/HDCharles
2022-06-16 06:10:34 +00:00
asl3
81f277002e [quant] Add param calcs and tests for APoT observers
Pull Request resolved: https://github.com/pytorch/pytorch/pull/78905

Approved by: https://github.com/dzdang
2022-06-15 23:24:48 +00:00
asl3
6fa202847e Add TODO comment
Pull Request resolved: https://github.com/pytorch/pytorch/pull/79068

Approved by: https://github.com/dzdang
2022-06-09 17:30:52 +00:00
asl3
308d813d45 Add nonuniform observer class and tests
Pull Request resolved: https://github.com/pytorch/pytorch/pull/78680

Approved by: https://github.com/dzdang
2022-06-02 16:29:21 +00:00