文章主题:流水, 并行, 时间管理

666AI工具大全,助力做AI时代先行者!

在我之前的两篇科普文章中,我们已经简要地介绍了流水的技术,以及它在程序性能优化方面的应用。作为一篇初级的科普性文章,我们并没有深入探讨这个技术的细节,而是试图让大家对其有一个基本的感性理解。

董董灿是个攻城狮:AI加速(三)| 每条指令都是流水线的工人

董董灿是个攻城狮:AI加速(四)| 衣柜般的分层存储设计

本篇打算再通过一个生活中的小例子,让大家更直观的了解什么是流水。

举个例子

早晨从起床到上班出门,我们一般会做以下几件事:刷牙、烧水、喝水、出门。

在遵循常规顺序的情况下,我们可能会按照以下步骤进行:首先,刷牙;接着,准备热水;然后,等待水烧开;最后,出门。若每项任务所需时间如表所示,那么在踏出家门之前,我们需要总共花费55分钟。

然而,若你对时间管理稍有了解,相信你不会优先做 brush teeth and boil water. 的动作,因为烧水和刷牙之间并无关联,而且在烧水过程中也不需要有人在旁边守着。

于是,就有了下面的做事顺序——起来先烧水,然后在烧水的同时,刷牙,等水烧开了,喝水,出门。

这么算下来,总共需要40分钟就能完成。

这两种做事顺序最终的结果都是一样的,而且该做的事都做了。区别在于,后面比前面节省了15分钟的时间。

这里需要注意2个概念。

依赖——后面的事依赖前面的事情。也就是说喝水肯定依赖烧水完成之后才能出门。

并行——烧水和刷牙没有任何依赖关系,他俩就可以并行去做。

在上图中,我们可以看到烧水和刷牙这两个动作在同一时间进行了。这意味着,在我们从起床到出门的整个时间流程中,烧水和刷牙这两个步骤是同时进行的。通过这种方式,我们可以有效地节省下总共15分钟的时间。

在理解了并行的概念之后,流水就好理解了。

流水排布到底是什么样的

继续上面的例子,比如我们起床需要刷两次牙,烧两次水,喝两次水。(当然现实中不会有人这么做,但是在AI神经网络中,重复某个计算是常有的事。感兴趣可以看下 长文解析Resnet50的算法原理 中的Rensnet网络结构)。

如果刷两次牙,烧两次水,喝两次水,然后出门,我们该怎么管理时间呢?

在我们的日常生活中,刷牙和烧水、喝水这些行为都遵循一定的顺序,这是人类行为习惯的一种体现。我们通常会先刷牙再喝热水,然后再喝凉水。这种顺序的出现是因为我们的大脑习惯于按照一定的步骤来进行行动,这样可以提高效率,使我们的工作和生活更加有序。然而,在某些情况下,我们可以打破这种顺序,实现并行操作。例如,当我们在烧第二次水的时候,其实我们可以同时进行烧水和喝水两个动作。这样,我们就可以充分利用时间,提高生活的效率。总的来说,无论是刷牙还是烧水、喝水,都需要遵循一定的顺序。但在实际生活中,我们也应该灵活运用,根据实际情况进行适当的调整,以达到最佳的效率。

在上图中,我们可以看到整个左上角的布局呈现出一种瀑布般的视觉效果,每一行都包含着两个任务的同时进行。尽管这两个任务在同一时刻彼此独立,但整个系统却依然保持着高度的秩序与协调。

这种排布,就叫做流水。

在指令序列中,将刷牙、烧水、喝水替换成指令,就完成了指令流水;在神经网络中,将刷牙、烧水、喝水替换成AI算法,就完成了算法流水。

要实现排流水处理,首先需要满足两个关键前提。第一,两个任务、指令或算法在同一时刻需要解除彼此的依赖关系;第二,这些任务、指令或算法可以被并行处理。只有当这两个条件都得到满足时,我们才能有效地进行排流水处理,从而提高工作效率。

说到这,有同学可能会问,既然这样,我们弄两个烧水壶同时烧水不就行了么?

当然,硬件升级是提高系统性能的有效途径之一。相较于单核CPU,双核CPU在处理多任务和复杂运算时具有明显优势,这也是其性能提升的关键所在。而在硬件资源有限的情况下,通过优化程序流程,实现排流水操作,能够最大限度地减少程序运行时间,从而提高整体AI软件 stack的性能表现。

Resnet50 中的算法并行

在Resnet50的网络结构(详见:图像识别(番外1)| AI算法攻城狮左手图纸,右手搬砖的真实性以及长图展示Resnet全貌和可视化CNN!)中,存在很多可并行的算法。

上图是截取的Resnet50网络中的一部分,可以看到中间有个加法节点,加法节点有两个输入,分别为左边的卷积1和右边的卷积2(Conv为Convolution的缩写,中文名为卷积)。

左边的卷积1依赖于它前面的Relu的输出,而右边的卷积2依赖于很靠前的某个节点的输出,两者并没有实际上的数据依赖,因此,在深度学习编译器对两个节点进行编译调度时,可以将两者进行并行化处理(Parallelization),从而减少一个卷积运算的耗时。

总结

之所以又花了一篇文章来介绍流水和并行技术,是因为并行和流水技术在AI软件的性能优化中占据了很重要的位置。

在硬件资源有限的前提下,我们只能通过软件手段来持续进行AI的加速优化。这里面,更深刻的理解硬件的架构,利用好硬件的优势,编写更加硬件友好的软件代码,才能更加有效的实现AI加速。

知己知彼,百战不殆。

好了,这篇就介绍到这。欢迎持续关注AI加速系列。

AI时代,拥有个人微信机器人AI助手!AI时代不落人后!

免费ChatGPT问答,办公、写作、生活好得力助手!

搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!

Leave a Reply

Your email address will not be published. Required fields are marked *