博客专栏

EEPW首页 > 博客 > 详解AI加速器(一):2012年的AlexNet到底做对了什么?

详解AI加速器(一):2012年的AlexNet到底做对了什么?

发布人:CV研究院 时间:2022-01-16 来源:工程师 发布文章

AI、机器学习、深度学习的概念可以追溯到几十年前,然而,它们在过去的十几年里才真正流行起来,这是为什么呢?AlexNet 的基本结构和之前的 CNN 架构也没有本质区别,为什么就能一鸣惊人?在这一系列文章中,前苹果、飞利浦、Mellanox(现属英伟达)工程师、普林斯顿大学博士 Adi Fuchs 尝试从 AI 加速器的角度为我们寻找这些问题的答案。

转自《机器之心》

1.png

当代世界正在经历一场革命,人类的体验从未与科技如此紧密地结合在一起。过去,科技公司通过观察用户行为、研究市场趋势,在一个通常需要数月甚至数年时间的周期中优化产品线来改进产品。如今,人工智能已经为无需人工干预就能驱动人机反馈的自我改进(self-improving)算法铺平了道路:人类体验的提升给好的技术解决方案带去奖励,而这些技术解决方案反过来又会提供更好的人类体验。这一切都是在数百万(甚至数十亿)用户的规模下完成的,并极大地缩短了产品优化周期。

人工智能的成功归功于三个重要的趋势:1)新颖的研究项目推动新的算法和适用的用例;2)拥有收集、组织和分析大量用户数据的集中式实体(例如云服务)的能力;3)新颖的计算基础设施,能够快速处理大规模数据。

在这个系列的文章中,前苹果、飞利浦、Mellanox(现属英伟达)工程师、普林斯顿大学博士 Adi Fuchs 将重点关注第三个趋势。具体来说,他将对 AI 应用中的加速器做一个高层次的概述——AI 加速器是什么?它们是如何变得如此流行的?正如在后面的文章中所讨论的,加速器源自一个更广泛的概念,而不仅仅是一种特定类型的系统或实现。而且,它们也不是纯硬件驱动的。事实上,AI 加速器行业的大部分焦点都集中在构建稳健而复杂的软件库和编译器工具链上。

以下是第一部分的内容,其余部分将在后续的文章中更新。

人工智能不仅仅是软件和算法

AI / 机器学习 / 深度学习的概念可以追溯到 50 多年以前,然而,它们在过去的十几年里才真正流行起来。这是为什么呢?

很多人认为,深度学习的复兴始于 2012 年。当时,来自多伦多大学的 Alex Krizhevsky、Ilya Sutskever、Geoffrey Hinton 等人提出了一个名为「AlexNet」的深度神经网络并凭借该网络赢得了 2012 年大规模视觉识别挑战赛的冠军。在这场比赛中,参赛者需要完成一个名叫「object region」的任务,即给定一张包含某目标的图像和一串目标类别(如飞机、瓶子、猫),每个团队的实现都需要识别出图像中的目标属于哪个类。

AlexNet 的表现颇具颠覆性。这是获胜团队首次使用一种名为「卷积神经网络(CNN)」的深度学习架构。由于表现过于惊艳,之后几年的 ImageNet 挑战赛冠军都沿用了 CNN。这是计算机视觉史上的一个关键时刻,也激发了人们将深度学习应用于其他领域(如 NLP、机器人、推荐系统)的兴趣。

2.png

ImageNet 挑战赛冠军团队的分类错误率逐年变化情况(越低越好)。

有意思的是,AlexNet 的基本结构和之前那些 CNN 架构并没有太大区别,比如 Yann LeCun 等人 1998 年提出的 LeNet-5。当然,这么说并不是想抹杀 AlexNet 的创新性,但这确实引出了一个问题:「既然 CNN 不是什么新东西,AlexNet 的巨大成功还可以归因于哪些要素呢?」从摘要可以看出,作者确实使用了一些新颖的算法技术:

「为了加速训练,我们用到了非饱和神经元和一个非常高效的 GPU 卷积操作实现。」

事实证明,AlexNet 作者花了相当多的时间将耗时的卷积操作映射到 GPU 上。与标准处理器相比,GPU 能够更快地执行特定任务,如计算机图形和基于线性代数的计算(CNN 包含大量的此类计算)。高效的 GPU 实现可以帮他们缩短训练时间。他们还详细说明了如何将他们的网络映射到多个 GPU,从而能够部署更深、更宽的网络,并以更快的速度进行训练。

拿 AlexNet 作为一个研究案例,我们可以找到一个回答开篇问题的线索:尽管算法方面的进展很重要,但使用专门的 GPU 硬件使我们能够在合理的时间内学习更复杂的关系(网络更深、更大 = 用于预测的变量更多),从而提高了整个网络的准确率。如果没有能在合理的时间框架内处理所有数据的计算能力,我们就不会看到深度学习应用的广泛采用。

如果我是一名 AI 从业者,我需要关心处理器吗?

作为一名 AI 从业者,你希望专注于探索新的模型和想法,而不希望过多担心看起来不相关的问题,如硬件的运行方式。因此,虽然理想的答案是「不,你不需要了解处理器」,但实际的答案是「可能还是要了解一下」。如果你非常熟悉底层硬件以及如何调试性能,那么你的推理和训练时间就会发生变化,你会对此感到惊讶。

3.png

各种并行化技术对于矩阵乘法的加速效果。

如果不懂硬件,你所花的时间可能会多 2-3 倍,有时甚至多一个数量级。简单地改变做矩阵乘法的方式可能帮你收获巨大的性能提升(或损失)。性能欠佳可能会影响你的生产力以及你可以处理的数据量,并最终扼杀你的 AI 周期。对于一家大规模开展人工智能业务的企业来说,这相当于损失了数百万美元。

那么,为什么不能保证得到最佳性能呢?因为我们还没有有效地达到合理的「user-to-hardware expressiveness」。我们有一些有效利用硬件的用例,但还没泛化到「开箱即用」的程度。这里的「开箱即用」指的是在你写出一个全新的 AI 模型之后,你无需手动调整编译器或软件堆栈就能充分利用你的硬件。

4.png

AI User-to-Hardware Expressiveness。

上图说明了「user-to-hardware expressiveness」的主要挑战。我们需要准确地描述用户需求,并将其转换成硬件层(处理器、GPU、内存、网络等)能够理解的语言。这里的主要问题是,虽然左箭头(programming frameworks)主要是面向用户的,但将编程代码转换为机器码的右箭头却不是。因此,我们需要依靠智能的编译器、库和解释器来无缝地将你的高级代码转换为机器表示。

这种语义鸿沟难以弥合的原因有两个:

1)硬件中有丰富的方法来表达复杂的计算。你需要知道可用的处理元素的数量(如 GPU 处理核心)、你的程序需要的内存数量、你的程序所展示的内存访问模式和数据重用类型,以及计算图中不同部分之间的关系。以上任何一种都可能以意想不到的方式对系统的不同部分造成压力。为了克服这个问题,我们需要了解硬件 / 软件堆栈的所有不同层是如何交互的。虽然你可以在许多常见的场景中获得良好的性能,但现实中还有无尽的长尾场景,你的模型在这些场景中可能表现极差。

2)虽然在计算世界中,软件是慢的,硬件是快的,但部署世界却在以相反的方式运行:深度学习领域正在迅速变化;每天都有新的想法和软件更新发布,但构建、设计和试生产(流片)高端处理器需要一年多的时间。在此期间,目标软件可能已经发生了显著的变化,所以我们可能会发现处理器工程师一年前的新想法和设计假设已经过时。

因此,你(用户)仍然需要探索正确的方法来识别计算耗时瓶颈。为此,你需要了解处理器,特别是当前的 AI 加速器,以及它们如何与你的 AI 程序交互。

原文链接:https://medium.com/@adi.fu7/ai-accelerators-part-i-intro-822c2cdb4ca4

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: AI

相关推荐

技术专区

关闭