詳解AI加速器(一):2012年的AlexNet到底做對了什么?
AI、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的概念可以追溯到幾十年前,然而,它們在過去的十幾年里才真正流行起來,這是為什么呢?AlexNet 的基本結(jié)構(gòu)和之前的 CNN 架構(gòu)也沒有本質(zhì)區(qū)別,為什么就能一鳴驚人?在這一系列文章中,前蘋果、飛利浦、Mellanox(現(xiàn)屬英偉達(dá))工程師、普林斯頓大學(xué)博士 Adi Fuchs 嘗試從 AI 加速器的角度為我們尋找這些問題的答案。
轉(zhuǎn)自《機(jī)器之心》
當(dāng)代世界正在經(jīng)歷一場革命,人類的體驗從未與科技如此緊密地結(jié)合在一起。過去,科技公司通過觀察用戶行為、研究市場趨勢,在一個通常需要數(shù)月甚至數(shù)年時間的周期中優(yōu)化產(chǎn)品線來改進(jìn)產(chǎn)品。如今,人工智能已經(jīng)為無需人工干預(yù)就能驅(qū)動人機(jī)反饋的自我改進(jìn)(self-improving)算法鋪平了道路:人類體驗的提升給好的技術(shù)解決方案帶去獎勵,而這些技術(shù)解決方案反過來又會提供更好的人類體驗。這一切都是在數(shù)百萬(甚至數(shù)十億)用戶的規(guī)模下完成的,并極大地縮短了產(chǎn)品優(yōu)化周期。
人工智能的成功歸功于三個重要的趨勢:1)新穎的研究項目推動新的算法和適用的用例;2)擁有收集、組織和分析大量用戶數(shù)據(jù)的集中式實體(例如云服務(wù))的能力;3)新穎的計算基礎(chǔ)設(shè)施,能夠快速處理大規(guī)模數(shù)據(jù)。
在這個系列的文章中,前蘋果、飛利浦、Mellanox(現(xiàn)屬英偉達(dá))工程師、普林斯頓大學(xué)博士 Adi Fuchs 將重點關(guān)注第三個趨勢。具體來說,他將對 AI 應(yīng)用中的加速器做一個高層次的概述——AI 加速器是什么?它們是如何變得如此流行的?正如在后面的文章中所討論的,加速器源自一個更廣泛的概念,而不僅僅是一種特定類型的系統(tǒng)或?qū)崿F(xiàn)。而且,它們也不是純硬件驅(qū)動的。事實上,AI 加速器行業(yè)的大部分焦點都集中在構(gòu)建穩(wěn)健而復(fù)雜的軟件庫和編譯器工具鏈上。
以下是第一部分的內(nèi)容,其余部分將在后續(xù)的文章中更新。
人工智能不僅僅是軟件和算法
AI / 機(jī)器學(xué)習(xí) / 深度學(xué)習(xí)的概念可以追溯到 50 多年以前,然而,它們在過去的十幾年里才真正流行起來。這是為什么呢?
很多人認(rèn)為,深度學(xué)習(xí)的復(fù)興始于 2012 年。當(dāng)時,來自多倫多大學(xué)的 Alex Krizhevsky、Ilya Sutskever、Geoffrey Hinton 等人提出了一個名為「AlexNet」的深度神經(jīng)網(wǎng)絡(luò)并憑借該網(wǎng)絡(luò)贏得了 2012 年大規(guī)模視覺識別挑戰(zhàn)賽的冠軍。在這場比賽中,參賽者需要完成一個名叫「object region」的任務(wù),即給定一張包含某目標(biāo)的圖像和一串目標(biāo)類別(如飛機(jī)、瓶子、貓),每個團(tuán)隊的實現(xiàn)都需要識別出圖像中的目標(biāo)屬于哪個類。
AlexNet 的表現(xiàn)頗具顛覆性。這是獲勝團(tuán)隊首次使用一種名為「卷積神經(jīng)網(wǎng)絡(luò)(CNN)」的深度學(xué)習(xí)架構(gòu)。由于表現(xiàn)過于驚艷,之后幾年的 ImageNet 挑戰(zhàn)賽冠軍都沿用了 CNN。這是計算機(jī)視覺史上的一個關(guān)鍵時刻,也激發(fā)了人們將深度學(xué)習(xí)應(yīng)用于其他領(lǐng)域(如 NLP、機(jī)器人、推薦系統(tǒng))的興趣。
ImageNet 挑戰(zhàn)賽冠軍團(tuán)隊的分類錯誤率逐年變化情況(越低越好)。
有意思的是,AlexNet 的基本結(jié)構(gòu)和之前那些 CNN 架構(gòu)并沒有太大區(qū)別,比如 Yann LeCun 等人 1998 年提出的 LeNet-5。當(dāng)然,這么說并不是想抹殺 AlexNet 的創(chuàng)新性,但這確實引出了一個問題:「既然 CNN 不是什么新東西,AlexNet 的巨大成功還可以歸因于哪些要素呢?」從摘要可以看出,作者確實使用了一些新穎的算法技術(shù):
「為了加速訓(xùn)練,我們用到了非飽和神經(jīng)元和一個非常高效的 GPU 卷積操作實現(xiàn)?!?/p>
事實證明,AlexNet 作者花了相當(dāng)多的時間將耗時的卷積操作映射到 GPU 上。與標(biāo)準(zhǔn)處理器相比,GPU 能夠更快地執(zhí)行特定任務(wù),如計算機(jī)圖形和基于線性代數(shù)的計算(CNN 包含大量的此類計算)。高效的 GPU 實現(xiàn)可以幫他們縮短訓(xùn)練時間。他們還詳細(xì)說明了如何將他們的網(wǎng)絡(luò)映射到多個 GPU,從而能夠部署更深、更寬的網(wǎng)絡(luò),并以更快的速度進(jìn)行訓(xùn)練。
拿 AlexNet 作為一個研究案例,我們可以找到一個回答開篇問題的線索:盡管算法方面的進(jìn)展很重要,但使用專門的 GPU 硬件使我們能夠在合理的時間內(nèi)學(xué)習(xí)更復(fù)雜的關(guān)系(網(wǎng)絡(luò)更深、更大 = 用于預(yù)測的變量更多),從而提高了整個網(wǎng)絡(luò)的準(zhǔn)確率。如果沒有能在合理的時間框架內(nèi)處理所有數(shù)據(jù)的計算能力,我們就不會看到深度學(xué)習(xí)應(yīng)用的廣泛采用。
如果我是一名 AI 從業(yè)者,我需要關(guān)心處理器嗎?
作為一名 AI 從業(yè)者,你希望專注于探索新的模型和想法,而不希望過多擔(dān)心看起來不相關(guān)的問題,如硬件的運(yùn)行方式。因此,雖然理想的答案是「不,你不需要了解處理器」,但實際的答案是「可能還是要了解一下」。如果你非常熟悉底層硬件以及如何調(diào)試性能,那么你的推理和訓(xùn)練時間就會發(fā)生變化,你會對此感到驚訝。
各種并行化技術(shù)對于矩陣乘法的加速效果。
如果不懂硬件,你所花的時間可能會多 2-3 倍,有時甚至多一個數(shù)量級。簡單地改變做矩陣乘法的方式可能幫你收獲巨大的性能提升(或損失)。性能欠佳可能會影響你的生產(chǎn)力以及你可以處理的數(shù)據(jù)量,并最終扼殺你的 AI 周期。對于一家大規(guī)模開展人工智能業(yè)務(wù)的企業(yè)來說,這相當(dāng)于損失了數(shù)百萬美元。
那么,為什么不能保證得到最佳性能呢?因為我們還沒有有效地達(dá)到合理的「user-to-hardware expressiveness」。我們有一些有效利用硬件的用例,但還沒泛化到「開箱即用」的程度。這里的「開箱即用」指的是在你寫出一個全新的 AI 模型之后,你無需手動調(diào)整編譯器或軟件堆棧就能充分利用你的硬件。
AI User-to-Hardware Expressiveness。
上圖說明了「user-to-hardware expressiveness」的主要挑戰(zhàn)。我們需要準(zhǔn)確地描述用戶需求,并將其轉(zhuǎn)換成硬件層(處理器、GPU、內(nèi)存、網(wǎng)絡(luò)等)能夠理解的語言。這里的主要問題是,雖然左箭頭(programming frameworks)主要是面向用戶的,但將編程代碼轉(zhuǎn)換為機(jī)器碼的右箭頭卻不是。因此,我們需要依靠智能的編譯器、庫和解釋器來無縫地將你的高級代碼轉(zhuǎn)換為機(jī)器表示。
這種語義鴻溝難以彌合的原因有兩個:
1)硬件中有豐富的方法來表達(dá)復(fù)雜的計算。你需要知道可用的處理元素的數(shù)量(如 GPU 處理核心)、你的程序需要的內(nèi)存數(shù)量、你的程序所展示的內(nèi)存訪問模式和數(shù)據(jù)重用類型,以及計算圖中不同部分之間的關(guān)系。以上任何一種都可能以意想不到的方式對系統(tǒng)的不同部分造成壓力。為了克服這個問題,我們需要了解硬件 / 軟件堆棧的所有不同層是如何交互的。雖然你可以在許多常見的場景中獲得良好的性能,但現(xiàn)實中還有無盡的長尾場景,你的模型在這些場景中可能表現(xiàn)極差。
2)雖然在計算世界中,軟件是慢的,硬件是快的,但部署世界卻在以相反的方式運(yùn)行:深度學(xué)習(xí)領(lǐng)域正在迅速變化;每天都有新的想法和軟件更新發(fā)布,但構(gòu)建、設(shè)計和試生產(chǎn)(流片)高端處理器需要一年多的時間。在此期間,目標(biāo)軟件可能已經(jīng)發(fā)生了顯著的變化,所以我們可能會發(fā)現(xiàn)處理器工程師一年前的新想法和設(shè)計假設(shè)已經(jīng)過時。
因此,你(用戶)仍然需要探索正確的方法來識別計算耗時瓶頸。為此,你需要了解處理器,特別是當(dāng)前的 AI 加速器,以及它們?nèi)绾闻c你的 AI 程序交互。
原文鏈接:https://medium.com/@adi.fu7/ai-accelerators-part-i-intro-822c2cdb4ca4
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。