张量量化

基本的张量量化函数。

DynamicBlockQuantizationFunction

动态块量化功能。

FakeAffineTensorQuantFunction

仿射量化的假版本。

FakeTensorQuantFunction

使用CUDA扩展的TensorQuantFunction的假版本。

LegacyFakeTensorQuantFunction

TensorQuantFunction 的假版本。

ScaledE4M3Function

E4M3fy 输入带有比例。

TensorQuantFunction

一个通用的张量量化函数。

函数

fake_quant_impl

根据位数实现伪量化输入。

quantize_op_abstract

注册一个用于量化张量的抽象实现。

scaled_e4m3_impl

实现将输入伪量化为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

基础:Function

TensorQuantFunction 的假版本。

请参阅 TensorQuantFunction 的注释,参数相同。

static backward(ctx, grad_outputs)

实现直通估计。

static forward(ctx, inputs, amax, num_bits=8, unsigned=False, narrow_range=True)

前向方法。

class ScaledE4M3Function

基础:Function

E4M3fy 输入带有比例。

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:

张量