1. 模型大小的四种描述
2. 计算量、访存量与推理速度的关系
2.1 计算密度
从上面可以看出计算量和访存量都能影响模型的推理速度,那么进一步定义计算密度为计算量除以访存量,如下:
计算密度用于反映一个程序是计算更为密集,还是访存更为密集。
- 计算密集型程序:Compute bound
- 访存密集型程序:Memory bound
2.2 Roofline 模型
一种用于评估程序在硬件上能达到的性能上界的数学模型。
横轴表示计算密度,在2.1我们讲述每一个模型都有一个计算密度,也就是说横轴表示的是模型。纵轴表示的是计算速度。
这个数学模型表示,在这块硬件上跑某一个模型(给出一个计算密度)所能达到的最佳的计算速度。
可以看出来这个是一个分段函数:
- 对于访存型密集程序:计算速度 = 计算密度 × 带宽,即与硬件的带宽有非常大的关系。
- 对于计算型密集程序,计算速度 = 峰值计算速度,即与硬件的算力(峰值计算速度)有很大关系。
2.3 推理速度
在2.2的部分给出了计算速度的计算方式,知道了计算速度就可以计算出来推理速度,如下
对于访存密集的计算公式是:
计算量/计算速度 = 计算量 / (计算密度 * 带宽) = 计算量/(计算量 * 带宽 /访存量) = 访存量/带宽
这里我们没有像上面那样区分程序,而是变为算子,因为一个模型中可能既有访存密集型的算子,也有计算密集的算子,因此推理速度也没有像上面的公式一样严格区分,而是比较复杂的。
- 访存密集型算子:Concat、Eltwise Add、ReLU、MaxPooling……
- 计算密集型算子:Conv、DeConv、FC、MatMul、LSTM……