From 17b9ac4931d188633e1f0b5ab0e99626c7eeb695 Mon Sep 17 00:00:00 2001 From: heloowird Date: Fri, 30 Jul 2021 22:09:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8F=E5=8C=96=E6=84=8F=E8=AF=86=E8=AE=AD?= =?UTF-8?q?=E7=BB=83->=E9=87=8F=E5=8C=96=E6=84=9F=E7=9F=A5=E8=AE=AD?= =?UTF-8?q?=E7=BB=83/=E4=BB=A5=E5=8F=8A=E5=85=B6=E4=BB=96=E6=9B=B4?= =?UTF-8?q?=E7=AC=A6=E5=90=88=E4=B8=AD=E6=96=87=E4=B9=A0=E6=83=AF=E7=9A=84?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/1.4/88.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/1.4/88.md b/docs/1.4/88.md index 215c3f21..c83b8e24 100644 --- a/docs/1.4/88.md +++ b/docs/1.4/88.md @@ -4,37 +4,37 @@ ## 量化导论 -量化是指用于执行计算并以低于浮点精度的位宽存储张量的技术。 量化模型对张量使用整数而不是浮点值执行部分或全部运算。 这允许更紧凑的模型表示,并在许多硬件平台上使用高性能矢量化操作。 与典型的 FP32 型号相比,PyTorch 支持 INT8 量化,从而可将模型大小减少 4 倍,并将内存带宽要求减少 4 倍。 与 FP32 计算相比,对 INT8 计算的硬件支持通常快 2 到 4 倍。 量化主要是一种加速推理的技术,并且量化算子仅支持前向传递。 +量化是一种以低于浮点精度执行运算和存储张量的技术。 量化后的模型使用整数而不是浮点值执行部分或全部张量运算。 这允许更紧凑的模型表示,并在许多硬件平台上使用高性能矢量化操作。 与典型的 FP32 模型相比,PyTorch 支持 INT8 量化,从而可将模型大小减少 3 倍,并将内存占用减少 3 倍。 与 FP32 计算相比,在支持 INT8的硬件上计算通常快 2 到 4 倍。 量化主要是一种加速推理的技术,并且量化算子仅支持前向传递。 -PyTorch 支持多种方法来量化深度学习模型。 在大多数情况下,该模型在 FP32 中训练,然后将模型转换为 INT8。 此外,PyTorch 还支持量化意识训练,该训练使用伪量化模块对前向和后向传递中的量化误差进行建模。 注意,整个计算是在浮点数中进行的。 在量化意识训练结束时,PyTorch 提供转换功能,将训练后的模型转换为较低的精度。 +PyTorch 支持多种方法来量化深度学习模型。 在大多数情况下,模型通常以 FP32 进行训练,然后被转换为 INT8。 此外,PyTorch 还支持量化感知训练,该训练使用伪量化模块对前向和后向传递中的量化误差进行建模。 注意,整个计算是以浮点数进行的。 在量化感知训练结束时,PyTorch 提供转换功能,将训练后的模型转换为较低的精度。 -在较低级别,PyTorch 提供了一种表示量化张量并对其执行操作的方法。 它们可用于直接构建以较低的精度执行全部或部分计算的模型。 提供了更高级别的 API,这些 API 合并了将 FP32 模型转换为较低精度并降低精度损失的典型工作流程。 +在底层,PyTorch 提供了一种量化张量表示及运算的方法。 它们可用于直接构建以较低的精度执行全部或部分计算的模型。 更高级别的 API 提供了以最低精度损失地将 FP32 模型转换为较低精度的典型工作流程。 -如今,PyTorch 支持以下后端以有效地运行量化运算符: +如今,PyTorch 支持以下能够有效地运行量化运算符的后端: * 具有 AVX2 支持或更高版本的 x86 CPU(在没有 AVX2 的情况下,某些操作的执行效率较低) * ARM CPU(通常在移动/嵌入式设备中找到) -相应的实现是根据 PyTorch 构建模式自动选择的。 +相应的实现会自动根据 PyTorch 构建模式进行选择。 注意 -PyTorch 1.3 尚未在 CUDA 上提供量化的操作员实施-这是未来工作的方向。 将模型移至 CPU,以测试量化功能。 +PyTorch 1.3 尚未在 CUDA 上提供量化运算的实现-这是未来工作的方向。 将模型移至 CPU,以测试量化功能。 量化感知训练(通过 [`FakeQuantize`](#torch.quantization.FakeQuantize "torch.quantization.FakeQuantize"))支持 CPU 和 CUDA。 Note -在准备量化模型时,有必要确保 qconfig 和用于量化计算的引擎与将在其上执行模型的后端匹配。 量化目前支持两个后端:fbgemm(用于 x86, [https://github.com/pytorch/FBGEMM](https://github.com/pytorch/FBGEMM))和 qnnpack(用于 ARM QNNPACK 库 [https://github.com/pytorch/QNNPACK](https://github.com/pytorch/QNNPACK))。 例如,如果您对量化要在 ARM 上运行的模型感兴趣,建议通过调用以下命令设置 qconfig: +在准备量化模型时,有必要确保 qconfig 和执行量化运算的引擎与将在其上执行模型的后端匹配。 量化目前支持两个后端:fbgemm(用于 x86, [https://github.com/pytorch/FBGEMM](https://github.com/pytorch/FBGEMM))和 qnnpack(用于 ARM QNNPACK 库 [https://github.com/pytorch/QNNPACK](https://github.com/pytorch/QNNPACK))。 例如,如果您对量化要在 ARM 上运行的模型感兴趣,建议通过调用以下命令设置 qconfig: `qconfig = torch.quantization.get_default_qconfig('qnnpack')` -用于后期训练量化和 +用于训练后量化和 `qconfig = torch.quantization.get_default_qat_qconfig('qnnpack')` -用于量化意识训练。 +用于量化感知训练。 另外,torch.backends.quantized.engine 参数应设置为与后端匹配。 为了使用 qnnpack 进行推理,将后端设置为 qnnpack,如下所示 @@ -52,7 +52,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量 为了在 PyTorch 中进行量化,我们需要能够在 Tensor 中表示量化数据。 量化张量允许存储量化数据(表示为 int8 / uint8 / int32)以及诸如 scale 和 zero_point 之类的量化参数。 量化张量除了允许以量化格式序列化数据外,还允许许多有用的操作使量化算术变得容易。 -## 经营范围 +## 操作范围 量化张量支持常规全精度张量的有限数据处理方法子集。 (请参阅下面的列表) @@ -71,7 +71,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量 另外,我们还支持与影响量化的常见融合模式相对应的融合版本:torch.nn.intrinsic.quantized。 -对于量化意识训练,我们在 torch.nn.qat 和 torch.nn.intrinsic.qat 支持支持量化意识训练的模块 +对于量化感知训练,我们在 torch.nn.qat 和 torch.nn.intrinsic.qat 支持支持量化感知训练的模块 当前的量化操作列表足以覆盖典型的 CNN 和 RNN 模型: @@ -197,7 +197,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量 ### `torch.nn.qat` -量化意识训练的层次 +量化感知训练的层次 * [`Linear`](#torch.nn.qat.Linear "torch.nn.qat.Linear") -线性(完全连接)层 @@ -219,7 +219,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量 * [`prepare()`](#torch.quantization.prepare "torch.quantization.prepare") -准备模型的副本以进行量化 - * [`prepare_qat()`](#torch.quantization.prepare_qat "torch.quantization.prepare_qat") -准备用于量化意识训练的模型副本 + * [`prepare_qat()`](#torch.quantization.prepare_qat "torch.quantization.prepare_qat") -准备用于量化感知训练的模型副本 * [`propagate_qconfig_()`](#torch.quantization.propagate_qconfig_ "torch.quantization.propagate_qconfig_") -通过模块层次结构传播量化配置,并将其分配给每个叶模块 @@ -227,7 +227,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量 * [`quantize_dynamic()`](#torch.quantization.quantize_dynamic "torch.quantization.quantize_dynamic") -将 float 模块转换为动态量化版本 - * [`quantize_qat()`](#torch.quantization.quantize_qat "torch.quantization.quantize_qat") -将浮点模块转换为用于量化意识训练的量化版本 + * [`quantize_qat()`](#torch.quantization.quantize_qat "torch.quantization.quantize_qat") -将浮点模块转换为用于量化感知训练的量化版本 * [`swap_module()`](#torch.quantization.swap_module "torch.quantization.swap_module") -交换模块及其量化的对应对象(如果量化并且具有观察者) @@ -377,9 +377,9 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量 PyTorch 提供了三种量化模型的方法。 -1. 训练后动态量化:这是最简单的量化形式,其中权重被提前量化,而激活在推理过程中被动态量化。 这用于以下情况:模型执行时间主要由从内存中加载权重而不是计算矩阵乘法来决定。 对于小批量的 LSTM 和 Transformer 类型的模型,这是正确的。 只需调用一次 [`torch.quantization.quantize_dynamic()`](#torch.quantization.quantize_dynamic "torch.quantization.quantize_dynamic") ,即可将动态量化应用于整个模型。 请参阅[量化教程](https://pytorch.org/tutorials/#quantization-experimental) +1. 训练后动态量化:这是最简单的量化形式,其中权重被提前量化,而激活函数在推理过程中被动态量化。 这用于以下情况:模型执行时间主要由从内存中加载权重而不是计算矩阵乘法来决定。 对于小批量的 LSTM 和 Transformer 类型的模型,这是正确的。 只需调用一次 [`torch.quantization.quantize_dynamic()`](#torch.quantization.quantize_dynamic "torch.quantization.quantize_dynamic") ,即可将动态量化应用于整个模型。 请参阅[量化教程](https://pytorch.org/tutorials/#quantization-experimental) -2. 训练后静态量化:这是最常用的量化形式,其中权重是提前量化的,并且基于观察校准过程中模型的行为来预先计算激活张量的比例因子和偏差。 训练后量化通常是在内存带宽和计算节省都很重要的情况下进行的,而 CNN 是典型的用例。 进行训练后量化的一般过程是: +2. 训练后静态量化:这是最常用的量化形式,其中权重是提前量化的,并且基于观察校准过程中模型的行为来预先计算激张量的比例因子和偏差。 训练后量化通常是在内存带宽和计算节省都很重要的情况下进行的,而 CNN 是典型的用例。 进行训练后量化的一般过程是: 1. 准备模型: 通过添加 QuantStub 和 DeQuantStub 模块,指定在何处明确量化激活和量化数量。 b。 确保不重复使用模块。 C。 将所有需要重新量化的操作转换为模块 @@ -395,7 +395,7 @@ PyTorch 提供了三种量化模型的方法。 请参阅[量化教程](https://pytorch.org/tutorials/#quantization-experimental) -3. 量化意识训练:在极少数情况下,训练后量化不能提供足够的准确性,可以使用 [`torch.quantization.FakeQuantize`](#torch.quantization.FakeQuantize "torch.quantization.FakeQuantize") 通过模拟量化来进行训练。 计算将在 FP32 中进行,但将值取整并四舍五入以模拟 INT8 量化的效果。 步骤的顺序非常相似。 +3. 量化感知训练:在极少数情况下,训练后量化不能提供足够的准确性,可以使用 [`torch.quantization.FakeQuantize`](#torch.quantization.FakeQuantize "torch.quantization.FakeQuantize") 通过模拟量化来进行训练。 计算将在 FP32 中进行,但将值取整并四舍五入以模拟 INT8 量化的效果。 步骤的顺序非常相似。 1. 步骤(1)和(2)相同。 @@ -499,7 +499,7 @@ Parameters torch.quantization.quantize_qat(model, run_fn, run_args, inplace=False)¶ ``` -进行量化意识训练并输出量化模型 +进行量化感知训练并输出量化模型 Parameters @@ -519,7 +519,7 @@ Quantized model. torch.quantization.prepare(model, qconfig_dict=None, inplace=False)¶ ``` -为量化校准或量化意识训练准备模型的副本。 +为量化校准或量化训练准备模型的副本。 量化配置可以作为 <cite>qconfig_dict</cite> 传递,也可以抢先分配给 <cite>.qconfig</cite> 属性中的各个子模块。 @@ -539,7 +539,7 @@ Parameters torch.quantization.prepare_qat(model, mapping=None, inplace=False)¶ ``` -为量化校准或量化意识训练准备模型的副本,并将其转换为量化版本。 +为量化校准或量化感知训练准备模型的副本,并将其转换为量化版本。 量化配置可以作为 <cite>qconfig_dict</cite> 传递,也可以抢先分配给 <cite>.qconfig</cite> 属性中的各个子模块。 -- GitLab