解析與選型部署實(shí)踐)
1. 從“算力焦慮”說起昇騰 950 系列到底在解決什么問題這兩年跟做 AI 基礎(chǔ)設(shè)施的朋友聊天繞不開的一個(gè)話題就是“算力不夠用”。模型參數(shù)從十億級(jí)跳到千億級(jí)訓(xùn)練集群從幾十張卡擴(kuò)到幾千張卡大家突然發(fā)現(xiàn)瓶頸不只是“有沒有卡”而是“卡和卡之間能不能高效協(xié)同”“數(shù)據(jù)喂不喂得飽計(jì)算單元”“功耗和散熱扛不扛得住”。昇騰 950 系列產(chǎn)品就是在這樣的背景下進(jìn)入視野的。我第一次接觸昇騰 950 系列是在一個(gè)推理集群的選型討論會(huì)上。當(dāng)時(shí)團(tuán)隊(duì)面臨一個(gè)很現(xiàn)實(shí)的問題已有的加速卡在跑大模型推理時(shí)單卡吞吐上不去多卡擴(kuò)展又受限于互聯(lián)帶寬整體性價(jià)比算下來不劃算。有人提了一句“要不要看看昇騰 950 系列”于是就有了后面一系列的調(diào)研、測(cè)試和踩坑。這篇文章我就把這段時(shí)間對(duì)昇騰 950 系列的認(rèn)知梳理出來從它是什么、解決什么問題、核心架構(gòu)怎么設(shè)計(jì)、實(shí)際部署要注意什么到選型時(shí)容易忽略的細(xì)節(jié)盡量講透。先給不太熟悉的朋友一個(gè)定位昇騰 950 系列是面向 AI 計(jì)算場(chǎng)景的高性能處理器產(chǎn)品系列覆蓋訓(xùn)練和推理兩類負(fù)載主打的是高算力密度、高互聯(lián)帶寬和相對(duì)完善的軟件棧生態(tài)。它不是一個(gè)孤立的芯片而是一整套包含芯片、板卡、服務(wù)器、集群互聯(lián)和軟件工具鏈的解決方案。你如果只是買一張卡插到普通服務(wù)器上大概率發(fā)揮不出它的全部實(shí)力——這是我在實(shí)際項(xiàng)目中體會(huì)最深的一點(diǎn)。適合誰來讀這篇內(nèi)容如果你是 AI 基礎(chǔ)設(shè)施工程師、算法團(tuán)隊(duì)的工程化負(fù)責(zé)人、或者正在做算力集群選型的技術(shù)決策者這篇會(huì)比較對(duì)路。如果你只是好奇“昇騰系列有哪些 GPU”這類問題我也先澄清一個(gè)常見誤解昇騰系列嚴(yán)格來說不是 GPU而是NPU神經(jīng)網(wǎng)絡(luò)處理單元架構(gòu)的 AI 加速產(chǎn)品它的設(shè)計(jì)思路和傳統(tǒng) GPU 有相似之處但在計(jì)算單元組織、內(nèi)存層次和數(shù)據(jù)流調(diào)度上有自己的邏輯。這個(gè)區(qū)別在后面講架構(gòu)時(shí)會(huì)展開。2. 昇騰 950 系列的產(chǎn)品定位與家族脈絡(luò)2.1 它在昇騰產(chǎn)品線里處于什么位置要理解 950 系列得先把它放回昇騰整體的產(chǎn)品演進(jìn)脈絡(luò)里看。昇騰的產(chǎn)品線大致可以按“代際”和“面向場(chǎng)景”兩個(gè)維度來劃分。早期大家熟悉的是 310 系列偏推理、邊緣和低功耗場(chǎng)景910 系列則是面向訓(xùn)練和高性能推理的主力。950 系列可以理解為在 910 基礎(chǔ)上進(jìn)一步強(qiáng)化算力和互聯(lián)能力的一代產(chǎn)品面向的是更大規(guī)模、更高密度的 AI 計(jì)算需求。這里有個(gè)容易被忽略的點(diǎn)產(chǎn)品系列的“代際”不完全等同于“性能高低”更多是面向不同負(fù)載的重新設(shè)計(jì)。比如同樣是 950 系列不同型號(hào)在算力、內(nèi)存容量、互聯(lián)接口上會(huì)有差異有的偏向訓(xùn)練集群有的偏向高吞吐推理。選型時(shí)如果只看“是不是 950”很容易買錯(cuò)型號(hào)。我在調(diào)研階段就吃過這個(gè)虧一開始以為 950 系列只有一款后來才發(fā)現(xiàn)型號(hào)細(xì)分挺多必須對(duì)著具體規(guī)格表看。從網(wǎng)絡(luò)上的討論熱度看“昇騰 950 系列”和“昇騰 960”經(jīng)常被放在一起提。這其實(shí)反映了一個(gè)現(xiàn)實(shí)AI 芯片的迭代節(jié)奏很快大家在選型時(shí)不僅關(guān)心當(dāng)前這一代能做什么還關(guān)心下一代會(huì)不會(huì)很快替代、當(dāng)前投入會(huì)不會(huì)打水漂。我的建議是不要為了等下一代而無限期推遲當(dāng)前項(xiàng)目因?yàn)檐浖鷳B(tài)的成熟度往往比硬件峰值算力更影響實(shí)際落地效果。950 系列目前的軟件棧已經(jīng)相對(duì)可用這一點(diǎn)比單純看算力數(shù)字更重要。2.2 訓(xùn)練型和推理型負(fù)載的差異昇騰 950 系列在訓(xùn)練和推理兩類場(chǎng)景下的表現(xiàn)邏輯是不一樣的這一點(diǎn)必須分開看。訓(xùn)練場(chǎng)景的核心訴求是高算力 高互聯(lián)帶寬 大內(nèi)存。訓(xùn)練一個(gè)大模型需要把參數(shù)、梯度、優(yōu)化器狀態(tài)都放在內(nèi)存里還要在卡與卡之間頻繁同步梯度。如果互聯(lián)帶寬不夠計(jì)算單元就會(huì)“餓著”算力利用率上不去。950 系列在互聯(lián)上做了專門設(shè)計(jì)這是它面向訓(xùn)練集群的關(guān)鍵賣點(diǎn)。推理場(chǎng)景的核心訴求則是低延遲 高吞吐 能效比。推理不一定需要那么大的內(nèi)存但對(duì)批處理效率、量化支持、動(dòng)態(tài) shape 處理要求更高。同一個(gè) 950 系列的型號(hào)用在訓(xùn)練和推理上配置策略和調(diào)優(yōu)手段完全不同。我見過有團(tuán)隊(duì)把訓(xùn)練卡直接拿去做推理結(jié)果發(fā)現(xiàn)吞吐還不如專門的推理卡原因就是沒有針對(duì)推理做量化和批處理優(yōu)化。提示在選型階段就要明確你的主要負(fù)載是訓(xùn)練還是推理或者兩者混合的比例。混合負(fù)載對(duì)集群調(diào)度和資源隔離的要求更高不能簡(jiǎn)單按“訓(xùn)練卡”或“推理卡”一刀切。2.3 和常見加速方案的對(duì)比思路很多人會(huì)拿昇騰 950 系列和市面上其他 AI 加速方案做對(duì)比。我的經(jīng)驗(yàn)是不要只比峰值算力TFLOPS這一個(gè)數(shù)字那個(gè)數(shù)字在實(shí)際業(yè)務(wù)里往往只能達(dá)到理論值的百分之幾十。真正要對(duì)比的是幾個(gè)維度對(duì)比維度為什么重要昇騰 950 系列的關(guān)注點(diǎn)互聯(lián)帶寬決定多卡擴(kuò)展效率卡間互聯(lián)和集群互聯(lián)的設(shè)計(jì)內(nèi)存容量與帶寬決定能跑多大模型大模型訓(xùn)練的內(nèi)存墻問題軟件棧成熟度決定落地速度算子庫、框架適配、工具鏈能效比決定長(zhǎng)期運(yùn)營(yíng)成本功耗與算力的平衡生態(tài)兼容性決定遷移成本對(duì)主流框架和模型的支持這張表不是讓你去背而是提醒你選型是一個(gè)多目標(biāo)決策問題任何單一指標(biāo)都不能代表全部。我在實(shí)際項(xiàng)目里見過因?yàn)橹豢此懔?shù)字而選錯(cuò)方案、后期遷移成本巨大的案例所以這一節(jié)特意展開講。3. 核心架構(gòu)拆解950 系列的計(jì)算、內(nèi)存與互聯(lián)設(shè)計(jì)3.1 計(jì)算單元的組織邏輯昇騰 950 系列的核心計(jì)算單元采用的是達(dá)芬奇架構(gòu)的演進(jìn)版本。達(dá)芬奇架構(gòu)的一個(gè)關(guān)鍵特點(diǎn)是“矩陣計(jì)算 向量計(jì)算 標(biāo)量計(jì)算”三類單元協(xié)同工作。矩陣單元負(fù)責(zé)大規(guī)模的乘加運(yùn)算這是深度學(xué)習(xí)里最密集的計(jì)算向量單元處理激活函數(shù)、歸一化等操作標(biāo)量單元?jiǎng)t負(fù)責(zé)流程控制和地址計(jì)算。為什么要這樣分因?yàn)樯疃葘W(xué)習(xí)負(fù)載的計(jì)算模式差異很大。卷積和全連接層是典型的矩陣運(yùn)算適合專用矩陣單元而像 LayerNorm、Softmax 這類操作用矩陣單元反而效率低交給向量單元更合適。把不同計(jì)算模式分給不同單元是提升整體利用率的關(guān)鍵設(shè)計(jì)。這一點(diǎn)和傳統(tǒng) GPU 用統(tǒng)一著色器處理所有計(jì)算任務(wù)的思路不同各有取舍。實(shí)際調(diào)優(yōu)時(shí)理解這個(gè)分工很有用。比如你發(fā)現(xiàn)某個(gè)算子性能不達(dá)預(yù)期可以先判斷它主要落在哪類單元上再針對(duì)性優(yōu)化。如果是一個(gè)矩陣密集的算子跑得慢可能是矩陣單元利用率不夠如果是一個(gè)歸一化算子慢可能是向量單元和矩陣單元之間的數(shù)據(jù)搬運(yùn)成了瓶頸。3.2 內(nèi)存層次與數(shù)據(jù)搬運(yùn)AI 芯片的性能瓶頸很多時(shí)候不在計(jì)算而在數(shù)據(jù)搬運(yùn)。昇騰 950 系列在內(nèi)存層次上做了分級(jí)設(shè)計(jì)片上緩存、片上高速內(nèi)存、片外高帶寬內(nèi)存HBM。數(shù)據(jù)從片外搬到片上、在片上各級(jí)之間流轉(zhuǎn)每一步都有帶寬和延遲的代價(jià)。我打個(gè)比方計(jì)算單元是廚房里的廚師片外內(nèi)存是倉庫片上緩存是灶臺(tái)旁邊的備菜區(qū)。廚師做菜再快如果備菜區(qū)總是空的或者從倉庫拿菜的速度跟不上出菜速度就上不去。優(yōu)化內(nèi)存訪問模式本質(zhì)上就是讓備菜區(qū)盡量不空、讓倉庫到備菜區(qū)的搬運(yùn)盡量少。具體到實(shí)操有幾個(gè)常見手段算子融合把多個(gè)小算子合并成一個(gè)大算子減少中間結(jié)果的搬運(yùn)、數(shù)據(jù)復(fù)用讓同一份數(shù)據(jù)在片上多停留一會(huì)兒被多個(gè)計(jì)算復(fù)用、以及合理的數(shù)據(jù)布局比如把卷積的輸入按特定格式排布提升訪問效率。這些手段在昇騰的軟件棧里都有對(duì)應(yīng)的工具和接口支持后面講軟件棧時(shí)會(huì)提到。3.3 互聯(lián)設(shè)計(jì)多卡協(xié)同的關(guān)鍵多卡訓(xùn)練的效率很大程度上取決于卡間互聯(lián)。昇騰 950 系列在互聯(lián)上支持高帶寬的卡間通信這是它面向大規(guī)模訓(xùn)練集群的核心能力之一。為什么互聯(lián)這么重要因?yàn)閿?shù)據(jù)并行訓(xùn)練時(shí)每張卡算完梯度后要和其他卡同步這個(gè)同步操作如果帶寬不夠就會(huì)成為整個(gè)訓(xùn)練流程的瓶頸。舉個(gè)具體的場(chǎng)景假設(shè)你有 64 張卡做數(shù)據(jù)并行訓(xùn)練每張卡每輪迭代要同步幾百 MB 的梯度。如果卡間帶寬是每秒幾十 GB同步時(shí)間可能只占迭代時(shí)間的一小部分但如果帶寬只有每秒幾 GB同步時(shí)間可能比計(jì)算時(shí)間還長(zhǎng)擴(kuò)展效率就崩了。互聯(lián)帶寬決定了你的集群能擴(kuò)展到多大規(guī)模而不顯著掉效率。昇騰 950 系列在互聯(lián)上的設(shè)計(jì)包括卡間高速互聯(lián)和集群級(jí)互聯(lián)兩個(gè)層面??ㄩg互聯(lián)解決的是同一節(jié)點(diǎn)內(nèi)多卡通信集群級(jí)互聯(lián)解決的是跨節(jié)點(diǎn)通信。實(shí)際部署時(shí)網(wǎng)絡(luò)拓?fù)涞脑O(shè)計(jì)比如用什么樣的交換結(jié)構(gòu)、怎么規(guī)劃通信域會(huì)直接影響訓(xùn)練效率。這部分內(nèi)容偏工程但選型時(shí)至少要確認(rèn)你的集群規(guī)模對(duì)應(yīng)的互聯(lián)方案是否成熟、是否有實(shí)際案例驗(yàn)證過。4. 軟件棧與工具鏈決定落地速度的隱形戰(zhàn)場(chǎng)4.1 從框架到硬件的適配鏈路硬件再?gòu)?qiáng)如果軟件棧不好用落地速度就會(huì)大打折扣。昇騰 950 系列的軟件棧大致可以分成幾層底層是驅(qū)動(dòng)和運(yùn)行時(shí)中間是算子庫和通信庫上層是框架適配和開發(fā)工具。對(duì)大多數(shù)算法工程師來說最關(guān)心的是上層框架能不能無縫用。目前主流的深度學(xué)習(xí)框架昇騰都有對(duì)應(yīng)的適配版本。但這里有個(gè)現(xiàn)實(shí)問題適配版本和原生版本之間可能存在算子覆蓋度、性能表現(xiàn)、API 行為上的差異。我在項(xiàng)目里遇到過某個(gè)算子在原生框架上跑得好好的遷移到適配版本后精度有細(xì)微偏差排查了很久才發(fā)現(xiàn)是算子實(shí)現(xiàn)細(xì)節(jié)不同。注意遷移到新硬件平臺(tái)時(shí)一定要做精度對(duì)齊測(cè)試不能只看 loss 曲線大致收斂就認(rèn)為沒問題。有些偏差在訓(xùn)練早期看不出來到后期才暴露。4.2 算子開發(fā)與自定義算子如果你的模型里有自定義算子或者用了比較新的算子可能需要自己開發(fā)。昇騰提供了算子開發(fā)工具鏈支持用類 C 的語言編寫算子并在硬件上運(yùn)行。這個(gè)過程有一定的學(xué)習(xí)成本但一旦跑通后續(xù)復(fù)用就比較方便。我的經(jīng)驗(yàn)是優(yōu)先用官方算子庫實(shí)在沒有再自己寫。自己寫算子不僅要考慮功能正確還要考慮性能優(yōu)化怎么利用矩陣單元、怎么安排內(nèi)存訪問調(diào)優(yōu)周期可能比預(yù)期長(zhǎng)。如果時(shí)間緊可以先看官方算子庫里有沒有功能相近的算子可以改造或者看社區(qū)里有沒有人已經(jīng)實(shí)現(xiàn)過類似算子。4.3 性能分析工具的使用性能調(diào)優(yōu)離不開工具。昇騰提供了一套性能分析工具可以采集算子級(jí)別的執(zhí)行時(shí)間、內(nèi)存占用、計(jì)算單元利用率等指標(biāo)。這些數(shù)據(jù)是定位瓶頸的依據(jù)。我通常的排查順序是先看整體吞吐和延遲判斷是計(jì)算瓶頸還是通信瓶頸如果是計(jì)算瓶頸再看是哪個(gè)算子耗時(shí)最多然后針對(duì)那個(gè)算子看它的計(jì)算單元利用率和內(nèi)存訪問效率。不要一上來就盯著最底層的細(xì)節(jié)先定位大方向再逐層深入。這個(gè)思路在任何硬件平臺(tái)上都適用。5. 實(shí)際部署中的坑與應(yīng)對(duì)來自一線的經(jīng)驗(yàn)5.1 環(huán)境配置里最容易忽略的細(xì)節(jié)部署昇騰 950 系列環(huán)境配置是第一步也是最容易出問題的一步。我踩過的坑包括驅(qū)動(dòng)版本和固件版本不匹配、容器環(huán)境和宿主機(jī)環(huán)境的庫版本沖突、多卡環(huán)境下設(shè)備編號(hào)和實(shí)際物理卡對(duì)應(yīng)不上。其中設(shè)備編號(hào)問題特別隱蔽。在多卡服務(wù)器上系統(tǒng)給每張卡分配的編號(hào)不一定和物理插槽順序一致。如果你在代碼里寫死了設(shè)備編號(hào)換一臺(tái)機(jī)器可能就跑錯(cuò)了卡。我的做法是在代碼里通過環(huán)境變量或配置文件指定設(shè)備而不是硬編碼部署前先用工具確認(rèn)每張卡的物理位置和邏輯編號(hào)的對(duì)應(yīng)關(guān)系。另一個(gè)容易忽略的是內(nèi)存和顯存的配額。容器環(huán)境下如果沒正確配置顯存配額可能出現(xiàn)容器內(nèi)看到的顯存和實(shí)際可用不一致的情況導(dǎo)致 OOM 報(bào)錯(cuò)但排查方向完全錯(cuò)誤。5.2 多卡訓(xùn)練的效率調(diào)優(yōu)多卡訓(xùn)練的效率問題我總結(jié)下來主要有三類通信瓶頸、負(fù)載不均、以及數(shù)據(jù)加載跟不上。通信瓶頸前面講過核心是互聯(lián)帶寬和通信策略。昇騰的通信庫支持多種通信算法比如 ring all-reduce、tree all-reduce不同算法在不同集群規(guī)模下的表現(xiàn)不一樣。小規(guī)模集群可能 ring 算法更優(yōu)大規(guī)模集群可能 tree 或分層算法更優(yōu)這個(gè)需要實(shí)測(cè)。負(fù)載不均通常出現(xiàn)在模型并行場(chǎng)景。如果模型切分不合理某些卡的計(jì)算量明顯大于其他卡整體效率就被最慢的那張卡拖累。解決辦法是重新設(shè)計(jì)切分策略讓各卡計(jì)算量盡量均衡。數(shù)據(jù)加載跟不上是另一個(gè)常見問題。如果數(shù)據(jù)預(yù)處理在 CPU 上做而 CPU 處理速度跟不上 NPU 的計(jì)算速度NPU 就會(huì)“餓著”。解決辦法包括增加數(shù)據(jù)加載的并行度、把部分預(yù)處理放到 NPU 上做、或者用更高效的數(shù)據(jù)格式比如把數(shù)據(jù)預(yù)先轉(zhuǎn)成二進(jìn)制格式減少解析開銷。5.3 推理場(chǎng)景的批處理與量化推理場(chǎng)景和訓(xùn)練場(chǎng)景的調(diào)優(yōu)重點(diǎn)不同。推理最關(guān)心的是單位時(shí)間能處理多少請(qǐng)求所以批處理策略很關(guān)鍵。批處理太大延遲高批處理太小吞吐低。找到一個(gè)平衡點(diǎn)需要根據(jù)業(yè)務(wù)的實(shí)際延遲要求來定。量化是提升推理吞吐的另一個(gè)手段。把模型從 FP16 量化到 INT8理論上吞吐能翻倍但精度可能下降。我的經(jīng)驗(yàn)是先做量化感知訓(xùn)練或訓(xùn)練后量化評(píng)估精度損失是否可接受再?zèng)Q定是否上線。有些模型對(duì)量化很敏感強(qiáng)行量化會(huì)導(dǎo)致效果明顯變差有些模型則幾乎無損。這個(gè)必須用實(shí)際業(yè)務(wù)數(shù)據(jù)驗(yàn)證不能只看論文里的數(shù)字。6. 選型決策什么場(chǎng)景該考慮昇騰 950 系列6.1 適合的場(chǎng)景特征根據(jù)我這段時(shí)間的觀察昇騰 950 系列比較適合以下幾類場(chǎng)景第一類是大規(guī)模訓(xùn)練集群尤其是對(duì)互聯(lián)帶寬要求高、需要擴(kuò)展到幾十張卡以上的場(chǎng)景。950 系列的互聯(lián)設(shè)計(jì)在這類場(chǎng)景下優(yōu)勢(shì)比較明顯。第二類是對(duì)能效比有要求的推理集群。如果機(jī)房功耗和散熱有硬約束能效比就成了關(guān)鍵指標(biāo)這時(shí)候需要重點(diǎn)對(duì)比不同方案在相同吞吐下的功耗。第三類是已有昇騰生態(tài)積累的團(tuán)隊(duì)。如果團(tuán)隊(duì)已經(jīng)在用昇騰的其他產(chǎn)品遷移到 950 系列的學(xué)習(xí)成本相對(duì)低工具鏈和運(yùn)維經(jīng)驗(yàn)可以復(fù)用。6.2 需要謹(jǐn)慎評(píng)估的場(chǎng)景反過來有些場(chǎng)景需要謹(jǐn)慎。比如模型里有大量自定義算子且短期無法遷移的場(chǎng)景遷移成本可能很高。再比如對(duì)特定框架版本有強(qiáng)依賴的場(chǎng)景如果適配版本還沒跟上可能要等。還有一個(gè)容易被忽略的點(diǎn)運(yùn)維體系的適配。新硬件平臺(tái)的監(jiān)控、告警、故障排查流程和原有體系可能不同需要提前規(guī)劃。我見過硬件買回來了、但運(yùn)維團(tuán)隊(duì)不熟悉、出問題時(shí)排查效率低下的情況。6.3 一個(gè)簡(jiǎn)單的選型檢查清單最后給一個(gè)我在實(shí)際項(xiàng)目中用的檢查清單供參考主要負(fù)載是訓(xùn)練還是推理比例如何模型規(guī)模多大需要多少內(nèi)存和互聯(lián)帶寬集群規(guī)模規(guī)劃是多少?gòu)埧ɑヂ?lián)方案是否支持模型里的算子是否都在官方算子庫覆蓋范圍內(nèi)團(tuán)隊(duì)是否有昇騰平臺(tái)的使用經(jīng)驗(yàn)運(yùn)維監(jiān)控體系是否需要改造長(zhǎng)期運(yùn)營(yíng)的功耗和成本預(yù)算是多少這個(gè)清單不是讓你逐條打勾就完事而是提醒你選型是一個(gè)系統(tǒng)工程硬件只是其中一環(huán)。把這些問題想清楚比單純比較算力數(shù)字有價(jià)值得多。我在實(shí)際使用中的體會(huì)是昇騰 950 系列是一套需要“配套使用”的產(chǎn)品——配套的軟件棧、配套的集群設(shè)計(jì)、配套的運(yùn)維體系。單獨(dú)看某一張卡或某一個(gè)型號(hào)很難判斷它是否適合你。反過來如果你愿意花時(shí)間把整個(gè)鏈路跑通它在特定場(chǎng)景下能帶來的效率提升是實(shí)實(shí)在在的。后續(xù)如果大家感興趣我可以再寫一篇關(guān)于具體調(diào)優(yōu)參數(shù)和實(shí)測(cè)數(shù)據(jù)的分享。