当前位置: 首页 > news >正文

AI加速(九): 深度理解吞吐量和延时

前文回顾:

AI加速(二)| 计算机存储和计算的分离

AI加速(三)| 每条指令都是流水线的工人

AI加速(四)| 衣柜般的分层存储设计

AI加速(五)| 一个例子看懂流水——从指令到算法

AI加速(六)| 异构编程——性能不够,“外挂“来凑?

AI加速(七)| 存算一体——冰箱里面炒鸡蛋?

AI加速(八)| 循环展开Unrooling——你肯定能学会的程序加速方法


今天介绍两个在做神经网络性能优化中,非常非常重要的概念——吞吐和延时。

其实不光在做神经网络性能优化时会用到,在计算机网络的性能调优时,这两个概念也会被反复提到,可见其重要性。

很多同学对这两个概念的最大误区,大概都集中在:高吞吐就等于低延时,低吞吐就等于高延时。这样理解是有问题的。

下面介绍这两个概念,帮助大家更深入的理解其区别。

吞吐或吞吐量(Throughput):完成一个特定任务的速率(The Rate of completing a specific action),也可以理解为在单位时间内完成的任务量。

对于计算机网络而言,吞吐量的衡量单位一般是 bits / second 或者 Bytes / second。举个例子,如果说一条数据通路的吞吐量是 40Gbps,那么意味着,如果你往这个数据通路中注入40Gb 的数据量,那么它可以在1秒内流过这条数据通路。

对于神经网络而言,我们可以把吞吐量的衡量设置为每秒处理的图片数量(如果是图像任务)或语音数量(如果是NLP任务)。

延时(Latency):完成一个任务所花费的时间(The time taken to complete an action)。举个例子,如果我用我的电脑去 ping 一个网站,从我发送这条 ping 指令(数据包)开始,一直到这条 ping 指令到达对方服务器的时间,就可以理解为延时。

▲ ping 百度的延时。一般在打游戏时,都会关注延时,如果延时太高,玩游戏就会很卡,同样,ping 百度也是很多开发人员喜欢的用来测试网络环境的手段。你是不是也喜欢在测试网络的时候,试试能否打开百度呢?

那么,吞吐量和延时这两者有什么关系呢?是不是意味着,高的吞吐量就会有低的延时?延时增加总是会导致吞吐量减少?

我们看一个ATM(Automatic Teller Machine)机取款的例子。

假设银行里有一台ATM机,平均下来它基本会花费1分钟将钱吐出来送给客户(包括插卡、输密码等步骤,这里不考虑个人差异等因素)。这就意味着,如果我排着队轮到我使用这台ATM机取钱,我可以预见的是,1分钟的时间,我就可以拿到钱并且离开ATM机。

换句话说,这台ATM机的延时是1分钟(或者60秒,或者60000毫秒)。那么吞吐量呢?吞吐量是1/60个人每秒。也就是说,如果存在 1/60个人去取钱的话,那么ATM机每秒能接待的客户是1/60个。

这是很简单的数学计算。所以,吞吐量 = 1 / 延时 ?对么?

如果ATM机突然进行了升级,从之前平均1分钟可以接待一个客户,到升级后平均30秒就可以接待一个客户。那么此刻的ATM机的延时是多少?没错,是30秒。那么吞吐量呢?30秒可以接待1个客户,一分钟可以接待两个,吞吐量翻倍了。

延时减半,吞吐量翻倍。看起来很符合上面的公式。

我们继续。

银行为了应对更多的客户取钱需求,在原来仅有的ATM机旁又安装了一台新的ATM机,我们假设这两天ATM机都是未升级前的。也就是一台机器平均1分钟可以接待一名客户。

那么我去取钱,从我占据一台ATM机,到取出钱来,还是会花费1分钟,也就是延时是1分钟。那么此时的吞吐量呢?两天ATM机可以同时一起工作,也就是1分钟可以处理两名客户。吞吐量为2个人/分钟,或者2/60个人每秒。

和只有一台ATM机的时候相比,延时没有变,一个客户取一次钱,都是需要花费1分钟,但是整个ATM机的吞吐量却增加了一倍。

吞吐量的增加,和延时没有关系!

这个例子很清晰的可以说明这个问题。

所以,对于吞吐量,我们可以理解为,一个系统可以并行处理的任务量。而延时,指一个系统串行处理一个任务时所花费的时间。

对应到神经网络性能优化这个场景下。神经网络的吞吐量,就是每秒中可以处理的图片数量,或者语音数量。

这与模型本身的性能有关,也与实际完成计算的硬件资源有关。比如两个GPU可以并行独立完成,其吐吞量一般要比单个 GPU 高。

搞神经网络训练的人,都喜欢堆显卡,就是为了提高整体系统吐吞量,毕竟训练一个模型,需要处理海量的数据。

搞神经网络推理的人,都喜欢做性能优化,为了提高整个模型在有限硬件资源下的速度。毕竟,2秒完成一张图片的识别会让人忍受不了,而1ms的时间,大部分人会感受不到卡顿。

相关文章:

  • java毕业设计的滑雪场学具租赁管理系统mybatis+源码+调试部署+系统+数据库+lw
  • redis5.0集群搭建(两台服务器)
  • [操作系统笔记]基本分页存储管理
  • 容器运行时与k8s概述
  • [ Linux ] Linux信号概述 信号的产生
  • 终极版Facebook广告管理工具新手教程!赶紧收藏!(下篇)
  • 计算机组成原理习题课第四章-2(唐朔飞)
  • Spring Boot 配置多数据源
  • HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站
  • 隔离放大器
  • Python毕业设计必备案例:【学生信息管理系统】
  • java服务器信息监控【oshi】(已封装,开箱即用)
  • 基于萤火虫算法优化的BP神经网络预测模型(Matlab代码实现)
  • 航天环宇提交招股书上会稿:计划募资6亿元,控股股东为李完小
  • Spark SQL增量查询Hudi表
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  •  D - 粉碎叛乱F - 其他起义
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • git 常用命令
  • JS数组方法汇总
  • python3 使用 asyncio 代替线程
  • spring-boot List转Page
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端临床手札——文件上传
  • 通过几道题目学习二叉搜索树
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • Spring第一个helloWorld
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #pragma 指令
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (libusb) usb口自动刷新
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (笔试题)合法字符串
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (实战篇)如何缓存数据
  • (四)JPA - JQPL 实现增删改查
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net6Api后台+uniapp导出Excel
  • .net开发引用程序集提示没有强名称的解决办法
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ 第一章] JavaScript 简史
  • []串口通信 零星笔记
  • [Ariticle] 厚黑之道 一 小狐狸听故事