2022/12/27 12:38:09
使用TPU-MLIR进行模型转换的时候我们会在各个阶段对比模型每一层输出的相似度,以确保模型转换的正确性,同时也能够在适配过程中更方便地定位问题来源。 但我们并不知道转换后的模型精度如何,特别是INT8量化后的模型输出,往往与原模型输出存在较大的区别(当然这个区别是在可接受的范围内的),光靠对比输出的相似度我们并不能看出INT8模型的表现究竟怎么样。所以,TPU-MLIR也提供了精度验证的接口,来检验转换后的模型表现。 在进行精度验证前,首先我们需要准备好用于验证的数据集,因为TPU-MLIR里没有自带完整的测试集,所以用于精度验证的数据集需要大家自行下载,对于分类网络主要使用的是IMAGEN ...
2022/12/14 18:55:32
在对激活进行伪量化前先将激活截断在(0,1)之间, 这样的做法是基于一些经典的网络结构中,比如AlexNet与RestNet中,大部分的激活都会落在这个范围里的。 对于weight,则是先通过这样的一个非线性函数对weight进行映射,tanh(w)将weight的值域缩放到-1到+1之间,再除以2倍的tanh(w)绝对最大值加上1/2最终weight被映射到了0到1之间,再对其进行量化与反量化,再将输出结果通过乘2减1仿射变换到-1到1之间。 这里的quant与dequant操作在原论文中是被表示为一个quantize_k的操作,k指的是k位的量化,其实本质上就和我们之前提到的量 ...
2022/12/14 18:52:59
Hello大家好,在之前的视频中我们的讲解主要集中在训练后量化,也就是PTQ,那么这期视频我们就再来讲一下另一种主要的量化类型,量化感知训练,我们暂且不会涉及到QAT在TPU-MLIR中的应用,只是先停留在理论层面进行一个介绍。 我们在学习PTQ的时候知道了量化其实就是一个寻找合适的量化参数,将高位数据流映射为低位数据流的过程,实现模型轻量化并且提高推理效率,但在这个过程中模型的精度不可避免地会下降。 造成精度下降的原因有很多,其中主要有: 量化误差的引入,就像右边这张信号图所示,我们在量化时做的取整操作其实就是用有限的离散取值去近似无限的连续取值,会不可避免的导致量化后的信号与量化前的信号 ...
2022/12/07 10:36:03
什么是量化#我们在前期的视频中提到过,随着深度学习的发展,为了达到更好的效果,神经网络的规模越来越大,所需的内存与计算量也就越大,这导致模型部署的难度也随之增加。 所以为了实现大型模型的部署,除了使用高性能的专用芯片外,另一个方式就是进行模型压缩,而量化就是模型压缩的一种方式,使模型实现轻量化并一定程度上提升模型在硬件上的推理效率。 量化的本质其实就是将权重与激活值由 32 位浮点型表示的范围很大的数值映射到由较低位固定点表示的小范围内,例如比较广泛应用的 8 位整形 int8。 那么这样的做法为什么有效呢?除了最直观的降低权重所占的内存外,主要还是跟模型在硬件上的推理过程有关。 为什么要量 ...
2022/12/07 10:31:44
TPU-MLIR 的整体架构,就是将原始模型转为芯片无关层的 mlir 模型,经过图优化后再下沉到芯片相关层,然后在芯片相关层里经过一系列的优化操作最终生成能够在 tpu 上运行的二进制模型。 而前端转换在整个架构里面承担的就是初步的模型转换工作,也就是将原始模型转为 Top 层模型,但这个过程并不包含算子优化部分,所以它其实就是照本宣科地按照原模型的结构来生成 MLIR 文件。最终我们会得到一个初始的 mlir 文件以及存放模型权重的 npz 文件。 在 TPU-MLIR 中,整个前端的工作流程其实可以分为前提,输入,初始化 Converter,生成 mlir 文本,输出结果这五个步骤。 ...