From 449c0c4b955683fd80e5c603757796fffca61fc8 Mon Sep 17 00:00:00 2001 From: zhanganduo Date: Fri, 8 Dec 2023 16:59:30 +0800 Subject: [PATCH 1/7] add doc --- docs/api/paddle/nn/Overview_cn.rst | 13 ++++++++ .../paddle/nn/quant/llm_int8_linear_cn.rst | 31 +++++++++++++++++ .../paddle/nn/quant/weight_only_linear_cn.rst | 33 +++++++++++++++++++ .../paddle/nn/quant/weight_quantize_cn.rst | 27 +++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 docs/api/paddle/nn/quant/llm_int8_linear_cn.rst create mode 100644 docs/api/paddle/nn/quant/weight_only_linear_cn.rst create mode 100644 docs/api/paddle/nn/quant/weight_quantize_cn.rst diff --git a/docs/api/paddle/nn/Overview_cn.rst b/docs/api/paddle/nn/Overview_cn.rst index c517e6607b9..542d63ae83b 100644 --- a/docs/api/paddle/nn/Overview_cn.rst +++ b/docs/api/paddle/nn/Overview_cn.rst @@ -31,6 +31,7 @@ paddle.nn 目录下包含飞桨框架支持的神经网络层和相关函数的 - :ref:`损失函数 ` - :ref:`公用方法 ` - :ref:`初始化相关 ` +- :ref:`量化压缩 ` @@ -551,3 +552,15 @@ Embedding 相关函数 " :ref:`paddle.nn.initializer.Uniform ` ", "随机均匀分布初始化函数" " :ref:`paddle.nn.initializer.XavierNormal ` ", "实现 Xavier 权重初始化方法( Xavier weight initializer)" " :ref:`paddle.nn.initializer.XavierUniform ` ", "实现 Xavier 权重初始化方法( Xavier weight initializer)" + +.. _about_quantization: + +量化压缩 +::::::::::::::::::::::: + +.. csv-table:: + :header: "API 名称", "API 功能" + + " :ref:`paddle.nn.quant.llm_int8_linear ` ", "使用 int8 量化压缩的线性层" + " :ref:`paddle.nn.quant.weight_only_linear ` ", "使用自定义的类型进行模型的量化压缩" + " :ref:`paddle.nn.quant.weight_quantize ` ", "weight_only 和 llm.int8 权重的量化函数" diff --git a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst new file mode 100644 index 00000000000..fc52dfa8703 --- /dev/null +++ b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst @@ -0,0 +1,31 @@ +.. _cn_api_paddle_nn_quant_llm_int8_linear: + +llm_int8_linear +------------------------------- + +.. py:function:: paddle.nn.quant.llm_int8_linear(x, weight, bias=None, weight_scale=None, threshold=6.0) + +应用两个张量的矩阵乘法。若提供了偏置,则进行偏置加法。 + +此方法要求 CUDA 版本不低于 11.2。 + +参数 +:::::::::::: + - **x** (Tensor) - 第一个输入张量,将被乘以,数据类型为 float16 或 bfloat16。 + - **weight** (Tensor) - 第二个输入张量,将被乘以。其秩必须为 2。 + - **bias** (Tensor|None) - 输入的偏置张量。如果为 None,则不执行偏置加法。否则,偏置将被加到矩阵乘法结果上。 + - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于去量化。其秩必须为 1。 + - **threshold** (float) - 激活中离群值的最小值,离群值的通道将应用与 x.dtype 的乘法。 + +返回 +:::::::::::: + - Tensor:输出张量,其数据类型与 x 相同。 + +返回类型 +:::::::::::: +Tensor + +代码示例: +:::::::::: + +COPY-FROM: paddle.nn.quant.llm_int8_linear diff --git a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst new file mode 100644 index 00000000000..af8aebd1dce --- /dev/null +++ b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst @@ -0,0 +1,33 @@ +.. _cn_api_paddle_nn_quant_weight_only_linear: + +weight_only_linear +------------------------------- + +.. py:function:: paddle.nn.quant.weight_only_linear(x, weight, bias=None, weight_scale=None, weight_dtype='int8', arch=None) + +应用两个张量的矩阵乘法。若提供了偏置,则进行偏置加法。 + +此方法要求 CUDA 版本不低于 11.2。 + +参数 +:::::::::::: + - **x** (Tensor) - 第一个输入张量,将被乘以,数据类型为 float16 或 bfloat16。 + - **weight** (Tensor) - 第二个输入张量,将被乘以。其秩必须为 2。 + - **bias** (Tensor|None) - 输入的偏置张量。如果为 None,则不执行偏置加法。否则,偏置将被加到矩阵乘法结果上。 + - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于去量化。其秩必须为 1。 + - **weight_dtype** (str) - 权重张量的数据类型,必须是 'int8', 'int4' 之一,默认为 'int8'。 + - **arch** (int) - 针对目标设备的计算架构。例如,A100 为 80,v100 为 70,如果您没有指定架构,我们将从您的设备获取架构,默认为 None。 + +返回 +:::::::::::: + - Tensor:输出张量,其数据类型与 x 相同。 + + +返回类型 +:::::::::::: +Tensor + +代码示例: +:::::::::: + +COPY-FROM: paddle.nn.quant.weight_only_linear diff --git a/docs/api/paddle/nn/quant/weight_quantize_cn.rst b/docs/api/paddle/nn/quant/weight_quantize_cn.rst new file mode 100644 index 00000000000..5df410a2058 --- /dev/null +++ b/docs/api/paddle/nn/quant/weight_quantize_cn.rst @@ -0,0 +1,27 @@ +.. _cn_api_paddle_nn_quant_weight_quantize: + +weight_quantize +------------------------------- +.. py:function:: paddle.nn.quant.weight_quantize(x, algo='weight_only_int8', arch=None) + +weight_only 和 llm.int8 权重的量化函数。 + +参数 +:::::::::::: + - **x** (Tensor) - 待量化的输入张量,数据类型为 float16 或 bfloat16。 + - **algo** (str) - 应用于 x 的算法,必须是 '`weight_only_int8`'、'`weight_only_int4`' 和 '`llm.int8`' 中的一个,默认为 '`weight_only_int8`'。 + - **arch** (int) - 针对目标设备的计算架构。例如,A100 为 80,v100 为 70,如果您没有指定架构,我们将从您的设备获取架构,默认为 None。 + +返回 +:::::::::::: + - **out** (Tensor) - 量化结果的张量,数据类型为 int8,形状为 x 的转置。 + - **scale** (Tensor) - 每个通道的比例张量,数据类型为 float32。 + +返回类型 +:::::::::::: +Tensor + +代码示例: +:::::::::: + +COPY-FROM: paddle.nn.quant.weight_quantize From f314206c0434fc2cbbbb2d73b97bffb528451214 Mon Sep 17 00:00:00 2001 From: Android zhang <53324261+zade23@users.noreply.github.com> Date: Mon, 8 Jan 2024 10:33:42 +0800 Subject: [PATCH 2/7] Update llm_int8_linear_cn.rst --- docs/api/paddle/nn/quant/llm_int8_linear_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst index fc52dfa8703..3ebe66d521e 100644 --- a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst +++ b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst @@ -14,7 +14,7 @@ llm_int8_linear - **x** (Tensor) - 第一个输入张量,将被乘以,数据类型为 float16 或 bfloat16。 - **weight** (Tensor) - 第二个输入张量,将被乘以。其秩必须为 2。 - **bias** (Tensor|None) - 输入的偏置张量。如果为 None,则不执行偏置加法。否则,偏置将被加到矩阵乘法结果上。 - - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于去量化。其秩必须为 1。 + - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于反量化。其秩必须为 1。 - **threshold** (float) - 激活中离群值的最小值,离群值的通道将应用与 x.dtype 的乘法。 返回 From 52e989d67dc1b265f334cd99b4422db9c2db1fe9 Mon Sep 17 00:00:00 2001 From: Android zhang <53324261+zade23@users.noreply.github.com> Date: Mon, 8 Jan 2024 10:39:20 +0800 Subject: [PATCH 3/7] Update llm_int8_linear_cn.rst --- docs/api/paddle/nn/quant/llm_int8_linear_cn.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst index 3ebe66d521e..de0f058fe07 100644 --- a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst +++ b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst @@ -7,6 +7,8 @@ llm_int8_linear 应用两个张量的矩阵乘法。若提供了偏置,则进行偏置加法。 +细节可参考论文 `LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale `_ 。 + 此方法要求 CUDA 版本不低于 11.2。 参数 From 5b0cc0cbca9a1f33778292c758b48e82b171b043 Mon Sep 17 00:00:00 2001 From: zhanganduo Date: Mon, 8 Jan 2024 10:59:06 +0800 Subject: [PATCH 4/7] fix cn_doc --- docs/api/paddle/nn/quant/llm_int8_linear_cn.rst | 4 +++- docs/api/paddle/nn/quant/weight_only_linear_cn.rst | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst index fc52dfa8703..de0f058fe07 100644 --- a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst +++ b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst @@ -7,6 +7,8 @@ llm_int8_linear 应用两个张量的矩阵乘法。若提供了偏置,则进行偏置加法。 +细节可参考论文 `LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale `_ 。 + 此方法要求 CUDA 版本不低于 11.2。 参数 @@ -14,7 +16,7 @@ llm_int8_linear - **x** (Tensor) - 第一个输入张量,将被乘以,数据类型为 float16 或 bfloat16。 - **weight** (Tensor) - 第二个输入张量,将被乘以。其秩必须为 2。 - **bias** (Tensor|None) - 输入的偏置张量。如果为 None,则不执行偏置加法。否则,偏置将被加到矩阵乘法结果上。 - - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于去量化。其秩必须为 1。 + - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于反量化。其秩必须为 1。 - **threshold** (float) - 激活中离群值的最小值,离群值的通道将应用与 x.dtype 的乘法。 返回 diff --git a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst index af8aebd1dce..a94f97fc7c8 100644 --- a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst +++ b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst @@ -14,7 +14,7 @@ weight_only_linear - **x** (Tensor) - 第一个输入张量,将被乘以,数据类型为 float16 或 bfloat16。 - **weight** (Tensor) - 第二个输入张量,将被乘以。其秩必须为 2。 - **bias** (Tensor|None) - 输入的偏置张量。如果为 None,则不执行偏置加法。否则,偏置将被加到矩阵乘法结果上。 - - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于去量化。其秩必须为 1。 + - **weight_scale** (Tensor|None) - 提供给权重的输入比例张量,用于反量化。其秩必须为 1。 - **weight_dtype** (str) - 权重张量的数据类型,必须是 'int8', 'int4' 之一,默认为 'int8'。 - **arch** (int) - 针对目标设备的计算架构。例如,A100 为 80,v100 为 70,如果您没有指定架构,我们将从您的设备获取架构,默认为 None。 From 9ccd90eeea003cdec436b99a26548201af90095a Mon Sep 17 00:00:00 2001 From: Android zhang <53324261+zade23@users.noreply.github.com> Date: Tue, 9 Jan 2024 17:31:36 +0800 Subject: [PATCH 5/7] Update docs/api/paddle/nn/quant/weight_only_linear_cn.rst Co-authored-by: ooo oo <106524776+ooooo-create@users.noreply.github.com> --- docs/api/paddle/nn/quant/weight_only_linear_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst index a94f97fc7c8..5384ad2f3d0 100644 --- a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst +++ b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst @@ -20,7 +20,7 @@ weight_only_linear 返回 :::::::::::: - - Tensor:输出张量,其数据类型与 x 相同。 + - ``Tensor``:输出张量,其数据类型与 x 相同。 返回类型 From 215e549315c62241a305e60fd7ac6a9e618f43f9 Mon Sep 17 00:00:00 2001 From: Android zhang <53324261+zade23@users.noreply.github.com> Date: Tue, 9 Jan 2024 17:31:42 +0800 Subject: [PATCH 6/7] Update docs/api/paddle/nn/quant/llm_int8_linear_cn.rst Co-authored-by: ooo oo <106524776+ooooo-create@users.noreply.github.com> --- docs/api/paddle/nn/quant/llm_int8_linear_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst index de0f058fe07..b67f9984a4e 100644 --- a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst +++ b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst @@ -21,7 +21,7 @@ llm_int8_linear 返回 :::::::::::: - - Tensor:输出张量,其数据类型与 x 相同。 + - ``Tensor``:输出张量,其数据类型与 x 相同。 返回类型 :::::::::::: From 306967d4d94b5beaa694c1ffb9472646637307c7 Mon Sep 17 00:00:00 2001 From: zhanganduo Date: Tue, 9 Jan 2024 17:39:18 +0800 Subject: [PATCH 7/7] fix subtitle --- docs/api/paddle/nn/quant/llm_int8_linear_cn.rst | 4 ---- docs/api/paddle/nn/quant/weight_only_linear_cn.rst | 5 ----- docs/api/paddle/nn/quant/weight_quantize_cn.rst | 4 ---- 3 files changed, 13 deletions(-) diff --git a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst index b67f9984a4e..36299085863 100644 --- a/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst +++ b/docs/api/paddle/nn/quant/llm_int8_linear_cn.rst @@ -23,10 +23,6 @@ llm_int8_linear :::::::::::: - ``Tensor``:输出张量,其数据类型与 x 相同。 -返回类型 -:::::::::::: -Tensor - 代码示例: :::::::::: diff --git a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst index 5384ad2f3d0..8a156888e38 100644 --- a/docs/api/paddle/nn/quant/weight_only_linear_cn.rst +++ b/docs/api/paddle/nn/quant/weight_only_linear_cn.rst @@ -22,11 +22,6 @@ weight_only_linear :::::::::::: - ``Tensor``:输出张量,其数据类型与 x 相同。 - -返回类型 -:::::::::::: -Tensor - 代码示例: :::::::::: diff --git a/docs/api/paddle/nn/quant/weight_quantize_cn.rst b/docs/api/paddle/nn/quant/weight_quantize_cn.rst index 5df410a2058..5e79dda5e1a 100644 --- a/docs/api/paddle/nn/quant/weight_quantize_cn.rst +++ b/docs/api/paddle/nn/quant/weight_quantize_cn.rst @@ -17,10 +17,6 @@ weight_only 和 llm.int8 权重的量化函数。 - **out** (Tensor) - 量化结果的张量,数据类型为 int8,形状为 x 的转置。 - **scale** (Tensor) - 每个通道的比例张量,数据类型为 float32。 -返回类型 -:::::::::::: -Tensor - 代码示例: ::::::::::