5cbd3f29e3
Fuzz / Run fuzz harnesses (${{ github.event_name == 'schedule' && 'nightly' || 'smoke' }}) (push) Has been cancelled
Create Releases / call-mac (push) Has been cancelled
Create Releases / call-linux (push) Has been cancelled
Create Releases / call-sdist (push) Has been cancelled
Create Releases / call-win (push) Has been cancelled
Create Releases / call-pyodide (push) Has been cancelled
Windows_No_Exception_CI / build (x64, 3.10) (push) Has been cancelled
Check URLs / build (push) Has been cancelled
Create Releases / Attest CI build artifacts (push) Has been cancelled
Create Releases / Check for Publish release build to pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Check for Publish release build to test.pypi (rc-candidates) (push) Has been cancelled
Create Releases / Publish release build to test.pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish release build to pypi (push) Has been cancelled
Create Releases / test source distribution (push) Has been cancelled
clang-tidy / clang-tidy (push) Has been cancelled
Lint / Validate SBOM (push) Has been cancelled
Lint / Enforce style (push) Has been cancelled
CI / Test windows-2022, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=1, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=1, onnx_ml=1, autogen=1 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=0, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
Pixi CI / Install and lint (ubuntu-24.04-arm) (push) Has been cancelled
Pixi CI / Install and lint (windows-2022) (push) Has been cancelled
Pixi CI / Xcode generator build (push) Has been cancelled
Pixi CI / Install and test (macos-latest, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, default) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, default) (push) Has been cancelled
Pixi CI / Install and test (macos-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, oldies) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
Generate and publish ONNX docs / build (push) Has been cancelled
Generate and publish ONNX docs / deploy (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
59 lines
2.9 KiB
Markdown
59 lines
2.9 KiB
Markdown
<!--
|
|
Copyright (c) ONNX Project Contributors
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
-->
|
|
|
|
(onnx-detail-int4)=
|
|
|
|
# 4 bit integer types
|
|
|
|
## Papers
|
|
|
|
Several papers have been published in 2023 to introduce 4 bit integers and their usage in LLMs. Although their range is
|
|
limited, with careful selection of scaling parameters, good accuracy is obtained when used for compression of weights
|
|
(weight-only quantization), and in some cases for quantization of activations as well.
|
|
|
|
[AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration](https://arxiv.org/abs/2306.00978)
|
|
Activation-aware Weight Quantization (AWQ) focuses on the quantization of weights in LLMs by considering the
|
|
observation that not all weights are equally important. The method aims to protect salient weights based on the
|
|
activation, rather than relying on backpropagation or reconstruction techniques. By searching for the optimal
|
|
per-channel scaling that preserves the crucial weights, AWQ aims to minimize quantization errors.
|
|
|
|
[GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers](https://arxiv.org/abs/2210.17323)
|
|
GPTQ proposes a one-shot weight quantization method based on approximate second-order information. GPTQ achieves
|
|
significant compression gains, reducing the bit-width to 3 or 4 bits per weight with negligible accuracy degradation
|
|
compared to the uncompressed baseline.
|
|
|
|
[Understanding INT4 Quantization for Transformer Models: Latency Speedup, Composability, and Failure Cases](https://arxiv.org/abs/2301.12017)
|
|
This paper discusses quantization of both weights and activations to 4 bit (W4A4). Results indicate that W4A4
|
|
quantization leads to little to no accuracy degradation for encoder-only and encoder-decoder models but results in
|
|
a significant accuracy drop for decoder-only models. To realize the performance gains using W4A4, the study introduces
|
|
a highly optimized end-to-end W4A4 encoder inference pipeline that supports various quantization strategies.
|
|
|
|
As a result, two new types were introduced in `onnx==1.17.0` supporting a limited set of operators to enable compression using
|
|
4 bit data-types:
|
|
|
|
- `UINT4`: 4 bit unsigned integer, values in range [0, 15]
|
|
- `INT4`: 4 bit signed integer, using two's complement representation. Values in range [-8, 7].
|
|
|
|
## Cast
|
|
|
|
Cast from 4 bit to any higher precision type is exact.
|
|
Cast to a 4 bit type is done by rounding to the nearest-integer (with ties to even)
|
|
nearest-even integer and truncating.
|
|
|
|
## Packing and Unpacking
|
|
|
|
All 4 bit types are stored as 2x4bit in a single byte.
|
|
The first element is stored in the 4 LSB and the second element is stored in the 4 MSB.
|
|
i.e. for elements x, y, that are consecutive elements in the array:
|
|
|
|
```
|
|
pack(x,y): y << 4 | x & 0x0F
|
|
unpack(z): x = z & 0x0F, y = z >> 4
|
|
```
|
|
|
|
In case the total number of elements is odd, padding of 4 bits will be appended.
|
|
The storage size of a 4 bit tensor of size `N` is `ceil(N/2)`.
|