burn_core/module/
quantize.rs

1use burn_tensor::{
2    Tensor,
3    backend::Backend,
4    quantization::{Calibration, QuantScheme},
5};
6
7use crate::module::{ModuleMapper, ParamId};
8
9/// Describes how to quantize a module.
10pub struct Quantizer {
11    /// The calibration method used in quantization.
12    pub calibration: Calibration,
13    /// The quantization scheme.
14    pub scheme: QuantScheme,
15}
16
17impl<B: Backend> ModuleMapper<B> for Quantizer {
18    fn map_float<const D: usize>(&mut self, _id: ParamId, tensor: Tensor<B, D>) -> Tensor<B, D> {
19        let range = self.scheme.compute_range(&tensor, &self.calibration);
20        let qparams = self.scheme.compute_q_params(range);
21        tensor.quantize(&self.scheme, qparams)
22    }
23}