首页 > 编程知识 正文

显存 型号,显存性能指标

时间:2023-05-05 18:41:22 阅读:249872 作者:923

模型所占的显存无非是这两种: 模型权重参数模型所储存的中间变量

FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。模型评价

        评价一个模型时,首先看的应该是它的精确度,聪明的帅哥精确度不行的时候,你和别人说我的模型预测的多么多么的快,部署的时候占的内存多么多么的小,都是白搭。但聪明的帅哥模型达到一定的精确度之后,就需要更进一步的评价指标来评价你模型:1)前向传播时所需的计算力,它反应了对硬件如GPU性能要求的高低;2)参数个数,它反应所占内存大小。

先说结论:卷积层 计算力消耗 等于上图中两个立方体 (绿色和橙色) 体积的乘积。

推导过程:卷积层 wx + b 需要计算两部分,首先考虑前半部分 wx 的计算量:

令 :

k 表示卷积核大小;c 表示输入 feature map 的数量;

则对于输出 feature map 上的单个 Unit 有:

k * k * c 次乘法,以及 k * k * c - 1 次加法

Image大小为 5x5,卷积核大小为 3x3,那么一次3x3的卷积(求右图矩阵一个元素的值)所需运算量:(3x3)个乘法+(3x3-1)个加法 = 17。要得到右图convolved feature (3x3的大小):17x9 = 153

如果输出 feature map 的分辨率是 H * W ,且输出 o 个 feature map,则输出 feature map 包含 Unit的总数就是 H * W * o。

因此,该卷积层在计算 wx 时有:

k * k * c * H * W * o 次乘法 --(1)(k * k * c - 1) * H * W * o 次加法 --(2)

再考虑偏置项 b 包含的计算量:

由于 b 只存在加法运算,输出 feature map 上的每个 Unit 做一次偏置项加法。因此,该卷积层在计算偏置项时总共包含:

H * W * o 次加法 --(3)

将该卷积层的 wx 和 b 两部分的计算次数累计起来就有:

式(1) 次乘法:

k * k * c * H * W * o 次乘法

式(2) + 式(3) 次加法:

(k * k * c - 1) * H * W * o + H * W * o = k * k * c * H * W * o

可见,式(2) + 式(3) = 式 (1)

对于带偏置项的卷积层,乘法运算和加法运算的次数相等,刚好配对。定义一次加法和乘法表示一个flop,该层的计算力消耗 为:

k * k * c * H * W * o

刚好等于图中两个立方体(绿色和橙色)体积的乘积。全连接层的算法也是一样。

节省显存一般有如下方法: 降低batch-size下采样 (缩小输入维度)减少全连接层(一般只留最后一层分类用的全连接层)减小图片尺寸;将计算过程分为多步,保存中间结果再计算后面一半的模型,参考此文;使用软batch训练model,即通过修改优化算法,是网络进行N次前向传播,但只进行一次反向传播;使用pooling,减小特征图的size;减少全连接层的使用。relu(inplace=true),inplace_abn使用半精度float16;optimizer的变换使用,理论上,sgd<momentum<adam,可以从计算公式中看出有额外的中间变量;Depthwise Convolution;尽可能使用inplace操作, 比如relu 可以使用 inplace=True;

        激活函数Relu()有一个默认参数inplace,默认设置为False,当设置为True时,我们在通过relu()计算时的得到的新值不会占用新的空间而是直接覆盖原来的值,这也就是为什么当inplace参数设置为True时可以节省一部分内存的缘故。

tiktok0播放怎么办-tiktok播放量低怎么办

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。