NPU是什麼?手機和電腦裡的AI專用電路原理
NPU(神經網路處理單元)是專門用來處理AI計算大部分的「相乘再相加」,以很少的電力大量完成這種計算的電路。它內建在手機和電腦的核心晶片裡,讓修圖、聽寫語音等AI功能在裝置內執行。不過,它不是什麼都能變快的電路,速度也不只由效能數字「TOPS」決定。
這篇文章可以了解
- NPU負責的計算,以及它和CPU、GPU的分工差異
- 用很少的電力執行AI的技巧(把數字變短、減少搬運量)
- 手機、電腦、資料中心裡的AI用電路
- 「TOPS」數字的意思,以及為什麼不能直接拿來比較
先備知識:如果知道AI的計算是把數字「相乘再相加」的重複,會比較容易閱讀。這在「AI為什麼要用GPU?」中說明。
生活中的例子
在電腦賣場或規格表上,越來越常看到「AI PC」「搭載NPU」這類字眼。Microsoft在2024年5月,發表了名為「Copilot+ PC」的電腦類別。條件之一,是要有每秒能做40兆次以上運算的NPU。iPhone的規格表上,也列著「16核心Neural Engine」這樣的項目。
把照片裡不小心入鏡的人消掉、把錄音轉成文字、在視訊會議中把背景模糊。這些功能的背後,常常是NPU在工作。這篇文章會依序來看NPU是做什麼的電路,以及為什麼要特地做出專用的電路。
NPU的工作是大量的「相乘再相加」
現在的AI,多半是由稱為神經網路的計算步驟構成的。內容是把輸入的數字乘上固定的數(權重)再相加,並且重複非常多次。
1次乘法,加上把結果累加起來的1次加法,這個組合稱為乘積累加運算。也取英文字首寫成MAC。AI需要幾次乘積累加的算法,在「矩陣乘法要算幾次?」中介紹。
NPU是排了大量乘積累加電路、AI專用的計算零件。名稱是英文Neural Processing Unit的縮寫,意思是「處理神經網路的單元」。它多半不是獨立的晶片,而是和CPU、GPU一起,做在同一顆晶片裡。這種把機器主要電路整合成1顆的晶片,稱為SoC(系統單晶片)(「手機裡有哪些半導體?」)。
各家公司的叫法不同。Apple稱為Neural Engine,Qualcomm稱為Hexagon NPU。這篇文章把手機和電腦裡AI專用的電路,統稱為NPU。
為什麼不用CPU或GPU,而要專用的電路?
CPU和GPU都能做AI的計算。問題在於電力。手機和筆電靠電池運作,沒有風扇的手機,散熱能力也有限。所以,同樣的電力能做多少計算(每單位電力的效能)就很重要。
CPU什麼都能處理,但相對地,除了計算本身,也花了很多電力在其他地方。因為把指令一個一個取出、解讀,再決定下一步要做什麼的電路,一直在運作(「CPU是什麼?」)。NPU省去了這類機制的大部分,事先決定好計算的流程。AI的模型(把權重和計算步驟整合在一起的東西),要先轉換成給那個NPU用的步驟,再執行。
技巧1:把數字變短
在AI的計算中,就算稍微降低數字的精細度,答案也常常幾乎不變。所以,不用32位元(排成32個的0和1)的小數,而改用8位元的整數。這種格式稱為INT8,可以表示-128到127共256種整數。
也就是把原本的小數,換成256個等級中最接近的值。這種替換,在AI領域稱為「量化」。乘法的電路處理的位數越少,就越小,用的電力也越少。根據2014年發表的估計,8位元整數乘法的電力,約是32位元小數乘法的18分之1。
有些產品也會用16位元的小數(FP16),或更短的4位元整數。數字格式的差異,整理在「FP32、FP16、BF16、INT8的差異」的表格中。
技巧2:減少搬運量
其實,比計算本身更耗電的,是搬運數字。根據同一時期的估計,從晶片外的記憶體(DRAM)讀1個數字,要花1次乘法100倍以上的電力。所以NPU在計算電路的旁邊放了小型記憶體,把搬來一次的數字重複使用很多次。
在AI的計算中,同一份權重可以用在影像的很多位置,或很多人份的輸入上。把放在旁邊記憶體裡的數字用完再換下一批,和遠處記憶體的來回就會減少。從記憶體搬運的速度在AI中有多重要,在「HBM是什麼?」中也有說明。
和GPU的差異
GPU也是排了大量計算電路的零件。不過GPU依程式不同,可以處理畫圖、訓練AI、科學技術計算等廣泛的工作。因為靈活,用的電力也大,資料中心用的GPU,有些1個就要用到數百瓦。
手機和電腦的NPU,主要把工作集中在一件事上:用訓練時決定好的權重,對新的輸入給出答案。這種計算稱為推論。決定權重的「訓練」,通常是在資料中心用GPU等零件進行。差異整理在「CPU、GPU、NPU的差異」和「AI訓練與推論的差異」的表格中。
在裝置內執行的好處
AI的計算,也可以在網路另一端的資料中心進行(「雲端運算是什麼?」)。儘管如此,在裝置內執行還是有它的理由。Google給開發者的資料,列出了以下幾個主要好處。
- 照片、聲音等資料,不必傳到裝置外
- 沒有連上網路也能使用
- 不用等待通訊的來回
- 提供服務的一方,計算的費用會減少
像這樣不在資料中心,而在手邊的機器上執行AI,稱為「邊緣AI」或「裝置端AI」。邊緣,指的是位在網路末端的機器。要靠電池長時間運作,每單位電力效能高的NPU很適合。
NPU裝在哪裡?
手機
2017年,內建AI專用電路的手機SoC接連發表。Huawei在9月發表了Kirin 970,並說明它有專用的NPU。同一個月Apple發表的A11 Bionic,則放入了該公司第一個Neural Engine。現在,Apple的A系列、Qualcomm的Snapdragon等,很多手機的SoC都有AI用的電路。Google也從2021年的Pixel 6開始,使用自家的SoC「Tensor」。
電腦
Apple從Mac用的M1(2020年)開始,在SoC裡放入Neural Engine。在Windows電腦上,前面提到的Copilot+ PC成為NPU普及的契機。2024年推出的第一批Copilot+ PC,使用了Qualcomm的Snapdragon X系列。依Qualcomm的規格,它的NPU是45 TOPS。之後,也加入了使用AMD和Intel晶片的產品。
資料中心
Google在2016年5月,公開了自家為AI打造的晶片「TPU」(張量處理單元)。當時Google說明,已經在資料中心使用1年以上。TPU也是專門做矩陣乘積累加的晶片,但它是資料中心用的大型零件,從第2代(2017年)起也用於訓練。這類零件常被稱為「AI加速器」(讓AI計算變快的專用零件)。NPU這個名稱,主要用在手機和電腦裡的電路。原理在「AI為什麼要用GPU?」中介紹。
TOPS是什麼?數字的看法
NPU的效能,常用「1秒能做幾兆次運算」來表示。這個單位稱為TOPS(每秒兆次運算)。T是代表「兆」的tera,OPS是「每秒運算次數」的英文縮寫。40 TOPS就是1秒40兆次。
這個數字通常是理論上的最大值。計算方式是把乘積累加電路的數量,乘上2(乘法和加法算成2次),再乘上電路1秒運作的次數。這是所有電路都不休息地工作時的值,實際的AI幾乎不可能達到。
而且,就算是同一顆晶片,數字也會因計算條件而改變。主要的條件如下。
- 數字的格式:數字越短,一次能算的越多,所以用4位元來算,數字可能比8位元大。用16位元的小數來算,則會變小。
- 跳過0的技巧:有些數值會省略權重中0的部分的計算,再把省略的部分也算成「計算過了」。0很多的狀態稱為「稀疏」,所以也寫成稀疏時的數值。
- 搬運的速度:TOPS不包含從記憶體搬運數字的速度。搬運得慢,電路就只能等數字送來。
- 軟體的支援:NPU不支援的計算,會交給CPU等零件。
因此,不能只用TOPS比較不同廠商或不同世代的NPU。比較時,最可靠的是看實際執行想用的App或模型所測得的結果(基準測試)。
NPU常用在哪些工作
在手機上,NPU常用於照片的處理,例如辨識拍到的物體和人、減少暗處照片的雜訊、把背景模糊。也有把說的話轉成文字、翻譯外語這類聲音和語言的處理。在電腦上,則有在視訊會議中把相機背景模糊等功能。Windows的「Windows Studio Effects」,就是給搭載NPU的電腦用的功能。
最近,也出現了在裝置內執行小型文字生成AI(「生成式AI怎麼運作?」)的例子。Apple在2024年說明,會在裝置內執行約30億個參數的模型。參數是指權重等在訓練中決定的數字。不過,哪些功能在NPU上執行,依產品和App而不同。
NPU的限制
軟體不支援,就不會被使用
NPU的構造,依廠商和機種而不同。所以,需要一種軟體,載入訓練好的模型,轉換成能在該硬體上執行的形式再執行。這種軟體稱為推論執行環境。如果App或作業系統沒有設計成使用NPU,NPU就不會工作。
大型模型放不進去
NPU旁邊的記憶體很小,所以模型的權重通常放在裝置的記憶體裡。手機的記憶體,例如iPhone 16 Pro(2024年)是8 GB(根據拆解調查)。這要和作業系統及其他App共用(「記憶體和儲存空間有什麼不同?」)。在資料中心執行的大型模型,直接是放不進去的。給裝置用的,要選參數較少的模型,再把數字變短,讓模型變小。
常見的誤解
誤解:有了NPU,電腦或手機做什麼都會變快
實際上,NPU負責的,只有AI推論中為NPU設計的部分。試算表、遊戲的畫面、網頁的顯示等,還是和以前一樣由CPU和GPU處理。如果App沒有設計成使用NPU,NPU就不會被用到。「AI PC」這個名稱,容易讓人覺得整台電腦都會變快,這就是誤解的來源。
誤解:TOPS的數字越大,AI就越快
實際上,TOPS是條件不一致的理論最大值,會隨數字的格式和跳過0的技巧而改變。另外,在文字生成AI中,從記憶體搬運數字的速度,常常會先成為上限(見下一節「從數字來看」)。因為它是規格表上容易比較的數字,所以常被拿來當作唯一的判斷依據。
誤解:手機的AI功能,都是在NPU上執行
實際上,要用CPU、GPU、NPU哪一個來執行,是由App或作業系統的軟體選擇的。例如在Apple的AI用軟體(Core ML)中,開發者可以指定要用的零件。如果沒有指定,Core ML會從能用的零件中選擇。大型的處理,也可能在網路另一端的伺服器進行。Apple在2024年說明,會分別使用裝置內的模型和伺服器的模型。
從數字來看
| 項目 | 數字 | 補充 |
|---|---|---|
| A11 Bionic的Neural Engine(2017年) | 每秒最多6,000億次 | Apple的發表 |
| 第一代TPU(2016年公開) | 最高92 TOPS | 8位元整數。資料中心用(2017年的論文) |
| Snapdragon X Elite的NPU | 45 TOPS | 8位元整數。Qualcomm的規格(2024年) |
| Copilot+ PC的條件(2024年) | NPU達40 TOPS以上 | 記憶體16 GB以上、儲存空間256 GB以上也是條件 |
| 1次乘法的電力 | 8位元整數約0.2 pJ,32位元小數約3.7 pJ | pJ(皮焦耳)是1兆分之1焦耳 |
| 從外部記憶體(DRAM)讀取1個32位元數字的電力 | 約640 pJ | 約是32位元小數乘法的170倍 |
上面4列的計算條件並不一致,所以不是可以互相比較的數字。電力的2列,是Horowitz在2014年提出、針對45 nm這個舊世代的估計(依據Han等人、Sze等人論文中的表)。製程世代進步,數值本身也會改變。即使如此,Sze等人2017年的解說,仍把「搬運數字的電力比計算大」當作AI晶片設計的出發點。
我們粗略估算一下搬運速度的影響。假設要執行有30億個權重的文字AI,並把每個權重縮成4位元。8位元是1位元組,所以每個是0.5位元組。權重全部約1.5 GB。文字生成AI每產生1個詞(精確來說是token),幾乎都要把所有權重讀出來一次。
即使是每秒能從記憶體搬運135 GB的晶片(Snapdragon X Elite的規格),讀1次也要約0.011秒。所以1秒最多約90個詞。另一方面,計算是每個權重做乘法和加法共2次,每個詞約60億次。用45 TOPS計算約0.00013秒,只要讀取時間的約80分之1。在這種情況下,就算把TOPS加倍,速度也幾乎不變。這裡為了簡化,省略了其他資料的讀寫,以及數字格式的差異。
進一步學習
- 用表格看差異:CPU、GPU、NPU的差異、AI訓練與推論的差異、DDR、LPDDR、GDDR、HBM的差異
- 用數字試試看:記憶體頻寬計算器(可以計算記憶體1秒能搬運的量)
- 下一步的用語:訓練後量化(把訓練完成的模型的數字變短的方法)、結構化稀疏(把0排成固定的形式,省略計算)、脈動陣列(乘積累加電路的一種排列方式)
- 計算計算量:「矩陣乘法要算幾次?」
- 相關的文章:「AI為什麼要用GPU?」、「HBM是什麼?」