diff --git a/master/doctrees/environment.pickle b/master/doctrees/environment.pickle index 88f1fbcb..b8eba5cb 100644 Binary files a/master/doctrees/environment.pickle and b/master/doctrees/environment.pickle differ diff --git a/master/doctrees/functionlib/dsplib/adder.doctree b/master/doctrees/functionlib/dsplib/adder.doctree index 6dbc3f2e..7819db62 100644 Binary files a/master/doctrees/functionlib/dsplib/adder.doctree and b/master/doctrees/functionlib/dsplib/adder.doctree differ diff --git a/master/doctrees/functionlib/dsplib/dsplib_index.doctree b/master/doctrees/functionlib/dsplib/dsplib_index.doctree index 5daa1377..c94c0ac1 100644 Binary files a/master/doctrees/functionlib/dsplib/dsplib_index.doctree and b/master/doctrees/functionlib/dsplib/dsplib_index.doctree differ diff --git a/master/doctrees/functionlib/dsplib/dynamic_quant.doctree b/master/doctrees/functionlib/dsplib/dynamic_quant.doctree new file mode 100644 index 00000000..760b2899 Binary files /dev/null and b/master/doctrees/functionlib/dsplib/dynamic_quant.doctree differ diff --git a/master/doctrees/functionlib/dsplib/dynamicquant.doctree b/master/doctrees/functionlib/dsplib/dynamicquant.doctree deleted file mode 100644 index 63b8b171..00000000 Binary files a/master/doctrees/functionlib/dsplib/dynamicquant.doctree and /dev/null differ diff --git a/master/html/_sources/functionlib/dsplib/dsplib_index.rst.txt b/master/html/_sources/functionlib/dsplib/dsplib_index.rst.txt index ea3725c5..e63cdd49 100644 --- a/master/html/_sources/functionlib/dsplib/dsplib_index.rst.txt +++ b/master/html/_sources/functionlib/dsplib/dsplib_index.rst.txt @@ -61,7 +61,7 @@ DSP Library C API Reference divgrad dropout dropoutgrad - dynamicquant + dynamic_quant eltwise elu embeddinglookup diff --git a/master/html/_sources/functionlib/dsplib/dynamic_quant.rst.txt b/master/html/_sources/functionlib/dsplib/dynamic_quant.rst.txt new file mode 100644 index 00000000..f5d9f229 --- /dev/null +++ b/master/html/_sources/functionlib/dsplib/dynamic_quant.rst.txt @@ -0,0 +1,91 @@ +DynamicQuant +================= + +将浮点输入张量按给定的 scale 和 zero point 量化为 INT8 输出张量。 + +.. math:: + + q_i = \mathrm{clip}\left( \mathrm{round}\left( x_i \times \frac{1}{scale} + zp \right), -128, 127 \right) + +其中: + +- :math:`x_i` 为输入浮点值 +- :math:`scale` 为量化比例因子 +- :math:`zp` 为零点(zero point) +- 当输入为 :math:`+\infty` 时,输出饱和到 127 +- 当输入为 :math:`-\infty` 时,输出饱和到 -128 + +输入: + - **real_values** - 输入浮点数据地址。 + - **quant_values** - 输出 INT8 量化结果地址。 + - **scale** - 量化比例因子(标量)。 + - **zp** - 量化零点(标量,int32 类型)。 + - **size** - 输入元素总数。 + - **min_value** - 量化下界(通常为 -128)。 + - **max_value** - 量化上界(通常为 127)。 + - **core_mask** - 核掩码(仅适用于共享存储版本)。 + +输出: + - **quant_values** - 量化后的 INT8 结果。 + +支持平台: + ``FT78NE`` + ``MT7004`` + +.. note:: + - FT78NE 支持 fp32 → int8 + - MT7004 支持 fp32, fp16 → int8 + - 量化结果被限制在 ``[min_value, max_value]`` 范围内(通常为 ``[-128, 127]``) + +**共享存储版本:** + +.. c:function:: void fp_dynamic_quant_s(float* real_values, int8_t* quant_values, float scale, int32_t zp, int size, int32_t min_value, int32_t max_value, int core_mask) +.. c:function:: void hp_dynamic_quant_s(half* real_values, int8_t* quant_values, float scale, int32_t zp, int size, int32_t min_value, int32_t max_value, int core_mask) + +**C调用示例:** + +.. code-block:: c + :linenos: + :emphasize-lines: 13 + + #include + + int main(int argc, char* argv[]) { + float *input = (float *)0x81000000; + int8_t *output = (int8_t *)0x82000000; + float scale = 0.1f; + int32_t zp = 0; + int size = 1024; + int32_t min_value = -128; + int32_t max_value = 127; + int core_mask = 0xff; + + fp_dynamic_quant_s(input, output, scale, zp, size, min_value, max_value, core_mask); + return 0; + } + +**私有存储版本:** + +.. c:function:: void fp_dynamic_quant_p(float* real_values, int8_t* quant_values, float scale, int32_t zp, int size, int32_t min_value, int32_t max_value) +.. c:function:: void hp_dynamic_quant_p(half* real_values, int8_t* quant_values, float scale, int32_t zp, int size, int32_t min_value, int32_t max_value) + +**C调用示例:** + +.. code-block:: c + :linenos: + :emphasize-lines: 12 + + #include + + int main(int argc, char* argv[]) { + float *input = (float *)0x10010000; + int8_t *output = (int8_t *)0x10020000; + float scale = 0.1f; + int32_t zp = 0; + int size = 1024; + int32_t min_value = -128; + int32_t max_value = 127; + + fp_dynamic_quant_p(input, output, scale, zp, size, min_value, max_value); + return 0; + } diff --git a/master/html/_sources/functionlib/dsplib/dynamicquant.rst.txt b/master/html/_sources/functionlib/dsplib/dynamicquant.rst.txt deleted file mode 100644 index e700a461..00000000 --- a/master/html/_sources/functionlib/dsplib/dynamicquant.rst.txt +++ /dev/null @@ -1,138 +0,0 @@ -DynamicQuant -================= - -将 FP32 输入张量按给定的 scale 和 zero point(zp)动态量化为 INT8 输出张量。 -支持按整张量量化或按指定轴分段量化(per-axis dynamic quantization)。 - -.. math:: - - q_i = \mathrm{clip}\left( \mathrm{round}\left( \frac{x_i}{scale} + zp \right), q_{min}, q_{max} \right) - -其中: - -- :math:`x_i` 为输入浮点值 -- :math:`scale` 为量化比例因子 -- :math:`zp` 为零点(zero point) -- :math:`q_{min} = -128` -- :math:`q_{max} = 127` - -当输入为 :math:`+\infty` 或 :math:`-\infty` 时,输出分别饱和到最大或最小量化值。 - ---- - -输入: - - **real_values** - 输入 FP32 数据地址 - - **element_num** - 输入元素总数 - - **scale** - 量化 scale 数组地址 - - **zp** - 量化 zero point 数组地址 - - **segment_num** - 分段数量(用于按轴量化) - - **axis_num** - 量化轴标识 - - ``0``:整张量量化(per-tensor) - - ``!=0``:按轴分段量化(per-axis) - -输出: - - **quant_values** - 输出 INT8 量化结果地址 - ---- - -支持平台: - ``FT78NE`` - ``MT7004`` - ---- - -.. note:: - - 当前算子仅支持 **FP32\Fp16 → INT8** 的动态量化 - - 当 ``axis_num = 0`` 时,仅使用 ``scale[0]`` 与 ``zp[0]`` 进行整张量量化 - - 当 ``axis_num != 0`` 时,输入按 ``segment_num`` 进行分段,每段使用对应的 ``scale[i]`` 与 ``zp[i]`` - - 分段大小通过 ``UP_DIV(element_num, segment_num)`` 计算,最后一段自动处理剩余元素 - - 量化结果会被限制在 ``[-128, 127]`` 范围内 - ---- - -**私有存储版本:** - -.. c:function:: void fp_QuantData_p(float* real_values, int8_t* quant_values, int element_num, float* scale, int* zp, int segment_num, int axis_num) -.. c:function:: void hp_QuantData_p(half* real_values, half* quant_values, int element_num, half* scale, int* zp, int segment_num, int axis_num) - ---- - -**C调用示例:** - - .. code-block:: c - :linenos: - :emphasize-lines: 11 - - #include - #include - - int main(int argc, char* argv[]) { - float *input = (float *)0x10000000; // FP32 输入 - int8_t *output = (int8_t *)0x10004000; // INT8 输出 - float scale[4] = {0.1f, 0.12f, 0.11f, 0.09f}; - int zp[4] = {0, 0, 0, 0}; - int element_num = 1024; - int segment_num = 4; - int axis_num = 1; - - fp_QuantData_p(input, output, element_num, - scale, zp, segment_num, axis_num); - - return 0; - } - ---- - -**共享存储版本:** - -.. c:function:: void fp_QuantData_s(float* real_values, int8_t* quant_values, int element_num, float* scale, int* zp, int segment_num, int axis_num, int core_mask) -.. c:function:: void hp_QuantData_s(half* real_values, half* quant_values, int element_num, half* scale, int* zp, int segment_num, int axis_num, int core_mask) - ---- - -**C调用示例:** - - .. code-block:: c - :linenos: - :emphasize-lines: 11 - - #include - #include - - int main(int argc, char* argv[]) { - float *input = (float *)0x10000000; // FP32 输入 - int8_t *output = (int8_t *)0x10004000; // INT8 输出 - float scale[4] = {0.1f, 0.12f, 0.11f, 0.09f}; - int zp[4] = {0, 0, 0, 0}; - int element_num = 1024; - int segment_num = 4; - int axis_num = 1, core_mask = 0xff; - - fp_QuantData_s(input, output, element_num, - scale, zp, segment_num, axis_num, core_mask); - - return 0; - } - ---- - -**实现说明:** - -- 当 ``axis_num == 0`` 时: - - - 对整个输入数组执行一次统一量化 - - 等价于 per-tensor quantization - -- 当 ``axis_num != 0`` 时: - - - 输入数据按 ``segment_num`` 均分为多个分段 - - 每个分段使用独立的 ``scale[i]`` 与 ``zp[i]`` - - 等价于 per-axis dynamic quantization - -- 核心量化过程由 ``DoQuantizeFp32ToInt8`` 完成,包括: - - - 反 scale 计算 - - 四舍五入 - - 饱和裁剪 - - INF 特殊值处理 - diff --git a/master/html/functionlib/dsplib/abs.html b/master/html/functionlib/dsplib/abs.html index 9fc03386..9e7a69d6 100644 --- a/master/html/functionlib/dsplib/abs.html +++ b/master/html/functionlib/dsplib/abs.html @@ -60,7 +60,7 @@
  • ActivationGrad
  • Adam
  • AdamWeightDecay
  • -
  • Adder
  • +
  • AdderFusion
  • AddFusion
  • Addgrad
  • AddN
  • @@ -109,7 +109,7 @@
  • Divgrad
  • Dropout
  • Dropoutgrad
  • -
  • DynamicQuant
  • +
  • DynamicQuant
  • Eltwise
  • Elu
  • EmbeddingLookup
  • diff --git a/master/html/functionlib/dsplib/abs_grad.html b/master/html/functionlib/dsplib/abs_grad.html index 4c879eba..e94e3bf3 100644 --- a/master/html/functionlib/dsplib/abs_grad.html +++ b/master/html/functionlib/dsplib/abs_grad.html @@ -60,7 +60,7 @@
  • ActivationGrad
  • Adam
  • AdamWeightDecay
  • -
  • Adder
  • +
  • AdderFusion
  • AddFusion
  • Addgrad
  • AddN
  • @@ -109,7 +109,7 @@
  • Divgrad
  • Dropout
  • Dropoutgrad
  • -
  • DynamicQuant
  • +
  • DynamicQuant
  • Eltwise
  • Elu
  • EmbeddingLookup
  • diff --git a/master/html/functionlib/dsplib/activation.html b/master/html/functionlib/dsplib/activation.html index 302aa80d..478b9344 100644 --- a/master/html/functionlib/dsplib/activation.html +++ b/master/html/functionlib/dsplib/activation.html @@ -60,7 +60,7 @@
  • ActivationGrad
  • Adam
  • AdamWeightDecay
  • -
  • Adder
  • +
  • AdderFusion
  • AddFusion
  • Addgrad
  • AddN
  • @@ -109,7 +109,7 @@
  • Divgrad
  • Dropout
  • Dropoutgrad
  • -
  • DynamicQuant
  • +
  • DynamicQuant
  • Eltwise
  • Elu
  • EmbeddingLookup
  • diff --git a/master/html/functionlib/dsplib/activation_grad.html b/master/html/functionlib/dsplib/activation_grad.html index 53d0d61f..8c0190b0 100644 --- a/master/html/functionlib/dsplib/activation_grad.html +++ b/master/html/functionlib/dsplib/activation_grad.html @@ -60,7 +60,7 @@
  • ActivationGrad
  • Adam
  • AdamWeightDecay
  • -
  • Adder
  • +
  • AdderFusion
  • AddFusion
  • Addgrad
  • AddN
  • @@ -109,7 +109,7 @@
  • Divgrad
  • Dropout
  • Dropoutgrad
  • -
  • DynamicQuant
  • +
  • DynamicQuant
  • Eltwise
  • Elu
  • EmbeddingLookup
  • diff --git a/master/html/functionlib/dsplib/adam.html b/master/html/functionlib/dsplib/adam.html index b3dffc09..7b11dfbc 100644 --- a/master/html/functionlib/dsplib/adam.html +++ b/master/html/functionlib/dsplib/adam.html @@ -60,7 +60,7 @@
  • ActivationGrad
  • Adam
  • AdamWeightDecay
  • -
  • Adder
  • +
  • AdderFusion
  • AddFusion
  • Addgrad
  • AddN
  • @@ -109,7 +109,7 @@
  • Divgrad
  • Dropout
  • Dropoutgrad
  • -
  • DynamicQuant
  • +
  • DynamicQuant
  • Eltwise
  • Elu
  • EmbeddingLookup
  • diff --git a/master/html/functionlib/dsplib/adamweightdecay.html b/master/html/functionlib/dsplib/adamweightdecay.html index 7d3f0ba5..5def4e2c 100644 --- a/master/html/functionlib/dsplib/adamweightdecay.html +++ b/master/html/functionlib/dsplib/adamweightdecay.html @@ -24,7 +24,7 @@ - + @@ -60,7 +60,7 @@
  • ActivationGrad
  • Adam
  • AdamWeightDecay
  • -
  • Adder
  • +
  • AdderFusion
  • AddFusion
  • Addgrad
  • AddN
  • @@ -109,7 +109,7 @@
  • Divgrad
  • Dropout
  • Dropoutgrad
  • -
  • DynamicQuant
  • +
  • DynamicQuant
  • Eltwise
  • Elu
  • EmbeddingLookup
  • @@ -434,7 +434,7 @@ var_t &= var_{t-1} - lr \cdot (\hat{m}_t + decay \cdot var_{t-1})