性能与成本

  • 机器学习计算块(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)

通常情况下,非线性是矩阵乘积融合而成的。
我们接下来观察二维卷积层

下面是多通道二维卷积层的原理图:

加入小批量之后的示意图:

步伐和填充(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)

它的输出为
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)。


我们可以看到上述图表,我们可以通过

  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):同样数据被许多消费者重复使用。

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

成本和性能(Cost/performance)相关推荐

  1. bigquery数据类型_将BigQuery与TB数据一起使用后的成本和性能课程

    bigquery数据类型 I've used BigQuery every day with small and big datasets querying tables, views, and ma ...

  2. ITU-T G.1081 IPTV性能监测点 (Performance monitoring points for IPTV)

    ITU-T 建议书 G.1081 IPTV性能监测点 Performance monitoring points for IPTV Summary Successful deployment of I ...

  3. 两分钟快速理解成本函数(cost function)

    对成本函数(cost function)的理解 成本函数是用以衡量假设函数h(x)准确性的工具. 直接上公式, 是不是有种熟悉感,最小二乘法,没错,对比理解一下就好了.该函数也被称为"平方误 ...

  4. 4u机架式服务器性能如何,兼顾成本与性能 4U机架式服务器再曝光

    1浪潮英信SA5224L2:7.1万 [PConline 海选导购]在信息化产业的快速发展的今天,高端企业用户对于服务器的需求越来越大.对于服务器的性能以及可靠性越来越高,特别是企业的关键任务的运行尤 ...

  5. c语言实现股票软件cost函数,高仿真(主图){源码 有成本未来函数COST}

    好股票软件下载网(www.goodgupiao.com)提示:您正在下载的是:高仿真(主图){源码 有成本未来函数COST} MA1:=EMA(C,3); MA5:EMA(C,5),COLORFFFF ...

  6. 前端性能检测Performance

    前端性能检测Performance https://developer.mozilla.org/zh-CN/docs/Web/API/Performance Performance 接口可以获取到当前 ...

  7. 云效率的 3 个方面:成本、性能和速度

    在考虑实现云效率时,通常与围绕成本的讨论有关.然而,成本只是众多组成部分的其中之一.本文将更好地定义云效率及其三个组成部分--成本.性能和速度,并为实现云效率的所有方面提供建议. 此外,本文将讨论Ku ...

  8. 详解网页性能参数 performance API

    详解网页性能参数 performance 浏览器核心工作 performance 对象 performance 方法 本文要点: 介绍浏览器核心工作流程: 介绍 performance 对象及方法.通 ...

  9. 深入理解前端性能监控—Performance + 腾讯superProfiler(基于Performance API的性能监控工具)

    https://segmentfault.com/a/1190000018785911 在同样的网络环境下,有两个同样能满足你的需求的网站,一个唰的一下就加载出来了,另一个白屏转圈转了半天内容才出来, ...

最新文章

  1. 如何入门生信Linux
  2. Ubuntu 安装 Sun JDK
  3. ActionScript接收socket服务器发送来的数据
  4. 微信公众平台开发(103) 四六级成绩查询
  5. java实现未读消息提醒_Android自定义View之未读消息提示
  6. rocketmq 初探(一)
  7. Redis整合springboot实现消息队列
  8. 《统一沟通-微软-实战》-6-部署-2-中介服务器-5-语音路由-语音策略
  9. HTML跳转为啥会404,为什么网页会出现404 not found?
  10. java_web用户的自动登录模块的实现
  11. Android 系统(228)---NITZ网络自动对时功能不起作用
  12. Linux的shell终端常用快捷键大全
  13. 【记录】[2014.2.12]网新第一天
  14. 微信之父张小龙经典演讲164页PPT:《微信背后的产品观》
  15. 零基础学模拟电路--2.运算放大器的虚短和虚断
  16. Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD
  17. 单阶段和两阶段目标检测
  18. window10安装Mac虚拟机详细教程
  19. PageIndicatorView
  20. Python每日一练——列表,元组和字典第十一关:del和pop的用法

热门文章

  1. 面向对象程序设计(c++)面试常问——for考研复试面试
  2. 神、上帝以及老天爷(递推公式)
  3. 解决导出CSV文件乱码的问题
  4. 图像处理 - 平滑处理(cvSmooth)
  5. Microsoft Edge
  6. Unity Addressable学习笔记一(整体介绍)
  7. 电压跟随器的使用方法
  8. VC++2012编程演练数据结构《9》平衡二叉搜索树
  9. sed实战之——删除空行(包括由空格组成的空行)
  10. 订单支付页面 html,订单支付完成.html