Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
pytorch-doc-zh
提交
37520233
P
pytorch-doc-zh
项目概览
OpenDocCN
/
pytorch-doc-zh
通知
120
Star
3932
Fork
992
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pytorch-doc-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
37520233
编写于
10月 19, 2021
作者:
片刻小哥哥
提交者:
GitHub
10月 19, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #563 from heloowird/patch-1
辛苦小哥哥, 一些翻译改正和优化
上级
3e1ff79b
ff101cc7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
19 deletion
+19
-19
docs/1.4/88.md
docs/1.4/88.md
+19
-19
未找到文件。
docs/1.4/88.md
浏览文件 @
37520233
...
@@ -4,37 +4,37 @@
...
@@ -4,37 +4,37 @@
## 量化导论
## 量化导论
量化是
指用于执行计算并以低于浮点精度的位宽存储张量的技术。 量化模型对张量使用整数而不是浮点值执行部分或全部运算。 这允许更紧凑的模型表示,并在许多硬件平台上使用高性能矢量化操作。 与典型的 FP32 型号相比,PyTorch 支持 INT8 量化,从而可将模型大小减少 4 倍,并将内存带宽要求减少 4 倍。 与 FP32 计算相比,对 INT8 计算的硬件支持
通常快 2 到 4 倍。 量化主要是一种加速推理的技术,并且量化算子仅支持前向传递。
量化是
一种以低于浮点精度执行运算和存储张量的技术。 量化后的模型使用整数而不是浮点值执行部分或全部张量运算。 这允许更紧凑的模型表示,并在许多硬件平台上使用高性能矢量化操作。 与典型的 FP32 模型相比,PyTorch 支持 INT8 量化,从而可将模型大小减少为原来的 1/4,并将内存占用减少了 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 的情况下,某些操作的执行效率较低)
*
具有 AVX2 支持或更高版本的 x86 CPU(在没有 AVX2 的情况下,某些操作的执行效率较低)
*
ARM CPU(通常在移动/嵌入式设备中找到)
*
ARM CPU(通常在移动/嵌入式设备中找到)
相应的实现
是根据 PyTorch 构建模式自动选择的
。
相应的实现
会自动根据 PyTorch 构建模式进行选择
。
注意
注意
PyTorch 1.3 尚未在 CUDA 上提供量化
的操作员实施
-这是未来工作的方向。 将模型移至 CPU,以测试量化功能。
PyTorch 1.3 尚未在 CUDA 上提供量化
运算的实现
-这是未来工作的方向。 将模型移至 CPU,以测试量化功能。
量化感知训练(通过
[
`FakeQuantize`
](
#torch.quantization.FakeQuantize
"torch.quantization.FakeQuantize"
)
)支持 CPU 和 CUDA。
量化感知训练(通过
[
`FakeQuantize`
](
#torch.quantization.FakeQuantize
"torch.quantization.FakeQuantize"
)
)支持 CPU 和 CUDA。
Note
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_qconfig('qnnpack')`
用于
后期训练
量化和
用于
训练后
量化和
`qconfig = torch.quantization.get_default_qat_qconfig('qnnpack')`
`qconfig = torch.quantization.get_default_qat_qconfig('qnnpack')`
用于量化
意识
训练。
用于量化
感知
训练。
另外,torch.backends.quantized.engine 参数应设置为与后端匹配。 为了使用 qnnpack 进行推理,将后端设置为 qnnpack,如下所示
另外,torch.backends.quantized.engine 参数应设置为与后端匹配。 为了使用 qnnpack 进行推理,将后端设置为 qnnpack,如下所示
...
@@ -52,7 +52,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
...
@@ -52,7 +52,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
为了在 PyTorch 中进行量化,我们需要能够在 Tensor 中表示量化数据。 量化张量允许存储量化数据(表示为 int8 / uint8 / int32)以及诸如 scale 和 zero_point 之类的量化参数。 量化张量除了允许以量化格式序列化数据外,还允许许多有用的操作使量化算术变得容易。
为了在 PyTorch 中进行量化,我们需要能够在 Tensor 中表示量化数据。 量化张量允许存储量化数据(表示为 int8 / uint8 / int32)以及诸如 scale 和 zero_point 之类的量化参数。 量化张量除了允许以量化格式序列化数据外,还允许许多有用的操作使量化算术变得容易。
##
经营
范围
##
操作
范围
量化张量支持常规全精度张量的有限数据处理方法子集。 (请参阅下面的列表)
量化张量支持常规全精度张量的有限数据处理方法子集。 (请参阅下面的列表)
...
@@ -71,7 +71,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
...
@@ -71,7 +71,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
另外,我们还支持与影响量化的常见融合模式相对应的融合版本:torch.nn.intrinsic.quantized。
另外,我们还支持与影响量化的常见融合模式相对应的融合版本:torch.nn.intrinsic.quantized。
对于量化
意识训练,我们在 torch.nn.qat 和 torch.nn.intrinsic.qat 支持支持量化意识
训练的模块
对于量化
感知训练,我们在 torch.nn.qat 和 torch.nn.intrinsic.qat 支持支持量化感知
训练的模块
当前的量化操作列表足以覆盖典型的 CNN 和 RNN 模型:
当前的量化操作列表足以覆盖典型的 CNN 和 RNN 模型:
...
@@ -197,7 +197,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
...
@@ -197,7 +197,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
### `torch.nn.qat`
### `torch.nn.qat`
量化
意识
训练的层次
量化
感知
训练的层次
*
[
`Linear`
](
#torch.nn.qat.Linear
"torch.nn.qat.Linear"
)
-线性(完全连接)层
*
[
`Linear`
](
#torch.nn.qat.Linear
"torch.nn.qat.Linear"
)
-线性(完全连接)层
...
@@ -219,7 +219,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
...
@@ -219,7 +219,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
* [`prepare()`](#torch.quantization.prepare "torch.quantization.prepare") -准备模型的副本以进行量化
* [`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_") -通过模块层次结构传播量化配置,并将其分配给每个叶模块
* [`propagate_qconfig_()`](#torch.quantization.propagate_qconfig_ "torch.quantization.propagate_qconfig_") -通过模块层次结构传播量化配置,并将其分配给每个叶模块
...
@@ -227,7 +227,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
...
@@ -227,7 +227,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
* [`quantize_dynamic()`](#torch.quantization.quantize_dynamic "torch.quantization.quantize_dynamic") -将 float 模块转换为动态量化版本
* [`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") -交换模块及其量化的对应对象(如果量化并且具有观察者)
* [`swap_module()`](#torch.quantization.swap_module "torch.quantization.swap_module") -交换模块及其量化的对应对象(如果量化并且具有观察者)
...
@@ -377,7 +377,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
...
@@ -377,7 +377,7 @@ PyTorch 支持每个张量和每个通道非对称线性量化。 每个张量
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 是典型的用例。 进行训练后量化的一般过程是:
...
@@ -395,7 +395,7 @@ PyTorch 提供了三种量化模型的方法。
...
@@ -395,7 +395,7 @@ PyTorch 提供了三种量化模型的方法。
请参阅[量化教程](https://pytorch.org/tutorials/#quantization-experimental)
请参阅[量化教程](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)相同。
1. 步骤(1)和(2)相同。
...
@@ -499,7 +499,7 @@ Parameters
...
@@ -499,7 +499,7 @@ Parameters
torch.quantization.quantize_qat(model, run_fn, run_args, inplace=False)¶
torch.quantization.quantize_qat(model, run_fn, run_args, inplace=False)¶
```
```
进行量化
意识
训练并输出量化模型
进行量化
感知
训练并输出量化模型
Parameters
Parameters
...
@@ -519,7 +519,7 @@ Quantized model.
...
@@ -519,7 +519,7 @@ Quantized model.
torch.quantization.prepare(model, qconfig_dict=None, inplace=False)¶
torch.quantization.prepare(model, qconfig_dict=None, inplace=False)¶
```
```
为量化校准或量化
意识
训练准备模型的副本。
为量化校准或量化
感知
训练准备模型的副本。
量化配置可以作为 <cite>qconfig_dict</cite> 传递,也可以抢先分配给 <cite>.qconfig</cite> 属性中的各个子模块。
量化配置可以作为 <cite>qconfig_dict</cite> 传递,也可以抢先分配给 <cite>.qconfig</cite> 属性中的各个子模块。
...
@@ -539,7 +539,7 @@ Parameters
...
@@ -539,7 +539,7 @@ Parameters
torch.quantization.prepare_qat(model, mapping=None, inplace=False)¶
torch.quantization.prepare_qat(model, mapping=None, inplace=False)¶
```
```
为量化校准或量化
意识
训练准备模型的副本,并将其转换为量化版本。
为量化校准或量化
感知
训练准备模型的副本,并将其转换为量化版本。
量化配置可以作为 <cite>qconfig_dict</cite> 传递,也可以抢先分配给 <cite>.qconfig</cite> 属性中的各个子模块。
量化配置可以作为 <cite>qconfig_dict</cite> 传递,也可以抢先分配给 <cite>.qconfig</cite> 属性中的各个子模块。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录