张量量化
基本的张量量化函数。
类
动态块量化功能。 |
|
仿射量化的假版本。 |
|
使用CUDA扩展的TensorQuantFunction的假版本。 |
|
TensorQuantFunction 的假版本。 |
|
E4M3fy 输入带有比例。 |
|
一个通用的张量量化函数。 |
函数
根据位数实现伪量化输入。 |
|
注册一个用于量化张量的抽象实现。 |
|
实现将输入伪量化为FP8。 |
- class DynamicBlockQuantizationFunction
基础:
Function动态块量化功能。
- static backward(ctx, grad_outputs)
实现带有剪裁的直通估计。
- static forward(ctx, inputs, block_size, amax, num_bits, scale_bits, trt_high_precision_dtype='Half', onnx_quantizer_type='dynamic')
前向方法。
- static symbolic(g, inputs, block_size, amax, num_bits, scale_bits, trt_high_precision_dtype='Half', onnx_quantizer_type='dynamic')
ONNX 符号函数。
- class FakeAffineTensorQuantFunction
基础:
Function仿射量化的假版本。
gemmlowp 风格的缩放+移位量化。更多详情请参见 https://github.com/google/gemmlowp/blob/master/doc/quantization.md。
出于性能原因,我们不建议对权重进行仿射量化。对激活进行仿射量化可能有一定的价值,因为它可以通过偏置抵消,并且不会带来性能损失。此功能仅用于实验目的。
- static backward(ctx, grad_outputs)
实现带有剪裁的直通估计。
- Parameters:
ctx – Pytorch 惯例。
grad_output – 输出梯度的张量。
- Returns:
梯度的张量
- Return type:
梯度输入
- static forward(ctx, inputs, min_range, max_range, num_bits=8)
由于它仅在按张量粒度激活时应用,因此不需要广播。
- Parameters:
ctx – Pytorch 惯例。
inputs – 一个类型为 float32 的张量。
min_range – 一个浮点数。
max_range – 一个浮点数。
num_bits – 一个整数
- Returns:
一个类型为 output_dtype 的张量
- Return type:
输出
- class FakeTensorQuantFunction
基础:
Function使用CUDA扩展的TensorQuantFunction的假版本。
- static backward(ctx, grad_outputs)
实现带有剪裁的直通估计。
- static forward(ctx, inputs, amax, num_bits=8, unsigned=False, narrow_range=True, trt_high_precision_dtype='Float')
前向方法。
- static symbolic(g, inputs, amax, num_bits=8, unsigned=False, narrow_range=True, trt_high_precision_dtype='Float')
ONNX 符号函数。
- class LegacyFakeTensorQuantFunction
基础:
FunctionTensorQuantFunction 的假版本。
请参阅 TensorQuantFunction 的注释,参数相同。
- static backward(ctx, grad_outputs)
实现直通估计。
- static forward(ctx, inputs, amax, num_bits=8, unsigned=False, narrow_range=True)
前向方法。
- class ScaledE4M3Function
基础:
FunctionE4M3fy 输入带有比例。
- static backward(ctx, grad_outputs)
实现带有剪裁的直通估计。
- static forward(ctx, inputs, amax, E, M, trt_high_precision_dtype='Float')
前向方法。
- static symbolic(g, inputs, amax=None, E=4, M=3, trt_high_precision_dtype='Float')
ONNX 符号函数。
- class TensorQuantFunction
基础:
Function一个通用的张量量化函数。
获取一个输入张量,输出一个量化张量。比例粒度可以从amax的形状中解释。 output_dtype 表示量化值将存储在整数还是浮点数中。我们希望将其存储在浮点数中的原因是,pytorch函数可能不接受整数输入,例如Conv2D。
它使用2^num_bits -1个值而不是2^num_bits。例如,对于num_bits=8,它使用[-127, 127]而不是[-128, 127]
- static backward(ctx, grad_outputs, grad_scale)
实现带有剪裁的直通估计。
对于 -amax <= 输入 <= amax,梯度直接通过,否则梯度为零。
- Parameters:
ctx – 一个包含从forward保存的张量的Context对象。
grad_outputs – 输出的梯度张量。
grad_scale – 一个比例梯度的张量。
- Returns:
一个梯度张量。
- Return type:
梯度输入
- static forward(ctx, inputs, amax, num_bits=8, unsigned=False, narrow_range=True, trt_high_precision_dtype='Float')
前向方法。
遵循tensorflow的惯例,最大值被传入并用于决定比例,而不是直接输入比例。尽管直接输入比例可能更自然。
- Parameters:
ctx – 一个用于存储反向传播张量的上下文对象。
inputs – 一个类型为 float32 的张量。
amax – 一个类型为 float32 的张量。输入将在范围 [-amax, amax] 内进行量化。 amax 将被广播到输入张量。
num_bits – 用于计算缩放因子的整数,scale = (2^(num_bits-1) - 1) / max 实际上,它表示用于表示值的整数位数。默认值为8。
output_dtype – 张量的类型。torch.int32 或 torch.float32。
unsigned – 一个布尔值。使用无符号整数范围。例如,对于num_bits=8,范围为[0, 255]。默认值为False。
narrow_range – 一个布尔值。用于有符号量化的对称整数范围 例如,对于num_bits=8,使用[-127,127]而不是[-128,127]。默认值为True。
- Returns:
一个类型为output_dtype的张量。 scale: 一个类型为float32的张量。outputs / scale 将反量化outputs张量。
- Return type:
输出
- Raises:
ValueError –
- static symbolic(g, inputs, amax, num_bits=8, unsigned=False, narrow_range=True, trt_high_precision_dtype='Float')
ONNX 符号函数。
- fake_quant_impl(inputs, amax, num_bits=8, unsigned=False, narrow_range=True)
根据位数实现伪量化输入。
- Parameters:
输入 (张量) –
amax (张量) –
- quantize_op_abstract(input, amax, num_bits=8, exponent_bits=0, unsigned=False, narrow_range=True)
注册一个用于量化张量的抽象实现。
这个抽象函数返回一个具有相同形状和数据类型(dtype)的空张量。
- Parameters:
输入 (张量) –
amax (张量) –
num_bits (int) –
exponent_bits (int) –
unsigned (bool) –
narrow_range (bool) –
- Return type:
张量
- scaled_e4m3_impl(inputs, amax, disable_fused_kernel=False)
实现将输入伪量化为FP8。
- Parameters:
inputs (Tensor) – Torch 张量。
amax (Tensor) – 输入张量的绝对最大范围。
- Returns:
输入张量被伪量化为FP8。
- Return type:
张量