請更新您的瀏覽器

您使用的瀏覽器版本較舊,已不再受支援。建議您更新瀏覽器版本,以獲得最佳使用體驗。

科技

從人工智慧的大型語言模型,回顧記憶體匱乏症與可能解藥

科技新報

更新於 2023年05月09日15:37 • 發布於 2023年05月10日08:00

人工智慧訓練的浮點運算量(Flops)每年都大幅增長,自然語言處理(NLP)、機器視覺(CV)和語音識別學習過去十年,以 2 年 15 倍速度攀升。自從 Google 在 2017 年推出 Transformer 模型,更激增到「2 年 750 倍」。但瓶頸並非運算能力,而是記憶體的「容量」(Capacity)、「頻寬」(Bandwitdh)與「延遲」(Latency),無論晶片內、晶片之間還是人工智慧加速器間通訊。

▲ 摩爾定律遠遠追不上人工智慧浮點運算能量,尤其大型語言模型(LLM)。

訓練人工智慧模型的記憶體需求,因訓練過程需儲存中間激勵函數,通常會比參數量增加數倍記憶體容量。普遍用在自然語言處理和機器視覺的 Transformer 模型問世後,參數量呈 2 年 240 倍超指數增長,但 GPU 記憶體容量卻僅 2 年 2 倍成長。

從 Nvidia 在 2016 年 P100(Pascal)最新 H100(Hopper),FP16 性能提升 46 倍(21.2TFlops → 989.5TFlops),但記憶體容量卻只長 5 倍(16GB→80GB),記憶體理論頻寬更僅約 3 倍(720GB→2TB/s),代表每個 Flops 分到的記憶體頻寬只會越來越少。

▲ GPU 記憶體容量和頻寬成長幅度也遠遠看不到新模型的車尾燈。

隨著不斷飆升的模型規模,大型語言模式光模型權重記憶體,就可能需要 100GB 以上容量,導致大型模型訓練大部分時間(超過 40%),其實都沒有花在矩陣乘法運算,而是在等資料傳輸,人工智慧訓練難以避免的「記憶體撞牆」(Memory Wall)。

同場加映兩台頂級超級電腦的節點網路頻寬,就更清楚影響究竟多大。當初富士通設計 A64FX 處理器,其實可選擇 1,024 位元長的運算資料寬度,而非後來的 512 位元。換言之,本來可推出一台有「兩倍 Flops」的超級電腦,但選擇不這樣做,其因甚明:沒有足夠頻寬,就無法達到真正效能,這也反映到富岳擁有較高峰值性能百分比(實際性能 Rmax ÷ 理論性能 Rpeak)。

冰凍三尺,非一日之寒

由於運算能力和記憶體差距越來越大,「記憶體撞牆」也讓訓練更大模型更困難。如果不大量最佳化,再高階 GPU 也只有非常低 Flops 利用率,但就算大量最佳化,很多時間還是花在等記憶體,大型語言模型 Flops 也只能達 60% 左右。

同樣情況也發生在核心數量持續穩定成長的 CPU,受制於有限處理器腳位量和主機板空間,處理器腳座越來越大(尤其伺服器),每個核心分到的記憶體頻寬(CPU 反而較沒有容量問題)也越來越少。

但這件事並不是今天才突然發生,時間放遠,近 20 年運算設備峰值計算能力提高「9 萬」倍,但記憶體和匯流排頻寬卻只有 30 倍,差了整整 3 千倍。看更遠點,記憶體速度逐漸跟不上運算能力,更早 1970 年代末期,精簡指令集電腦(RISC)陸續誕生時就高度重視,如大型化暫存器檔案(Register File)、載入/回存(Load / Store) 架構、騰出更多電晶體預算以便放入更高容量快取記憶體(Cache Memory)等,都是減輕記憶體效能落差的努力。時至今日,面積超過 CPU 核心的高容量多層快取記憶體,只能說是「不是辦法的辦法」。

▲ 看似不大的差距(3.1x vs. 1.4x),長期累積下來就是無法踰越的「3 千倍」巨大鴻溝。

▲ 除了 2017 年英特爾 Skylake-SP 伺服器平台「Purley」曾因 6 通道記憶體而曇花一現罕見反彈,每個 CPU 核心分到的記憶體和 I/O 頻寬,依舊穩定下滑。

山窮水盡疑無路,柳暗花明又一村

眼睜睜看著處理器和記憶體越來越大的差距,難道只能雙手一攤,束手無策?俗語說得好,生命自己會找出路。先將人工智慧訓練法和部署放在一旁,純粹就硬體角度,由小到大,由近到遠,一步步瞧瞧,還有哪些避開「記憶體撞牆」的手段和技巧。

減少主記憶體存取和搬移:GPU 雙雄的選擇

Nvidia GPU 從 A100(Ampere)演化到 H100(Hopper),浮點運算效能增長超過 6 倍,但記憶體頻寬卻只有 1.65 倍,H100 透過分散式共享記憶體(Distributed Shared Memory,或稱 DSMEM)和 L2 快取群播(L2 Multicast),讓一個 SM(Streaming Multiprocessor)資料可直接寫入另一個 SM 的 SRAM(共享記憶體/L1 快取),無須經外部 DRAM 主記憶體執行緒區塊間資料交換,加速約 7 倍,不但有效增加快取記憶體容量,也減少讀寫 DRAM 的頻寬。

▲ 要避開記憶體撞牆最好的方法,就是繞過它。

另一手段是讓 CPU 與 GPU 共享主記憶體,讓 CPU 和 GPU 更快速容易傳遞資料,並減少資料份數。AMD Instinct MI300 與 Nvidia Grace Hopper 就是採取這種方法。

▲ 以往 UMA(Unified Memory Architecture)視為「便宜電腦才用的東西」,但現在反倒成為高效能運算與人工智慧非常重要的技術。

順道一題,早從 21 世紀初期,被 AMD 併購的 ATi 與 Nvidia 構建 GPU 雙雄抗衡局面時,「記憶體控制器內建壓縮傳輸機能」就一直是兩間公司暗中較勁的技術重心,Nvidia 從 GeForce 6800Ultra(NV40)開始,就取得明顯技術領先優勢,持續精進相關技術並申請專利。過去十幾年,ATi 或 AMD GPU 需要更多記憶體頻寬,才能達到 Nvidia 同等級產品的效能,絕對不是偶然。日後如有機會,筆者會特別撰文深度介紹這主題。

打造專用架構晶片:人工智慧加速器

2017 年計算機工業最高榮譽「圖靈獎」(Turing Award)獲獎者、RISC 一詞發明者、經典教科書《計算機結構:計量方法》作者之一 David Patterson 在 ACM Communications 發表文章,大意是:隨著製程提升困難和摩爾定律終結,通用計算晶片每年效能提升僅 3%,深度神經網路加速的特化架構將是未來主流,最具開創性的案例,莫過於 Google 2015 年陸續推出 TPU(張量處理單元),讓深度神經網路(DNN)計算速度提高 15~30 倍,能耗比更比現在 CPU 和 GPU 提升 30~80 倍。不限 Google,近年許多新創公司人工智慧加速器也如出一轍、有志一同做這件事。

所以「理論」於古老論文存在已久,讓「運算多跑一會」的「脈動陣列」(或稱脈動管線,Systolic Pipeline),相隔 30 餘年後,變身為雲端霸主初代人工智慧晶片的靈魂。概念也很簡單,既然運算動作反覆存取記憶體浪費時間,何不「串串樂」,讓資料經過大量相同處理單元(PE,Processing Element)?舉例來說,想連續加法運算,要進行六次 +1,與其反覆存取記憶體六次,不如六個 +1 串在一起,不就畢其功於一役?

但脈動陣列的限制也很明顯:只適用特定運算,缺乏靈活性與泛用性。很幸運的,像普及特徵辨識的卷積神經網路(Convolutional Neural Networks,CNN)就是非常適合的應用,Google 初代 TPU 內轉化為一連串 8 位元整數乘積運算,時脈僅 700MHz,理論尖峰效能就有 92T,推論效率高達同時期 GPU「10 倍」,並兼顧高品質服務反應時間必備的「低延遲」──這對經營廣告業務和銷售雲端服務的 Google 格外重要。

▲ 因 Google 研發 TPU,讓古老 Systolic Pipeline 成為現實產品能用的技術。

Google 雲端 TPU 發展到第四代(第五代應該已在路上),由 4,096 顆 TPU v4 組成的「人工智慧訓練用超級電腦」TPU v4 Pod,首次公開時性能就可達 Top 500 世界排名第一超級電腦「富岳」2 倍,八項 MLPerf 基準測試六項創造歷史性能紀錄。當然,畢竟自己開發專用 ASIC 所費不貲,大概只有 Google 這種家大業大的雲端巨頭才有足夠本錢,迅速開發出如此優秀的人工智慧加速器,並持之以恆推陳出新。

另一個值得一提「徹底針對人工智慧實際工作流程,量身訂做晶片架構」的案例,是 Blaize 的 GSP(Graph Streaming Processor),講白話點就是「不多花一分力做白工」,將記憶體存取和耗電量降到最低。

▲ 雖然「推論」似乎不需很高運算效能和資料精度,但看在物聯網邊緣運算裝置需要低功耗的份上,避免無謂記憶體存取也是降低耗電量的重要手段。

獨樂樂不如眾樂樂:記憶體共享池

現在焦點轉回 CPU。目前資料中心伺服器平台陷入兩個記憶體架構的巨大瓶頸。第一個瓶頸是 DRAM 記憶體傳輸通道與整體頻寬增長,早跟不上 CPU 核心數量成長。第二個瓶頸是分散不同伺服器的 DRAM 記憶體,面臨資源利用率嚴重偏低的閒置窘境。

先檢視第一個元件層次的瓶頸,雖然 CPU 廠商也很積極強化記憶體頻寬,努力直接反應至驚人腳位數。Nehalem(Xeon 5500 / 5600)時代的 LGA1366 是三通道 DDR3,Xeon E5 的 LGA2011 是四通道 DDR3 / DDR4,Skylake-EP(Purley 平台)是 LGA3647 六通道 DDR4,Ice Lake-SP(Whitley 平台)LGA4189 是八通道 DDR4,AMD 第三代 EPYC 的 LGA4094(SP3)是八通道 DDR4,新 Xeon「Sapphire Rapids」(Eagle Stream 平台)LGA4677 是八通道 DDR5,AMD 第四代 EPYC LGA6096(SP5)更是 12 通道 DDR5。但「物理限制」硬是擺在那邊,CPU 廠商無法永無止盡擴充腳位,得另闢蹊徑。

其實以前英特爾也曾選擇將記憶體控制器功能分而治之,經序列式(Serial)協定存取記憶體,像英特爾 Xeon 平台曾出現 FB-DIMM、SMI 和 SMI2,以及 IBM Power 的 OMI,也是眾多高階伺服器行之有年的作法。不過還是一句話:有極限。

▲ 沒撐幾年就默默消失的 FB-DIMM 已是英特爾伺服器平台史的黑歷史。

接著再深究第二個伺服器應用平台層次的瓶頸。人們對記憶體的需求只增不減,以微軟 Azure 為例,DRAM 佔資料中心 50% 伺服器成本,其他雲端巨頭亦相去不遠。

但很吊詭的是,規模越大的資料中心,卻有更嚴重的記憶體閒置問題,Google 報告指出,資料中心 DRAM 利用率只有 40%,微軟也曾表示,當 Azure 所有 CPU 核心都配給虛擬機器後,仍有 25% 記憶體容量沒有 CPU 用到,處於閒置狀態。對 Google 和微軟這種大型雲端服務業者來說,這麼高記憶體閒置率,形同數十億美元損失。

除此之外,資料中心並不是只有伺服器 CPU 才擁有高容量 DRAM,像早佔一席之地的 GPU、崛起中 SmartNIC / DPU 和各式各樣人工智慧加速器,DRAM 容量也相當可觀,進一步惡化整體記憶體資源無法充分利用的慘狀。

因此 IBM 主導的 OpenCAPI、「反英特爾陣營」發起的 Gen-Z、英特爾帶頭的 CXL(Compute Express Link),即使初衷略有差異,但都企圖利用 PCI Express 的高速傳輸率,實現 CPU、各類加速器(GPU、AI、FPGA、SmartNIC、DPU)、記憶體與資料儲存單元間的低延遲互連,最終目的不外乎「跨越 CPU 與周邊裝置的藩籬,將記憶體虛擬成全部運算單元共用的共享池」,大幅提升記憶體資源的應用彈性與效率。

歷經多年競合,CXL 已成約定俗成的業界標準,連 AMD Zen 4 世代 EPYC 都共襄盛舉(CXL 2.0),不限伺服器平台,也預定導入消費型 CPU,三星和 SK 海力士等記憶體大廠,也推出 Type 3 CXL 記憶體擴充卡,藉 PCIe 插槽安裝多組 CXL 記憶體裝置,可增加近 50% 記憶體容量與 40% 記憶體頻寬。

▲ CXL 三種應用架構,左起「利用 CXL 協定將 CPU 的記憶體分享給週邊裝置」的 Type 1、「利用 CXL 協定讓 CPU 和周邊裝置存取彼次記憶體,動態資源配置」的 Type 2、「利用 CXL 協定擴充 CPU 記憶體容量和頻寬」的 Type 3。

依舊難解的「延遲」:方興未艾的堆積木大戰

上述幾個解決方案,「看起來」同時克服記憶體「頻寬」和「容量」宿疾,但還剩下一個極度難解的課題,就是「延遲」。就系統層面看,整體記憶體延遲之所以持續成長,可歸納以下三點:

  • 越來越多快取記憶體階層(Cache Hierarchy)。

  • 因 DRAM 記憶體分散至不同 CPU,激增存取流程階段,任何一筆記憶體存取,隨時有機會「遠渡重洋」到遙遠的另一端。

  • 數量激增的 CPU 核心結合以上兩點,讓快取資料一致性協定(Cache Coherence Protocol)製造更可觀的延遲。

但很諷刺的是,放眼整個處理器業界,扣除「釜底抽薪」的專用架構晶片,不論 CPU 還是 GPU,「靠越近,跑越快」原則依然有效,「快取記憶體堆堆樂」仍是縮短整體記憶體延遲的主要途徑。

距離運算單元最近的記憶體,一般是內建於處理器、多數為快取記憶體的 SRAM。為什麼這些處理器廠商不將更多 SRAM 放在更靠近運算單元的位置?答案也很簡單:成本。偏偏晶片內 SRAM 製造成本,並不會跟著製程微縮而降太多,還有可能因更先進製程越來越貴。

台積電於國際電子元件會議(IEDM,IEEE International Electron Devices Meeting)發表的論文,3 奈米(N3)和 5 奈米(N5)製程 SRAM 位元,大小分別為 0.0199μm² 和 0.021μm²,僅縮小約 5%,改良型 3 奈米(N3E)製程更糟糕,維持 0.021μm²,跟 5 奈米比幾乎沒有縮減。這代表台積電若最先進製程實作 1GB 容量 SRAM,加上相關控制邏輯電路,將需要超過 400mm² 晶片面積,幾乎是 Nvidia 最高階 GPU H100(814mm²)一半大──H100 的 L2 快取容量也不過 60MB。

這也是為何先進封裝的重要性,越來越水漲船高的主因,AMD 第四代 EPYC 處理器 3D V-Cache 衍生款「Genoa-X」就是最好例證,12 個 8 核心 CCD(Core Complex Die)上面個別多一顆 64MB 的 SRAM 顆粒,讓最高 L3 快取總容量從 384MB(32MB × 12 CCD)激增三倍至 1,152MB(96MB × 12 CCD),再記入 96MB 的 L2 快取和 3MB 的 L1 快取,總 SRAM 容量是驚人的 1.25GB。

▲ 透過 3D V-Cache,AMD 讓 96 核心 EPYC 處理器有超過 1GB 容量的 L3 快取。

AMD GPU 和資料中心 APU 也採類似策略,最新 Radeon RX7000(Navi 3x)將 64 位元寬度 GDDR6 記憶體控制器和 16MB 容量 L3 快取 MCD(Memory Cache Die),放在較便宜的台積電 6 奈米製程,和 5 奈米製程 GCD(Graphic Compute Die)分而治之。

▲ Radeon RX7000 世代 GPU(Navi 3x),AMD 將「比較不適合最先進製程」的功能區塊,如記憶體控制器和 L3 快取記憶體(Infinity Cache)與運算核心分而治之,1 顆 5 奈米 GCD 搭配 6 顆 6 奈米 MCD。

「黏合」13 個晶粒(不含 8 顆 HBM3 記憶體),以實現 24 個 Zen 4 核心、CDNA3 運算架構、128GB 容量 HBM3 記憶體、電晶體總數 1,460 億的 Instinct MI300 資料中心 APU,更是 AMD 默默耕耘 EHP(Exascale Heterogenous Processor)多年後集大成。

▲ Instinct MI300 堪稱 AMD 累積多年的技術集大成,總計打包 13 顆晶粒的高效能運算怪物:9 個 5 奈米 Chiplet(3 個 CPU,6 個 GPU) 和 4 個 6 奈米 Chiplet(4 個 I/O 兼記憶體控制器),再另外緊密耦合 8 顆 HBM3 記憶體。

英特爾和 Nvidia 很快就會跟進,這場「堆積木戰爭」剛開始,後勢更精彩可期。

資料中心伺服器架構新革命會很快出現?

回顧這段處理器和記憶體距離越拉越開的漫長歷史,不論上看下看左看右看,「如何填補一望無際的鴻溝」,即便浮現幾個突破點,但全球經濟景氣前景不明,或多或少延緩新技術普及腳步,仍是看似無解的難題。我們也有充分理由相信,計算機工業還會掙扎於記憶體匱乏症很長時日,極可能永遠看不到盡頭。

也許像量子電腦這種嶄新運算架構,或乾脆從「軟體」下手,才是最終解藥。近期 Google 流出某篇研究員文章〈We Have No Moat, And Neither Does OpenAI〉(我們並沒有護城河,OpenAI 也是),提到 Meta 前陣子釋出比 GPT-3 小很多的 LLaMA(Large Language Model Meta AI)後,造成開源 LLM 大爆發,發展速度遠超過多數人想像,還不斷被眾多開發者改進並縮小到可在消費級 GPU 甚至手機跑,搞不好沒過多久,每個人個人電腦和手機,都可以跑與 ChatGPT 一樣好的 LLM。

假如 Meta 可將開源界成果囊括至產品和技術,原先嫌 Nvidia GPU 太貴想自研晶片,人工智慧太晚應用 GPU,又揮霍一堆資源搞元宇宙(Metaverse),導致現在落後競爭對手的 Meta,說不定有機會在這場人工智慧戰爭,彎道超車 OpenAI(微軟)和 Google,成為最後的贏家也說不定。筆者又扯遠了。

(首圖來源:Pixabay

立刻加入《科技新報》LINE 官方帳號,全方位科技產業新知一手掌握!

0 0
reaction icon 0
reaction icon 0
reaction icon 0
reaction icon 0
reaction icon 0
reaction icon 0