神经网络推理加速入门——吞吐和延时

简介: 吞吐和延时,你真的懂吗?

大家好啊,我是董董灿。

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

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

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

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

吞吐

吞吐或吞吐量(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 指令到达对方服务器的时间,就可以理解为延时。

image.png

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

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

一个例子

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

image.png

假设银行里有一台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分钟可以接待一名客户。

image.png

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

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

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

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

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

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

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

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

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

欢迎关注@董董灿是个攻城狮 和同名微信公众号
本文作者原创,转载请联系作者,请勿随意转载

相关文章
|
1天前
|
人工智能 监控 网络协议
【网络技术】心跳机制(入门讲解)
【网络技术】心跳机制(入门讲解)
|
1天前
|
机器学习/深度学习 存储 人工智能
深度学习第1天:深度学习入门-Keras与典型神经网络结构
深度学习第1天:深度学习入门-Keras与典型神经网络结构
36 0
|
1天前
|
网络协议 安全 Linux
网络入门基础
网络入门基础
7 0
|
1天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
1天前
|
存储 监控 安全
【亮剑】指导初学者如何搭建和使用网络视频监控系统。
【4月更文挑战第30天】本文指导初学者如何搭建和使用网络视频监控系统。核心设备包括摄像头(如固定、PTZ、多目、夜视)、存储选项(NVR、DVR、云存储)及网络交换机等。安装配置步骤涉及规划布局、安装摄像头、设置存储设备和软件配置。实时监控包括实时查看、接收警报和录像回放。理解设备功能、合理布局并细心操作,就能建立稳定监控体系。随着技术进步,未来监控系统将更智能、高效,保障安全。
|
1天前
|
机器学习/深度学习 Python
【深度学习入门】- 神经网络
【深度学习入门】- 神经网络
|
1天前
|
存储 NoSQL Linux
Redis入门到通关之Redis5种网络模型详解
Redis入门到通关之Redis5种网络模型详解
32 1
|
1天前
|
NoSQL Ubuntu 关系型数据库
Redis入门到通关之Redis网络模型-用户空间和内核态空间
Redis入门到通关之Redis网络模型-用户空间和内核态空间
22 1
|
1天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
1天前
|
关系型数据库 MySQL 数据库
Python从入门到精通:2.3.1数据库操作与网络编程:使用Python连接和操作数据库
Python从入门到精通:2.3.1数据库操作与网络编程:使用Python连接和操作数据库

热门文章

最新文章