本質區別,看懂AI晶元與傳統晶元

2021-09-02 09:24:31 字數 3929 閱讀 2900

所謂的ai晶元,一般是指針對ai演算法的asic(專用晶元)。

傳統的cpu、gpu都可以拿來執行ai演算法,但是速度慢,效能低,無法實際商用。

比如,自動駕駛需要識別道路行人紅綠燈等狀況,但是如果是當前的cpu去算,那麼估計車翻到河裡了還沒發現前方是河,這是速度慢,時間就是生命。如果用gpu,的確速度要快得多,但是,功耗大,汽車的電池估計無法長時間支撐正常使用,而且,老黃家的gpu巨貴,經常單塊上萬,普通消費者也用不起,還經常缺貨。另外,gpu因為不是專門針對ai演算法開發的asic,所以,說到底,速度還沒到極限,還有提公升空間。而類似智慧型駕駛這樣的領域,必須快!在手機終端,可以自行人臉識別、語音識別等ai應用,這個必須功耗低,所以gpu out!

所以,開發asic就成了必然。

說說,為什麼需要ai晶元。

ai演算法,在影象識別等領域,常用的是cnn卷積網路,語音識別、自然語言處理等領域,主要是rnn,這是兩類有區別的演算法。但是,他們本質上,都是矩陣或vector的乘法、加法,然後配合一些除法、指數等演算法。

乙個成熟的ai演算法,比如yolo-v3,就是大量的卷積、殘差網路、全連線等型別的計算,本質是乘法和加法。對於yolo-v3來說,如果確定了具體的輸入圖形尺寸,那麼總的乘法加法計算次數是確定的。比如一萬億次。(真實的情況比這個大得多的多)

那麼要快速執行一次yolo-v3,就必須執行完一萬億次的加法乘法次數。

這個時候就來看了,比如ibm的power8,最先進的伺服器用超標量cpu之一,4ghz,simd,128bit,假設是處理16bit的資料,那就是8個數,那麼乙個週期,最多執行8個乘加計算。一次最多執行16個操作。這還是理論上,其實是不大可能的。

那麼cpu一秒鐘的巔峰計算次數=16x4gops=64gops。

這樣,可以算算cpu計算一次的時間了。

同樣的,換成gpu算算,也能知道執行時間。因為對gpu內部結構不熟,所以不做具體分析。

再來說說ai晶元。比如大名鼎鼎的谷歌的tpu1。

tpu1,大約700m hz,有256x256尺寸的脈動陣列,如下圖所示。一共256x256=64k個乘加單元,每個單元一次可執行乙個乘法和乙個加法。那就是128k個操作。(乘法算乙個,加法再算乙個)

另外,除了脈動陣列,還有其他模組,比如啟用等,這些裡面也有乘法、加法等。

所以,看看tpu1一秒鐘的巔峰計算次數至少是=128k x 700mhz=89600gops=大約90tops。

對比一下cpu與tpu1,會發現計算能力有幾個數量級的差距,這就是為啥說cpu慢。

當然,以上的資料都是完全最理想的理論值,實際情況,能夠達到5%吧。因為,晶元上的儲存不夠大,所以資料會儲存在dram中,從dram取資料很慢的,所以,乘法邏輯往往要等待。另外,ai演算法有許多層網路組成,必須一層一層的算,所以,在切換層的時候,乘法邏輯又是休息的,所以,諸多因素造成了實際的晶元並不能達到利潤的計算峰值,而且差距還極大。

可能有人要說,搞研究慢一點也能將就用。

目前來看,神經網路的尺寸是越來越大,引數越來越多,遇到大型nn模型,訓練需要花幾周甚至一兩個月的時候,你會耐心等待麼?突然斷電,一切重來?(曾經動手訓練乙個寫**的ai,然後,一次訓練(50輪)需要大約一天一夜還多,記得如果第一天早上開始訓練,需要到第二天下午才可能完成,這還是模型比較簡單,資料只有幾萬條的小模型呀。)

修改了模型,需要幾個星期才能知道對錯,確定等得起?

突然有了tpu,然後你發現,吃個午飯回來就好了,引數優化一下,繼續跑,多麼爽!

計算速度快,才能迅速反覆迭代,研發出更強的ai模型。速度就是金錢。

gpu的核心結構不清楚,所以就不比較了。肯定的是,gpu還是比較快的,至少比cpu快得多,所以目前大多數都用gpu,這玩意隨便乙個都能**輕鬆上萬,太貴,而且,功耗高,經常缺貨。不適合資料中心大量使用。

總的來說,cpu與gpu並不是ai專用晶元,為了實現其他功能,內部有大量其他邏輯,而這些邏輯對於目前的ai演算法來說是完全用不上的,所以,自然造成cpu與gpu並不能達到最優的價效比。

谷歌花錢研發tpu,而且目前已經出了tpu3,用得還挺歡,都開始支援谷歌雲計算服務了,貌似6點幾美元每小時吧,不記得單位了,懶得查.

可見,谷歌覺得很有必要自己研發tpu。

就醬。看到有答案點我名說不應該用cpu做對比,這個鍋我不背。

做一點解釋。

目前在影象識別、語音識別、自然語言處理等領域,精度最高的演算法就是基於深度學習的,傳統的機器學習的計算精度已經被超越,目前應用最廣的演算法,估計非深度學習莫屬,而且,傳統機器學習的計算量與 深度學習比起來少很多,所以,我討論ai晶元時就針對計算量特別大的深度學習而言。畢竟,計算量小的演算法,說實話,cpu已經很快了。而且,cpu適合執行排程複雜的演算法,這一點是gpu與ai晶元都做不到的,所以他們三者只是針對不同的應用場景而已,都有各自的主場。

至於為何用了cpu做對比?

而沒有具體說gpu。是因為,我說了,我目前沒有系統檢視過gpu的**,不了解gpu的情況,故不做分析。因為積累的緣故,比較熟悉超標量cpu,所以就用熟悉的cpu做詳細比較。而且,小型的網路,完全可以用cpu去訓練,沒啥大問題,最多慢一點。只要不是太大的網路模型。

那些ai演算法公司,比如曠世、商湯等,他們的模型很大,自然也不是一塊gpu就能搞定的。gpu的算力也是很有限的。

至於說cpu是序列,gpu是並行。

不知道為啥就不能用cpu來比較算力?

拜託,gpu本來是從cpu中分離出來專門處理影象計算的,也就是說,gpu是專門處理影象計算的。包括各種特效的顯示。這也是gpu的天生的缺陷,gpu更加針對影象的渲染等計算演算法。但是,這些演算法,與深度學習的演算法還是有比較大的區別,而我的回答裡提到的ai晶元,比如tpu,這個是專門針對cnn等典型深度學習演算法而開發的。另外,寒武紀的npu,也是專門針對神經網路的,與tpu類似。

谷歌的tpu,寒武紀的diannao,這些ai晶元剛出道的時候,就是用cpu/gpu來對比的。

無圖無真相,是吧?

看看,谷歌tpu**的摘要直接對比了tpu1與cpu/gpu的效能比較結果,見紅色框:

看不清?

沒事,放大。

這就是摘要中介紹的tpu1與cpu/gpu的效能對比。

再來看看寒武紀diannao的*****,摘要中直接就是diannao與cpu的效能的比較,見紅色框:

回顧一下歷史。

上個世紀出現神經網路的時候,那一定是用cpu計算的。

位元幣剛出來,那也是用cpu在挖。目前已經進化成asic礦機了。位元大陸了解一下。

從2023年開始開啟的深度學習熱潮,cpu與gpu都能計算,發現gpu速度更快,但是貴啊,更多用的是cpu,而且,那時候gpu的cuda可還不怎麼樣,後來,隨著nn模型越來越大,gpu的優勢越來越明顯,cuda也越來越6,目前就成了gpu的專場。

寒武紀2023年的diannao(npu)比cpu快,而且更加節能。asic的優勢很明顯啊。這也是為啥要開發asic的理由。

至於說很多公司的方案是可程式設計的,也就是大多數與fpga配合。你說的是商湯、深鑑麼?的確,他們發表的**,就是基於fpga的。

這些創業公司,他們更多研究的是演算法,至於晶元,還不是重點,另外,他們暫時還沒有那個精力與實力。fpga非常靈活,成本不高,可以很快實現架構設計原型,所以他們自然會選擇基於fpga的方案。不過,最近他們都大力融資,官網也在招聘晶元設計崗位,所以,應該也在涉足asic研發了。

如果以fpga為代表的可程式設計方案真的有巨大的商業價值,那他們何必砸錢去做asic?

require與import的本質區別

node程式設計中最重要的就是模組化,import和require都是被模組化所使用的 遵循規範 require是amd規範引入 amd是依賴前置,預載入 import是es6的乙個語法標準,如果要相容瀏覽器的話必須轉化成es5的語法 require是執行時間,所以require理論上可以執行在 的...

C 指標與引用的本質區別

看如下例子 int a 0 int型變數a int pi a 指向int型的指標變數pi int ri a int型的引用ri,引用的變數為a int rt int 0x01 int型的引用rt,引用的記憶體位址為0x01 到了編譯器,產生四個符號,a,pi,ri,rt.rt標示了一塊記憶體,這塊記...

分類與聚類的本質區別

機器學習中有常見的兩類大問題,乙個是分類,乙個是聚類。聚類分析是研究如何在沒有訓練的條件下把樣本劃分為若干類。在分類中,已知存在哪些類,即對於目標資料庫中存在哪些類是知道的,要做的就是將每一條記錄分別屬於哪一類標記出來。聚類需要解決的問題是將已給定的若干無標記的模式聚集起來使之成為有意義的聚類,聚類...