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