No project description provided
Project description
Quantizers
Hardware-oriented numerical quantizers for deep learning models, implemented in Keras v3 and NumPy. Provides bit-accurate precision matching with Vivado/Vitis HLS implementations.
Features
- Bit-accurate to the HLS implementation up to 32/64-bit floating point precision
- Support for fixed-point and minifloat number formats
- Differentiable Keras v3 implementations with gradients on inputs
- With surrogate gradients for bit-width optimization as described in Gradient-based Automatic Mixed Precision Quantization for Neural Networks On-Chip
- Supports stochastic rounding for training
Supported Quantizers
Fixed-Point Quantizer
Parameters:
k(keep_negative): Enable negative numbersi(integer_bits): Number of bits before decimal point (excludes sign bit)f(fractional_bits): Number of bits after decimal point- For C++:
W = k + i + f,I = k + i,S = k
Supported modes:
- Rounding:
TRN,RND,RND_CONV,TRN_ZERO,RND_ZERO,RND_MIN_INF,RND_INFS_RNDandS_RND_CONVfor stochastic rounding; Not available in NumPy implementation as it is for training only
- Overflow:
WRAP,SAT,SAT_SYM,WRAP_SM
Limitations:
WRAP_SMonly works withRNDorRND_CONVroundingWRAP*modes don't provide surrogate gradients for integer bits- Saturation bit forced to zero for
WRAPandWRAP_SM
Minifloat Quantizer
Parameters:
m(mantissa_bits): Mantissa widthe(exponent_bits): Exponent widthe0(exponent_zero): Exponent bias (default: 0)- Range:
[-2^(e-1) + e0, 2^(e-1) - 1 + e0]
Features:
- Supports subnormal numbers
- Uses
RND_CONVrounding andSAToverflow - HLS-synthesizable implementation in
test/cpp_source/ap_types/ap_float.h
Simplified Quantizers
- Binary: Maps to {-1,1} with 0 to -1. (preliminary implementation)
- Ternary: Shorthand for fixed-point
fixed<2, 1, RND_CONV, SAT_SYM>
Installation
requires python>=3.10
pip install quantizers
keras>=3.0 and at least one compatible backend (pytorch, jax, or tensorflow) is required for training.
Usage
Stateless Quantizers
from quantizers import (
float_quantize(_np), # add _np for NumPy implementation
get_fixed_quantizer(_np),
binary_quantize(_np),
ternary_quantize(_np),
)
# Fixed-point quantizer
fixed_quantizer = get_fixed_quantizer(round_mode, overflow_mode)
fixedp_qtensor = fixed_quantizer(
x,
integer_bits,
fractional_bits,
keep_negative,
training, # For stochastic rounding, and WRAP does not happen during training
seed, # For stochastic rounding only
)
# Minifloat quantizer
floatp_qtensor = float_quantize(x, mantissa_bits, exponent_bits, exponent_zero)
# Simplified quantizers
binary_qtensor = binary_quantize(x)
ternary_qtensor = ternary_quantize(x)
Stateful Quantizers
# Can be used for, but not intended for training
fixed_q = FixedQ(
width,
integer_bits, # including the sign bit)
keep_negative,
fixed_round_mode, # No stochastic rounding
fixed_overflow_mode
)
quantized = fixed_q(x)
mfloat_q = MinifloatQ(mantissa_bits, exponent_bits, exponent_zero)
quantized = mfloat_q(x)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quantizers-1.2.2.tar.gz.
File metadata
- Download URL: quantizers-1.2.2.tar.gz
- Upload date:
- Size: 118.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb76c4e273a96dd6735c33c9a3b0f7f688206aad4774cd7b9ee5effb9d9d6fab
|
|
| MD5 |
b128fd5affcfc298af23351d9b33a5cb
|
|
| BLAKE2b-256 |
73565a240db3b16101dce9c3fca296f6806aa9b523d5bf43388293bf69fbe537
|
File details
Details for the file quantizers-1.2.2-py3-none-any.whl.
File metadata
- Download URL: quantizers-1.2.2-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de6b6f9033fcd71593afd203dff68d5ee72563997b5426c6ecb2236fd11c9ef5
|
|
| MD5 |
28cfdf836c1a5aba386ac05ce52901bf
|
|
| BLAKE2b-256 |
0798f1db1cf7ffea7e73767d5a816ca36dfd4cd9761127cb0545c945dc680272
|