Weights API¶
Configuration for weight quantization.
QuantConfig
dataclass
¶
QuantConfig(group_size: int = 128, outlier_keep_ratio: float = 0.02, rank: int = 0, activation_aware: bool = False, symmetric: bool = True, bits: int = 4)
Configuration for TurboQuant weight quantization.
Attributes: group_size: Group size for quantization (default: 128). outlier_keep_ratio: Fraction of columns to keep in fp16 (default: 0.02). rank: Rank for SVD residual correction (0 = disabled). activation_aware: Use activation statistics for importance (default: False). symmetric: Use symmetric quantization (default: True). bits: Number of bits for quantization (default: 4).
Core weight quantization algorithms for TurboQuant.
Provides: - Channel importance computation - Outlier identification and protection - Group-wise quantization/dequantization - AWQ-style scale computation - SVD low-rank residual correction - Int4 packing/unpacking
CompressedWeights
dataclass
¶
CompressedWeights(packed_int4: ndarray, scales: ndarray, zero_points: Optional[ndarray], protected_channels: Optional[ndarray], protected_indices: Optional[ndarray], svd_u: Optional[ndarray], svd_v: Optional[ndarray], group_size: int, outlier_keep_ratio: float, activation_aware: bool, shape: Tuple[int, ...])
Compressed weight representation.
Attributes: packed_int4: Packed int4 weight data. scales: Per-group scales. zero_points: Per-group zero points (None for symmetric). protected_channels: Fp16 values for protected channels. protected_indices: Indices of protected channels. svd_u: Low-rank correction U matrix. svd_v: Low-rank correction V matrix. group_size: Quantization group size. outlier_keep_ratio: Fraction of outlier channels kept. activation_aware: Whether activation-aware importance was used. shape: Original weight shape.
compute_channel_importance ¶
Compute importance scores for each channel.
Args: W: Weight matrix [out_features, in_features]. activations: Optional activation statistics [in_features] or [num_samples, in_features].
Returns: Importance scores [in_features or out_features].
Source code in turboquant/weights/core.py
identify_outliers ¶
Identify outlier channels based on magnitude.
Args: W: Weight matrix [out_features, in_features]. ratio: Fraction of channels to mark as outliers.
Returns: mask: Boolean mask [out_features] True for outliers. channel_mag: Maximum magnitude per channel [out_features]. outlier_indices: Indices of outlier channels.
Source code in turboquant/weights/core.py
quantize_group_wise ¶
quantize_group_wise(W: ndarray, group_size: int, scales: ndarray, zero_points: Optional[ndarray] = None, symmetric: bool = False) -> np.ndarray
Quantize weights with per-group scales.
Args: W: Weight matrix [out_features, in_features]. group_size: Number of elements per group. scales: Per-group scale factors. zero_points: Per-group zero points (for asymmetric). symmetric: Use symmetric quantization.
Returns: Quantized weights as int8.
Source code in turboquant/weights/core.py
dequantize_group_wise ¶
dequantize_group_wise(W_quantized: ndarray, scales: ndarray, zero_points: Optional[ndarray] = None, group_size: int = 64, symmetric: bool = False) -> np.ndarray
Dequantize weights with per-group scales.
Args: W_quantized: Quantized weights. scales: Per-group scale factors. zero_points: Per-group zero points (for asymmetric). group_size: Number of elements per group. symmetric: Use symmetric quantization.
Returns: Reconstructed weights as float32.
Source code in turboquant/weights/core.py
compute_awq_scales ¶
compute_awq_scales(W: ndarray, activations: Optional[ndarray] = None, group_size: int = 64) -> np.ndarray
Compute AWQ-style activation-aware scales.
Args: W: Weight matrix. activations: Optional activation statistics. group_size: Quantization group size.
Returns: Per-group scale factors.
Source code in turboquant/weights/core.py
svd_low_rank_correction ¶
svd_low_rank_correction(W_residual: ndarray, rank: int = 8) -> Tuple[Optional[np.ndarray], Optional[np.ndarray]]
Compute SVD low-rank approximation of residual.
Args: W_residual: Residual matrix (original - quantized). rank: Rank of approximation.
Returns: U_reduced, V_reduced for low-rank correction.
Source code in turboquant/weights/core.py
pack_int4 ¶
Pack int4 values (-8..7) into uint8 (2 values per byte).
Args: values_int8: Array of int4 values as int8.
Returns: Packed uint8 array (half the size).
Source code in turboquant/weights/core.py
unpack_int4 ¶
Unpack uint8 back to int4 values.
Args: packed_uint8: Packed uint8 array. length: Number of int4 values to unpack.
Returns: Array of int4 values as int8.
Source code in turboquant/weights/core.py
turboquant_compress ¶
turboquant_compress(W: ndarray, config: QuantConfig, activations: Optional[ndarray] = None) -> CompressedWeights
Compress FP32 weights using TurboQuant algorithm.
Args: W: Weight matrix [out_features, in_features]. config: Quantization configuration. activations: Optional activation statistics.
Returns: CompressedWeights containing all quantization data.
Source code in turboquant/weights/core.py
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | |
turboquant_decompress ¶
Decompress to reconstructed weight matrix.
Args: comp: CompressedWeights or dict with compression data.
Returns: Reconstructed weight matrix as float32.
Source code in turboquant/weights/core.py
compute_metrics ¶
Compute compression quality metrics.
Args: W: Original weight matrix. W_rec: Reconstructed weight matrix.
Returns: Dictionary with mse, max_error, relative_error, psnr_db.
Source code in turboquant/weights/core.py
PyTorch QuantizedLinear layer for TurboQuant weight quantization.
QuantizedLinear ¶
QuantizedLinear(in_features: int, out_features: int, bias: bool = False, config: Optional[QuantConfig] = None)
Bases: Module
Quantized linear layer with TurboQuant compression.
Supports: - Int4 weight quantization with per-group scales - Outlier channel protection (kept in fp16) - SVD low-rank residual correction - Activation-aware importance scoring
Example:
# Create from existing linear layer
q_linear = QuantizedLinear.from_linear(
linear,
config=QuantConfig(group_size=128),
)
# Forward pass
output = q_linear(input)
Source code in turboquant/weights/linear.py
from_linear
classmethod
¶
from_linear(linear: Linear, config: Optional[QuantConfig] = None, activations: Optional[Tensor] = None) -> 'QuantizedLinear'
Create a quantized linear layer from an existing nn.Linear.
Args: linear: Source linear layer. config: Quantization configuration. activations: Optional activation statistics for importance.
Returns: Quantized linear layer.
Source code in turboquant/weights/linear.py
forward ¶
Forward pass with on-the-fly dequantization.
Source code in turboquant/weights/linear.py
get_weight_stats ¶
Get compression statistics.
Source code in turboquant/weights/linear.py
TurboQuantLinear ¶
TurboQuantLinear(in_features: int, out_features: int, bias: bool = False, bits: int = 4, group_size: int = 128)
Bases: Module
GPTQ-compatible quantized linear layer.
This variant uses a format compatible with existing GPTQ/AWQ tooling. Requires CUDA kernels for efficient forward pass.
Source code in turboquant/weights/linear.py
from_linear
classmethod
¶
Create from existing linear layer.
Source code in turboquant/weights/linear.py
forward ¶
Forward pass (requires CUDA kernel).