成本和性能(Cost/performance)

性能与成本

  • 机器学习计算块(ML Computation block)
    • full connected Neural Network的矩阵乘积(Matrix product)
        • max-pooling layers(最大池层)
    • 对计算平台的要求
      • 浮点数和定点数
        • 浮点数
        • 定点数
        • floating point 与 fixed point
        • 量化(quantizaition)
      • 训练与推理(training and inference)
      • 计算和内存访问(memory access)
        • 屋顶线模型(the roofline model)
        • 推理过程的计算与内存
        • 训练过程中的计算与内存
    • 如何优化内存访问
      • Temporal and spatial reuse
      • 写累了,明儿接着写,准备加一些编程在里面

机器学习计算块(ML Computation block)

  1. regression和SVM:MAC(Multiply-And-Accumulate)
  2. Full connected Neural Network
  3. 深度和卷积神经网络(Deep and Convolutional Neural network)
  4. 矢量和矩阵乘积是机器学习的主力军(workhorse)

full connected Neural Network的矩阵乘积(Matrix product)

y = g(w x + b) 其中有一个向量乘积(vector product)(wx)和一个非线性操作函数g(),
训练期间,推理(inference)和反向传播(backpropagation)在每个训练数据重复一次。
矩阵乘法是训练(一个前向一个反向)和评估(evaluation)期间最后的操作。
我们用小批量完成这些操作可以节省存储空间使用率(memory usage)。

整个过程包含三个参数:输入激活,权重,输出激活
out = g(weights * in + bias)
成本和性能(Cost/performance)_第1张图片
通常情况下,非线性是矩阵乘积融合而成的。
我们接下来观察二维卷积层
成本和性能(Cost/performance)_第2张图片
下面是多通道二维卷积层的原理图:
成本和性能(Cost/performance)_第3张图片
加入小批量之后的示意图:
成本和性能(Cost/performance)_第4张图片
步伐和填充(strides and padding)
实际上卷积可能存在非单位的步伐(stride)

max-pooling layers(最大池层)

有较低的计算复杂度(因为无MAC)
常与卷积层融合(fused)
下图是C实现:

typedef float DT;
// called once per image, i.e. repeated NUM_BATCHES*BATCH_SIZE times
void max_pool(DT *in, DT *out) {
for (int to = 0; to < NUM_OUT_CHAN; to++)
	for (int r = 0; r < OUT_IMG_HEIGHT; r++)
		for (int c = 0; c < OUT_IMG_WIDTH; c++) {
		DT acc = -INFTY;
		for (int i = 0; i < POOL_SIZE; i++)
			for (int j = 0; j < POOL_SIZE; j++)
				if (in[r * IN_IMG_WIDTH + c + i * POOL_SIZE + j] > acc)
					acc = in[r * IN_IMG_WIDTH + c + i * POOL_SIZE + j] ;
				out[r * OUT_IMG_WIDTH + c] = acc;
		}
} 

对计算平台的要求

浮点数和定点数

浮点数

在C语言中的32位的float
在这里插入图片描述
不在C语言中的16位半精度浮点数
在这里插入图片描述
我们改善一下取值范围,使用8位指数。这个也叫BF16(“brain floating”),并在google TPU中首次使用:
在这里插入图片描述
在同等位数情况下,浮点数比整数能表示更大的取值范围,但也比整数更贵。

定点数

属于整数和浮点数之间的混合体(hybrid)
成本和性能(Cost/performance)_第5张图片
它的输出为
Y = (-1)S x (Significand) x Slope + Bias
斜率(slope)和偏差(bias)通常是共享的。
斜率是2的幂,偏差(bias)为0;否则,需要加一些乘法和除法

floating point 与 fixed point

浮点数一般用于提供本地FP支持的平台,还有训练阶段。比如:CPU,GPU,FPGA和矢量加速器。
定点数常用于大多数的嵌入式平台,以及推理过程中。它比较节省芯片面积和能耗。

量化(quantizaition)

使用FP学习的权重被量化为定点。
训练中,量化误差可以被认为是损失函数的一部分
训练后,通过选择合适的位数,使得斜率和偏差表示一个有最小信息损失的数值中的所有权重。
机器学习框架可以很好的帮助你完成这个任务,或者用每层的斜率和偏差来学习。
对于硬件实现来讲,除法是非常昂贵的,所以我们应该使用二次方的斜率。

训练与推理(training and inference)

训练是啥?
在云端,只执行一次
计算和内存密集度较高(需要FP)
推理是啥?
在云端或者在边缘执行很多次
计算和内存密集度较低

计算和内存访问(memory access)

许多现代LM模型是内存和能量消耗(energy hogs),它们通常将这些问题映射到大量参数上去解决非常困难的AI问题。
DRAM访问是最慢而且最耗能的操作,大多数的嵌入式平台并没有一个缓存。
由于DRAM的特点所以内存访问成了一个性能上的瓶颈(bottleneck)。
存储器延时很容易被隐藏,因为ML模型的内存访问模式是非常可预测的,数据能被预加载,然后等到需要的时候再用。
由于成本的原因,存储器带宽为硬限制:一是I/O接口比较昂贵,二是高频I/O很难安置在PCB上。

屋顶线模型(the roofline model)

性能的三个主要参数:

  1. Computation(GOP/S)
  2. Communication(GB/S)
  3. Locality(数据经历的距离)地点

一个计算或者一个算法的计算强度(arithmetic intensity):OP/B
其中FLOP是用于训练,IOP用于推理
记住一个转换:GOP/S=(GB/S)*(OP/B)

计算的性能受:1. 每秒执行在平台的运算单元上的操作数量。2. 每秒平台提供给它的运算单元上的字节数量。
记住一个转换:GOP/S=min(computation GOP/S(计算限制),memory GB/SOP/S(内存限制))
GFLOP/s =min(computation GFLOP/s,memory GB/s
FLOP/B)
这个计算假设内存转化和计算过程完全重叠(full overlap)。

成本和性能(Cost/performance)_第6张图片
我们可以看到上述图表,我们可以通过

  1. 仅提高计算并行性
  2. 仅提高带宽
  3. 提高计算并行度和带宽

改善性能。

推理过程的计算与内存

训练过程中的计算与内存

如何优化内存访问

主要的目标就是减少外部DRAM(昂贵存储器)的连接次数。
如何减少?

  1. 共享权重(share weight)
  2. 谨慎地将数据从DRAM转移到SRAM,再从SRAM转移到FF,尽量减少加载重复的数据。
  3. 正则化权重(Dropout 和 Dropconnect)并使用一个稀疏矩阵(sparse matrix)表示,所以被存储并且非0时才被加载。

Temporal and spatial reuse

时间上重复使用(temporal reuse):同样数据被同一消费者重复使用
空间和时间上重复使用(spatial and temporal reuse):同样数据被许多消费者重复使用。

写累了,明儿接着写,准备加一些编程在里面

你可能感兴趣的:(AI/ML,复习笔记,人工智能,深度学习)