人工智慧頂級會議最佳論文里的「DaDianNao」是什麼鬼?
最近對人工智慧領域的 AI 加速晶片感興趣,在翻閱 Google 的第一代 TPU 論文時,在相關工作中看到了 DaDianNao,PuDianNao,ShiDianNao。看的我一臉懵逼,這是什麼?漢語拼音嗎?後來經過搜索,發現這是中科院計算所的一系列研究成果,後來直接催生了中國晶片獨角獸 — 寒武紀的誕生。
故事得從20年前說起,當時江西南昌有倆親兄弟,哥哥叫陳雲霽,弟弟陳天石。他們分別於97、01 年先後考入中國科學大學少年班學習,後來攻讀研究生時,哥哥在計算所跟胡偉武(龍芯之父)做晶片方面研究,弟弟在中科大跟著陳國良、姚新做人工智慧演算法方面研究。08年的時候,他倆想合起來做一些人工智慧晶片方面的事情。
2012年到2014年,倆兄弟和 當時任職於法國巴黎綜合理工學院(Inria Saclay)的 Olivier Temam 教授一起合作,做人工智慧加速器的研究。最開始叫做 electric brain,是一個電子的大腦,但是外籍教授 Olivier 說起個中國的名字,這樣別人會覺得外國的東西,很有意思,很先進。於是就有了 DianNao 這個漢語拼音的名字了。中科院有專門頁面介紹「DianNao」項目,項目的核心是提出了一系列訂製的AI加速器的設計方案。
當時他們研究領域想要解決的三大矛盾是:
- 有限規模的硬體 vs 任意規模的演算法:硬體出廠後就固定了,但是演算法是研究員自己定義的,會是任意的
- 結構固定的硬體 vs 千變萬化的演算法:演算法有影像、語音、自然語言處理等領域,而硬體構造在生產之後就固定了
- 能耗受限的硬體 vs 精度優先的演算法:硬體功耗受制於場景是受限的,但是演算法研究員希望精度越高越好
陳氏兄弟的解決之道:
- 虛擬化:沒有讓硬體運算單元和演算法神經元一一對應起來,而是採用了對小尺度神經網路分時復用的方法來支援任意規模的神經網路
- 智慧指令集:自動化抽取各種深度學習演算法共性基本運算元,設計首個深度學習指令集來高效處理演算法。
- 利用神經網路對於計算誤差的容忍能力,進行稀疏化神經網路處理,這樣降低了功耗,提高了精度。
他們設計出了第一個加速器 DianNao–電腦。第二個加速器叫DaDiannao — 大電腦。這個是 DianNao 的多核版本,通過多片設計,可以將較大的模型放在加速器(晶片)的記憶體上運行,提高效率。第三個加速器ShiDianNao — 視電腦:將 AI 加速器與感測器直連,從而減少記憶體通訊的開銷,是屬於端/邊側攝影機上的 AI 加速器。電腦和大電腦只能做深度學習處理,還有很多其他的人工智慧演算法, 怎麼去支援?於是就有了 PuDianNao — 普電腦。它比較普世,能支援很多機器學習演算法。PuDianNao 也是 DianNao 項目的最後一個工作。我大膽猜測是因為再接著做下去,圍繞電腦起名很困難。後來16年時他們提出了國際首個神經網路通用指令集 DianNaoYu — 電腦語。這些指令集相當於深度學習演算法界的樂高積木,是演算法研究員與加速器打交道的唯一介面。
他們當時的 DianNao 論文獲得了這個領域最重要的國際會議 — ASPLOS 的最佳論文獎。這也是亞洲地區,第一次在電腦體系結構的這種頂尖的國際會議上拿獎。他們研究最大的創新點在於前人做的不是一個完備的處理器,只能說是一個神經網路功能部件,只適用於特定大小的神經網路。而他們的工作是一個真正意義上完備的處理器,能夠支援任意規模的神經網路。打個比方,只能處理兩個數相加,而不能處理10000甚至任意個數相加的硬體,只能叫加法器,而不能叫處理器。
後來弟弟陳天石從中科院出來創辦了寒武紀,哥哥也一起合夥。但半年之後,哥哥因為覺得還是喜歡搞科研,所以又回到了中科院。
對上述內容感興趣的朋友可以去看看 B 站上 陳雲霽的智慧之芯影片。大佬演講風趣幽默,著裝樸實,讓人印象深刻。有兩篇陳天石的採訪放到了文末,從文章來看很清楚自己的能力邊界,他強調了多次,做好本職工作,好好搬磚,感覺就是對有志青年的淳淳教導。
彩蛋
2015 年,陳天石有一次「問我任何事」的活動,我翻看了裡面的問題,有好幾個問題非常有意思。比如有人會問中科大的神通、天才和普通人的區別,還有家長因為孩子無法成為神通而苦惱。對這些問題,他沒有一貫我們看到的好為人師的印象,回答很有借鑒意義,能給現在焦慮的家長們一些啟發,點擊閱讀原文可以查看。