详解pytorch动态量化

前言

想要读取动态量化后模型的int8分布,但是发现模型内部已经是float,很诧异。。

pytorch量化简介

在深度学习中,量化指的是使用更少的 bit 来存储原本以浮点数存储的 tensor,以及使用更少的 bit 来完成原本以浮点数完成的计算。这么做的好处主要有如下几点:

  • 更少的模型体积,接近 4 倍的减少;
  • 可以更快的计算,由于更少的内存访问和更快的 int8 计算,可以快 2~4 倍。

一个量化后的模型,其部分或者全部的 tensor 操作会使用 int 类型来计算,而不是使用量化之前的 float 类型。当然,量化还需要底层硬件支持,x86 CPU(支持AVX2)、ARM CPU、Google TPU、Nvidia Volta/Turing/Ampere、Qualcomm DSP 这些主流硬件都对量化提供了支持。

发展历程

PyTorch 1.1 : 开始添加 torch.qint8 dtype、torch.quantize_linear 转换函数来开始对量化提供有限的实验性支持。
PyTorch 1.3 : 开始正式支持量化,在可量化的 Tensor 之外,PyTorch 开始支持 CNN 中最常见的 operator 的量化操作,包括:

  1. Tensor 上的函数: view, clone, resize, slice, add, multiply, cat, mean, max, sort, topk;
  2. 常见的模块(在 torch.nn.quant

你可能感兴趣的:(神经网络压缩与加速,知识碎片,pytorch,深度学习,人工智能)