★人工智能;大數(shù)據(jù)技術(shù);AIGC;Turbo;DALL·E 3;多模態(tài)大模型;MLLM;LLM;Agent;Llama2;國(guó)產(chǎn)GPU芯片;GPU;CPU;高性能計(jì)算機(jī);邊緣計(jì)算;大模型顯存占用;5G;深度學(xué)習(xí);A100;H100;A800;H800;L40s;Intel;英偉達(dá);算力
近年來(lái),AIGC的技術(shù)取得了長(zhǎng)足的進(jìn)步,其中最為重要的技術(shù)之一是基于源代碼的CPU調(diào)優(yōu),可以有效地提高人工智能模型的訓(xùn)練速度和效率,從而加快了人工智能的應(yīng)用進(jìn)程。同時(shí),多GPU編程技術(shù)也在不斷發(fā)展,大大提高人工智能模型的計(jì)算能力,更好地滿足實(shí)際應(yīng)用的需求。
本文將分析AIGC的最新進(jìn)展,深入探討以上話題,以及中國(guó)算力產(chǎn)業(yè)的瓶頸和趨勢(shì)。
AIGC發(fā)展現(xiàn)狀
AIGC產(chǎn)業(yè)在上半年經(jīng)歷“百模大戰(zhàn)”和“百花齊放”的階段后,現(xiàn)在正站在從“玩具”到“工具”的關(guān)鍵時(shí)期。大模型市場(chǎng)格局發(fā)生深刻變化,行業(yè)關(guān)注焦點(diǎn)也轉(zhuǎn)向人工智能發(fā)展的“終極命題”——應(yīng)用與商業(yè)化落地。AIGC研發(fā)范式的變革從根本上提高數(shù)據(jù)生產(chǎn)效率,降低使用者和開發(fā)者的門檻。
為提升模型的能力和效用,行業(yè)共同關(guān)注放大模型能力的有效途徑,如微調(diào)、提示工程、搜索增強(qiáng)生成、AI Agent等技術(shù)手段。同時(shí),開源模型迅速發(fā)展,產(chǎn)品向終端延伸,結(jié)合更多AI應(yīng)用技術(shù),推動(dòng)應(yīng)用場(chǎng)景多元化。然而,由于政策面向C端設(shè)置準(zhǔn)入門檻,標(biāo)準(zhǔn)體系覆蓋多個(gè)行業(yè),強(qiáng)調(diào)數(shù)據(jù)、算法、模型和安全因素的重要性,因此“百模大戰(zhàn)”回歸理性,行業(yè)格局邁入整合階段。
2023 Q3國(guó)內(nèi)AIGC行業(yè)發(fā)生融資事件35起,涉及公司33家,投資機(jī)構(gòu)51家。融資金額39.61億人民幣,種子輪~天使輪21家(占比63.64%)。通用大模型(6起)和工具平臺(tái)(6起)兩個(gè)細(xì)分賽道相對(duì)活躍。在應(yīng)用層中,元宇宙/數(shù)字人(5起)和營(yíng)銷(5起)是融資事件最頻繁的細(xì)分領(lǐng)域。有1家國(guó)內(nèi)AIGC企業(yè)完成上市——第四范式(決策類人工智能公司)。2023年Q3國(guó)內(nèi)AIGC行業(yè)發(fā)生1起并購(gòu)事件——美團(tuán)收購(gòu)光年之外,融資額20.65億元。
一、技術(shù)迭代
1、多模態(tài)大模型DALL·E 3帶來(lái)產(chǎn)業(yè)沖擊
多模態(tài)大語(yǔ)言模型(MLLM)是一種將文本、圖像、音頻和視頻等多模態(tài)信息結(jié)合訓(xùn)練的模型,相比大語(yǔ)言模型(LLM)更符合人類感知世界的方式。通過(guò)多模態(tài)輸入的支持,用戶可以更靈活的方式與智能助手進(jìn)行交互,并利用強(qiáng)大的大模型作為大腦來(lái)執(zhí)行多模態(tài)任務(wù)。
DALL·E 3能夠更好地捕捉語(yǔ)義描述的細(xì)微差異,實(shí)現(xiàn)提示詞的完美遵循,并高效避免混淆詳細(xì)請(qǐng)求中的元素,在畫面呈現(xiàn)方面取得明顯進(jìn)步。同時(shí),文生圖模型與ChatGPT的結(jié)合,極大地減少了提示工程的約束。
2、長(zhǎng)文本技術(shù)增強(qiáng)產(chǎn)品用戶體驗(yàn)
LLM中的“上下文長(zhǎng)度”是指大語(yǔ)言模型在生成預(yù)測(cè)時(shí)考慮的輸入文本長(zhǎng)度。更長(zhǎng)的文本建模能力使模型能夠觀察到更長(zhǎng)的上下文,避免重要信息的丟失。大模型的應(yīng)用效果取決于兩個(gè)核心指標(biāo):模型參數(shù)量和上下文長(zhǎng)度。其中,上下文長(zhǎng)度決定大模型的“內(nèi)存”能力,長(zhǎng)文本可以提供更多上下文和細(xì)節(jié)信息來(lái)輔助模型判斷語(yǔ)義,減少歧義,提高歸納和推理的準(zhǔn)確性。
目前,國(guó)內(nèi)外對(duì)于文本長(zhǎng)度的探索還沒(méi)有達(dá)到“臨界點(diǎn)”,長(zhǎng)文本在未來(lái)的Agent和AI原生應(yīng)用中仍然扮演著重要角色。Agent需要依靠歷史信息進(jìn)行規(guī)劃和決策,而AI原生應(yīng)用需要依靠上下文來(lái)保持連貫、個(gè)性化的用戶體驗(yàn)。這也是為什么像月之暗面、OpenAI等大模型公司關(guān)注長(zhǎng)文本技術(shù)的原因。
3、Llama2掀起大模型市場(chǎng)新格局
Llama是Meta發(fā)布的一款使用公開數(shù)據(jù)集訓(xùn)練的大型語(yǔ)言模型,因其與開源協(xié)議的兼容性和可復(fù)現(xiàn)性而受到AI社區(qū)歡迎。但受限于開源協(xié)議,LLaMA僅限學(xué)術(shù)研究使用,不能用于商業(yè)用途。
相比Llama 1,Llama 2預(yù)訓(xùn)練語(yǔ)料庫(kù)增加40%,達(dá)到2萬(wàn)億Tokens。9月,Llama2的token已達(dá)32,768個(gè),并采用分組查詢注意力機(jī)制,對(duì)文本語(yǔ)義的理解更深入。在MMLU和GSM8K測(cè)試中,Llama 2 70B的性能接近GPT-3.5。
4、AI Agent深入挖掘大模型潛力
Agent是指具有自主性、反應(yīng)性、社會(huì)性、預(yù)動(dòng)性、慎思性和認(rèn)知性等智能特征的軟件或硬件實(shí)體,等于大模型+記憶+主動(dòng)規(guī)劃+工具。AI Agent能夠理解、規(guī)劃、執(zhí)行和自我調(diào)整,解決更復(fù)雜的問(wèn)題。與LLM相比,AI Agent能夠獨(dú)立思考并調(diào)用工具逐步完成目標(biāo),區(qū)別于RPA的是其能夠處理未知環(huán)境信息。
AI Agent與其他技術(shù)選型方案發(fā)展及優(yōu)劣勢(shì)比較
二、技術(shù)趨勢(shì)
1、擁抱開源精神,國(guó)產(chǎn)模型的崛起已成燎原之勢(shì)
在國(guó)家的大力支持和頭部廠商的推動(dòng)下,國(guó)產(chǎn)模型已成為大語(yǔ)言模型陣營(yíng)中的重要力量。盡管起步較晚,且面臨國(guó)外高端GPU芯片的圍堵,但國(guó)產(chǎn)模型的崛起之勢(shì)已成燎原。基礎(chǔ)的互聯(lián)網(wǎng)大廠積極推動(dòng)開源生態(tài)體系的構(gòu)建。
國(guó)內(nèi)AI大模型發(fā)展進(jìn)程 (截至2023年Q3)
2、大模型產(chǎn)品向終端延伸,推動(dòng)應(yīng)用場(chǎng)景多元化發(fā)展
大模型開源、多模態(tài)和Agent等技術(shù)將帶來(lái)全新、個(gè)性化、人性化的交互體驗(yàn)。未來(lái),大模型將部署在手機(jī)、PC、汽車、人形機(jī)器人等終端,解決云端AI在成本、能耗、性能、隱私、安全和個(gè)性化等方面的問(wèn)題,并拓寬自動(dòng)駕駛、智慧教育、智慧家居等場(chǎng)景的多元化應(yīng)用。然而,如何在端側(cè)實(shí)現(xiàn)輕量部署和軟硬件深度融合仍是難點(diǎn)問(wèn)題。
企業(yè)私有化部署大模型綜合成本持續(xù)降低
大模型應(yīng)用落地成本包括數(shù)據(jù)、模型和應(yīng)用開發(fā)成本。模型成本包括授權(quán)成本和算力成本。隨著Llama2推動(dòng)國(guó)內(nèi)模型的商用免費(fèi)化,MaaS逐漸被市場(chǎng)接受,授權(quán)成本過(guò)高的壁壘正在消失。通過(guò)QLoRA微調(diào)和GPTQ量化,中小企業(yè)也可以使用千億級(jí)模型,算力成本大幅降低。企業(yè)私有化部署綜合成本持續(xù)降低,有利于大模型對(duì)B端市場(chǎng)的滲透。
三、如何確定大模型顯存占用?
在部署大模型時(shí),顯存占用是個(gè)關(guān)鍵問(wèn)題。大模型因其巨大規(guī)模,要么因顯存溢出而無(wú)法運(yùn)行,要么因模型過(guò)大導(dǎo)致推理速度慢。優(yōu)化大模型的推理與優(yōu)化小模型CNN的推理有所不同。下面將主要探討如何計(jì)算大模型的顯存占用。
以流行的LLama2大模型為例,主要有7B、13B、70B三個(gè)版本。B(Billion)是十億,M(Million)是百萬(wàn),所以LLama2這類大模型可稱為十億、百億級(jí)大模型。
對(duì)于深度學(xué)習(xí)模型,精度通常有float32、float16、int8、int4等。后面的int8、int4等低精度主要用于推理加速。比如,一個(gè)float32會(huì)占用4個(gè)字節(jié)32個(gè)比特,往后就減半,如int8是1字節(jié)占用8比特,int4的占用空間會(huì)更加小。參數(shù)量和模型精度可以用來(lái)計(jì)算模型的顯存占用。以LLama2-13B為例:
對(duì)于float32精度:13 * 10^9 * 4 / 1024^3 約等于 48.42G
對(duì)于float16精度:13 * 10^9 * 2 / 1024^3 約等于 24.21G
以此類推,計(jì)算LLama2-7B的顯存占用。
對(duì)于float32精度:7 * 10^9 * 4 / 1024^3 約等于 26.08G;
對(duì)于float16精度顯存減半:約等于 13G;
對(duì)于int8精度再減半:約等于6.5G;
對(duì)于int4精度再減半:約等于3.2G。
可見低比特量化在大模型部署顯存管理中的重要性。上述推理顯存占用只適用于模型前向推理,不適用于模型訓(xùn)練。訓(xùn)練過(guò)程中還會(huì)受梯度、優(yōu)化器參數(shù)、bs等因素影響。一般經(jīng)驗(yàn)來(lái)說(shuō),訓(xùn)練時(shí)的顯存占用會(huì)是推理時(shí)的好多倍,甚至十幾倍。上述推理顯存占用是理論值,實(shí)際肯定會(huì)更多一些,因此需要預(yù)留一些余量。例如,實(shí)測(cè)LLama2-13B時(shí),理論值約為48.21G,但實(shí)際需要大約52G的顯存。當(dāng)然,這種方法也適用于CNN模型的前向推理顯存占用計(jì)算。
基于源代碼的CPU調(diào)優(yōu)
對(duì)于高性能應(yīng)用,如云服務(wù)、科學(xué)計(jì)算和3A游戲等,硬件基礎(chǔ)至關(guān)重要。忽視硬件因素可能導(dǎo)致性能瓶頸。標(biāo)準(zhǔn)算法和數(shù)據(jù)結(jié)構(gòu)在某些場(chǎng)景下可能無(wú)法提供最佳性能。
一、CPU前端優(yōu)化
隨著“扁平化”數(shù)據(jù)結(jié)構(gòu)的普及,鏈表逐漸被淘汰。傳統(tǒng)鏈表每個(gè)節(jié)點(diǎn)動(dòng)態(tài)分配內(nèi)存,導(dǎo)致內(nèi)存訪問(wèn)延遲和碎片化。這使得遍歷鏈表比遍歷數(shù)組更耗時(shí)。有些數(shù)據(jù)結(jié)構(gòu)(如二叉樹)有類似鏈表的天然結(jié)構(gòu),使用指針追蹤實(shí)現(xiàn)可能更高效。另外,更高效的數(shù)據(jù)結(jié)構(gòu)版本如boost::flat_map 和 boost::flat_set也存在。
特定問(wèn)題的最優(yōu)算法在特定場(chǎng)景中可能不是最好的選擇。例如,二分搜索在排序數(shù)組中查找元素很高效,但分支預(yù)測(cè)錯(cuò)誤可能導(dǎo)致其在大規(guī)模數(shù)據(jù)中表現(xiàn)不佳。因此,在處理小規(guī)模整型數(shù)組時(shí),線性搜索可能更有效。總之,針對(duì)高性能應(yīng)用,需要深入理解硬件和算法性能,并靈活選擇和優(yōu)化合適的算法和數(shù)據(jù)結(jié)構(gòu)以適應(yīng)不同場(chǎng)景。
“數(shù)據(jù)驅(qū)動(dòng)”優(yōu)化是一種重要的調(diào)優(yōu)技術(shù),基于對(duì)程序處理數(shù)據(jù)的深入理解。專注于數(shù)據(jù)的分布和在程序中的轉(zhuǎn)化方式。其中一個(gè)典型的例子是將數(shù)組結(jié)構(gòu)體(SOA)轉(zhuǎn)換為結(jié)構(gòu)體數(shù)組(AOS)。選擇哪種布局取決于代碼訪問(wèn)數(shù)據(jù)的方式。如果程序遍歷數(shù)據(jù)結(jié)構(gòu)并僅訪問(wèn)字段b,則SOA更有效,這主要是由于所有內(nèi)存訪問(wèn)都是按順序執(zhí)行;如果程序遍歷數(shù)據(jù)結(jié)構(gòu)并對(duì)對(duì)象的所有字段(即a、b和c)進(jìn)行大量操作,則AOS更佳,因?yàn)樗谐蓡T都可能保存在相同的緩存行中,減少緩存行讀取,提高內(nèi)存帶寬利用率。要進(jìn)行此類優(yōu)化,需要了解程序?qū)⑻幚砟男?shù)據(jù)和數(shù)據(jù)的分布情況,并相應(yīng)地修改程序。
另一個(gè)重要的數(shù)據(jù)驅(qū)動(dòng)優(yōu)化方法是“小尺寸優(yōu)化”,旨在為容器預(yù)先分配固定量的內(nèi)存,以避免動(dòng)態(tài)內(nèi)存分配。該方法在LLVM基礎(chǔ)設(shè)施中廣泛應(yīng)用,并可顯著提升性能(如對(duì)于SmallVector,boost::static_vector也是基于相同概念實(shí)現(xiàn))。現(xiàn)代CPU是非常復(fù)雜的設(shè)備,幾乎不可能預(yù)測(cè)某段代碼的運(yùn)行方式。CPU指令的執(zhí)行受制于眾多因素,包括許多變化的組件。
1、機(jī)器碼布局
機(jī)器碼布局指編譯器將源代碼轉(zhuǎn)化為串行的字節(jié)列。由于編譯器會(huì)影響到二進(jìn)制文件的性能,因此在將源代碼翻譯為機(jī)器碼時(shí),會(huì)考慮到指令在內(nèi)存中的放置偏移位置。
2、基本塊
基本塊是指具有單個(gè)入口和出口的指令序列,可以有多個(gè)前驅(qū)和后繼,但在基本塊中間沒(méi)有任何指令可以跳出基本塊。這種結(jié)構(gòu)確保了基本塊中的每條代碼只會(huì)被執(zhí)行一次,從而大大減少控制流圖分析和轉(zhuǎn)換的問(wèn)題。
3、基本塊布局
// hot path
if (cond)
coldFunc();
// hot path again
如果條件cond通常為真,那么選擇默認(rèn)布局,因?yàn)榱硪粋€(gè)布局會(huì)導(dǎo)致兩次而不是一次跳轉(zhuǎn)。coldFunc是錯(cuò)誤處理函數(shù),不太可能經(jīng)常執(zhí)行,因此選擇保持熱點(diǎn)代碼間的直通,并將選取分支轉(zhuǎn)化為未被選取分支。選擇這種布局的原因如下:
1)CPU每個(gè)時(shí)鐘可以執(zhí)行2個(gè)未被選擇的分支,但每2個(gè)時(shí)鐘周期才能執(zhí)行一個(gè)被選取的分支,因此未被選取的分支比被選取時(shí)耗時(shí)更少。
2)所有熱點(diǎn)代碼都是連續(xù)的,沒(méi)有緩存行碎片化問(wèn)題,因此可以更充分利用指令和微操作緩存。
3)每個(gè)被選取的跳轉(zhuǎn)指令都意味著跳轉(zhuǎn)之后的字節(jié)都是無(wú)效的,因此被選取的分支對(duì)于讀取單元來(lái)說(shuō)也更耗時(shí)。
4、基本塊對(duì)齊
性能因指令在內(nèi)存中的偏移而變化。若循環(huán)跨越多條緩存行,CPU前端可能會(huì)出現(xiàn)性能問(wèn)題。因此,可以使用nop指令將循環(huán)提前,使其整個(gè)循環(huán)位于一條緩存行中。
LLVM使用-mllvm-align-all-blocks對(duì)齊基本塊,但可能造成性能劣化。插入nop指令會(huì)增加程序開銷,尤其在關(guān)鍵路徑上。盡管nop指令不需要執(zhí)行,但仍需從內(nèi)存中讀取、解碼和執(zhí)行,消耗前端數(shù)據(jù)結(jié)構(gòu)和記賬緩沖區(qū)空間。
為精確控制對(duì)齊,可使用ALIGN匯編指令。開發(fā)人員先生成匯編列表,然后插入ALIGN指令以滿足特定實(shí)驗(yàn)場(chǎng)景的需求。
5、函數(shù)拆分
函數(shù)拆分是為了優(yōu)化在熱點(diǎn)路徑具有復(fù)雜CFG和大量冷代碼的函數(shù)。通過(guò)將冷代碼移動(dòng)到單獨(dú)的函數(shù)中,可以避免在運(yùn)行時(shí)加載不必要的代碼,從而改善內(nèi)存占用情況。
在優(yōu)化后的代碼中,將原來(lái)的函數(shù)拆分為兩個(gè)函數(shù),一個(gè)包含熱點(diǎn)代碼,另一個(gè)包含冷代碼。通過(guò)將冷代碼移動(dòng)到單獨(dú)的函數(shù)中,可以避免在運(yùn)行時(shí)加載不必要的代碼,從而改善內(nèi)存占用情況。同時(shí),使用__attribute__((noinline))禁止內(nèi)聯(lián)冷函數(shù),以避免冷函數(shù)被內(nèi)聯(lián)到熱點(diǎn)代碼中,從而影響性能。
通過(guò)將熱點(diǎn)代碼和冷代碼分離,可以更好地利用CPU前端數(shù)據(jù)結(jié)構(gòu)(指令緩存和DSB),提高CPU的利用率。同時(shí),將新函數(shù)放在.text段之外,可以避免在運(yùn)行時(shí)加載不必要的代碼,從而改善內(nèi)存占用情況。
6、函數(shù)分組
熱點(diǎn)函數(shù)可以聚集在一起,以提高CPU前端緩存的利用率,降低緩存行的讀取需求。鏈接器負(fù)責(zé)規(guī)劃程序中所有函數(shù)的排列布局,LLD鏈接器通過(guò)--symbol-ordering-file優(yōu)化函數(shù)布局。HFSort工具能根據(jù)剖析數(shù)據(jù)自動(dòng)生成分區(qū)排序文件。
7、基于剖析文件的編譯優(yōu)化
大多數(shù)編譯器具備一組轉(zhuǎn)換功能,可根據(jù)剖析數(shù)據(jù)來(lái)調(diào)整算法,這被稱為PGO(Profile-Directed Optimization)。剖析數(shù)據(jù)生成有兩種方式:代碼插樁和基于采樣的剖析。
1)利用LLVM編譯器通過(guò)-fprofile-instr-generate參數(shù)生成插樁代碼,再使用-fprofile-inst-use參數(shù)利用剖析數(shù)據(jù)重新編譯程序,生成PGO調(diào)優(yōu)的二進(jìn)制文件。
2)基于采樣生成編譯器所需的剖析數(shù)據(jù),然后通過(guò)AutoFDO工具將linux perf生成的采樣數(shù)據(jù)轉(zhuǎn)換為GCC和LLVM編譯器可理解的形式。但編譯器會(huì)假設(shè)所有負(fù)載表現(xiàn)相同。
8、對(duì)ITLB的優(yōu)化
內(nèi)存中的虛地址到物理地址轉(zhuǎn)換是前端優(yōu)化的關(guān)鍵領(lǐng)域之一。通過(guò)將性能關(guān)鍵代碼映射到大頁(yè)上,可以減輕ITLB(指令翻譯緩沖)的壓力。這需要重新鏈接二進(jìn)制文件,確保代碼段在適當(dāng)?shù)捻?yè)邊界對(duì)齊。除使用大頁(yè),還可以采用其他技術(shù)來(lái)優(yōu)化指令緩存性能,如重新排列函數(shù)以使熱點(diǎn)函數(shù)更集中,使用LTO(鏈接時(shí)間優(yōu)化)/IPO(內(nèi)聯(lián)函數(shù)優(yōu)化)來(lái)減小熱點(diǎn)區(qū)域的大小,使用PGO(基于剖析的編譯優(yōu)化)并避免過(guò)度內(nèi)聯(lián)。
二、CPU后端優(yōu)化
在計(jì)算機(jī)處理過(guò)程中,前端完成取指和譯碼后,如果后端資源不足無(wú)法處理新的微操作,會(huì)導(dǎo)致前端無(wú)法繼續(xù)交付微操作。例如,當(dāng)數(shù)據(jù)緩存未命中或除法單元過(guò)載時(shí),后端無(wú)法高效處理指令,從而造成前端停滯。
1、存儲(chǔ)bound
當(dāng)應(yīng)用程序進(jìn)行大量?jī)?nèi)存訪問(wèn)并花費(fèi)較長(zhǎng)時(shí)間等待內(nèi)存訪問(wèn)完成時(shí),被視為存儲(chǔ)bound。這意味著需要優(yōu)化存儲(chǔ)訪問(wèn)情況,減少存儲(chǔ)訪問(wèn)次數(shù)或升級(jí)存儲(chǔ)子系統(tǒng)。
在TMA中,存儲(chǔ)bound會(huì)統(tǒng)計(jì)CPU流水線由于按需加載或存儲(chǔ)指令而阻塞的部分槽位。解決此類性能問(wèn)題的第一步是定位導(dǎo)致高“存儲(chǔ)bound”指標(biāo)的訪存操作,并識(shí)別具體的訪存操作。然后開始進(jìn)行調(diào)優(yōu)。
1)緩存友好的數(shù)據(jù)類型
關(guān)于緩存友好算法和數(shù)據(jù)結(jié)構(gòu)是性能關(guān)鍵要素之一,重點(diǎn)在于時(shí)間和空間局部性原則,目標(biāo)是從緩存中高效地讀取所需的數(shù)據(jù)。
按順序訪問(wèn)數(shù)據(jù)
利用緩存空間局部性的最佳方法是順序訪問(wèn)內(nèi)存。標(biāo)準(zhǔn)實(shí)現(xiàn)二分搜索不會(huì)利用空間局部性,而解決這個(gè)問(wèn)題的方法之一是Eytzinger布局存儲(chǔ)數(shù)組元素。其思想是維護(hù)一個(gè)隱式二叉搜索樹,并使用類似廣度優(yōu)先搜索的布局將二叉搜索樹打包到一個(gè)數(shù)組中。
使用適當(dāng)容器
幾乎所有語(yǔ)言都提供各種現(xiàn)成的容器,理解它們底層存儲(chǔ)機(jī)制和性能影響至關(guān)重要。在處理數(shù)據(jù)時(shí),需要根據(jù)代碼的具體情況來(lái)選擇合適的數(shù)據(jù)存儲(chǔ)方式。
打包數(shù)據(jù)
提高內(nèi)存層次利用率的一種方式是使數(shù)據(jù)更加緊湊。打包數(shù)據(jù)的一個(gè)經(jīng)典例子就是使用位存儲(chǔ),可以極大地減少來(lái)回傳輸?shù)膬?nèi)存數(shù)量,同時(shí)節(jié)省緩存空間。然而,由于b和a與c共享一個(gè)機(jī)器字,編譯器需要執(zhí)行移位操作。在額外計(jì)算的開銷比低效內(nèi)存轉(zhuǎn)移開銷低的情況下,打包數(shù)據(jù)是值得的。
對(duì)于結(jié)構(gòu)體或類中的字段布局,程序員可以通過(guò)重新排列來(lái)減少內(nèi)存的使用,同時(shí)避免由編譯器添加結(jié)構(gòu)體填充。例如,如果有一個(gè)結(jié)構(gòu)體包含一個(gè)布爾值和一個(gè)整數(shù),最好將整數(shù)放在前面,因?yàn)檫@樣可以使用整數(shù)的位來(lái)存儲(chǔ)布爾值,從而節(jié)省內(nèi)存。
對(duì)齊與填充
當(dāng)變量存儲(chǔ)在能被其大小整除的內(nèi)存地址時(shí),訪問(wèn)效率最高。對(duì)齊可能導(dǎo)致未使用的字節(jié)形成空位,降低內(nèi)存帶寬利用率。為避免邊緣情況如緩存爭(zhēng)用和偽共享,需要填充數(shù)據(jù)結(jié)構(gòu)成員。例如,兩個(gè)線程訪問(wèn)同一結(jié)構(gòu)體的不同字段時(shí),緩存一致性問(wèn)題可能導(dǎo)致程序運(yùn)行速度明顯降低。通過(guò)填充方法,可確保結(jié)構(gòu)體的不同字段位于不同的緩存行。當(dāng)使用malloc進(jìn)行動(dòng)態(tài)分配時(shí),要確保返回的內(nèi)存地址滿足平臺(tái)目標(biāo)的最小對(duì)齊要求。最重要的是,對(duì)于SIMD代碼,當(dāng)使用編譯器向量化內(nèi)建函數(shù)時(shí),地址通常要被16、32或64整除。
動(dòng)態(tài)內(nèi)存分配
malloc的替代方案往往更快、更可擴(kuò)展,更能有效地處理內(nèi)存碎片問(wèn)題。動(dòng)態(tài)內(nèi)存分配的一個(gè)挑戰(zhàn)在于,多個(gè)線程可能同時(shí)嘗試申請(qǐng)內(nèi)存,導(dǎo)致效率降低。
為解決此問(wèn)題,可以使用自定義分配器加速內(nèi)存分配。這類分配器的優(yōu)勢(shì)在于開銷較低,因?yàn)楸苊饬嗣看蝺?nèi)存分配都進(jìn)行系統(tǒng)調(diào)用。同時(shí),也具有高度靈活性,允許開發(fā)者根據(jù)操作系統(tǒng)的內(nèi)存區(qū)域來(lái)實(shí)現(xiàn)自己的分配策略。一種策略是維護(hù)兩個(gè)不同的分配器,各自負(fù)責(zé)熱數(shù)據(jù)和冷數(shù)據(jù)的分配。將熱數(shù)據(jù)放在一起可以共享高速緩存行,從而提高內(nèi)存帶寬利用率和空間局部性。同時(shí),這種策略還可以提高TLB利用率,因?yàn)闊釘?shù)據(jù)占用的內(nèi)存頁(yè)更少。此外,自定義內(nèi)存分配器還可以利用線程本地存儲(chǔ)來(lái)實(shí)現(xiàn)每個(gè)線程的獨(dú)立分配,從而消除線程間的同步問(wèn)題。
針對(duì)存儲(chǔ)器層次調(diào)優(yōu)代碼
某些應(yīng)用程序的性能取決于特定層緩存的大小,最著名的例子是使用循環(huán)分塊來(lái)改進(jìn)矩陣乘法。
2)顯式內(nèi)存預(yù)取
當(dāng)arr數(shù)組規(guī)模較大時(shí),硬件預(yù)取可能無(wú)法識(shí)別訪存模式并提前獲取所需數(shù)據(jù)。為在計(jì)算j與arrp[j]請(qǐng)求之間的時(shí)間窗口內(nèi)手動(dòng)添加預(yù)取指令,可使用__builtin_prefetch,如下所示:
for (int i = 0; i < N; ++i) {
int j = calNextIndex();
__builtin_prefetch(arr + j, 0, 1);
// ...
doSomeExtensiveComputation();
// ...
x = arr[j];
}
為使預(yù)取有效,需提前插入預(yù)取指示,確保用于計(jì)算的值在計(jì)算時(shí)已加載到緩存中,同時(shí)避免過(guò)早插入預(yù)取提示以避免污染緩存。
顯式內(nèi)存預(yù)取不可移植,一個(gè)平臺(tái)上的性能提升無(wú)法保證在另一個(gè)平臺(tái)上也有相同效果。此外,顯式預(yù)取指令會(huì)增加代碼大小并增加CPU前端的壓力。
3)針對(duì)DTLB優(yōu)化
TLB分為ITLB和DTLB在L1,統(tǒng)一TLB在L2。L1 ITLB未命中時(shí)延很小,通常被亂序執(zhí)行隱藏。統(tǒng)一TLB未命中會(huì)調(diào)用頁(yè)遍歷器,可能導(dǎo)致性能損失。
Linux默認(rèn)頁(yè)面大小為4KB,增大頁(yè)大小可減少TLB條目和未命中次數(shù)。Intel 64和AMD 64支持2MB和1GB巨型頁(yè)。使用大頁(yè)的TLB更緊湊,遍歷內(nèi)核頁(yè)表的代價(jià)減少。
在Linux系統(tǒng)中,應(yīng)用程序使用大頁(yè)的方法有顯式大頁(yè)和透明大頁(yè)。使用libhugetlbfs庫(kù)可動(dòng)態(tài)分配大頁(yè)內(nèi)存。開發(fā)者可以通過(guò)以下方式控制對(duì)大頁(yè)的訪問(wèn):帶MAP_HUGETLB參數(shù)使用mmap;掛載hugetlbfs文件系統(tǒng)中的文件使用mmap;對(duì)SHM_HUGETLB參數(shù)使用shmget。
2、計(jì)算bound
主要有兩種性能瓶頸:硬件計(jì)算資源短缺和軟件指令依賴關(guān)系。前者指執(zhí)行單元過(guò)載或執(zhí)行端口爭(zhēng)用,發(fā)生在負(fù)載頻繁執(zhí)行大量繁重指令時(shí);后者指程序數(shù)據(jù)流或指令流中的依賴關(guān)系限制了性能。下面討論函數(shù)內(nèi)聯(lián)、向量化和循環(huán)優(yōu)化等常見優(yōu)化手段,旨在減少執(zhí)行指令總量,提高性能。
1)函數(shù)內(nèi)聯(lián)
內(nèi)聯(lián)函數(shù)不僅可以消除函數(shù)調(diào)用的開銷,還可以擴(kuò)展編譯器分析的范圍,進(jìn)行更多優(yōu)化。但內(nèi)聯(lián)也可能增加編譯后文件的大小和編譯時(shí)間。編譯器通常基于成本模型來(lái)決定是否內(nèi)聯(lián)函數(shù),例如LLVM會(huì)考慮計(jì)算成本和調(diào)用次數(shù)。一般而言,小函數(shù)、單一調(diào)用點(diǎn)的函數(shù)更可能被內(nèi)聯(lián),而大型函數(shù)和遞歸函數(shù)通常不會(huì)被內(nèi)聯(lián)。通過(guò)指針調(diào)用的函數(shù)可以用內(nèi)聯(lián)來(lái)代替直接調(diào)用。開發(fā)者可以使用特殊提示(如C++ 11的gnu::always_inline)來(lái)強(qiáng)制內(nèi)聯(lián)函數(shù)。另一種方法是剖析數(shù)據(jù)來(lái)識(shí)別潛在的內(nèi)聯(lián)對(duì)象,特別是分析函數(shù)的參數(shù)傳遞和返回頻率。
2)循環(huán)優(yōu)化
循環(huán)是程序中執(zhí)行最頻繁的代碼段,因此大部分執(zhí)行時(shí)間都在循環(huán)中消耗。循環(huán)的性能受到內(nèi)存延遲、內(nèi)存帶寬或計(jì)算能力的限制。屋頂線模型是一個(gè)很好的基于硬件理論最大值的評(píng)估不同循環(huán)的方法,TMA分析是另一種處理這種瓶頸的方法。
低層優(yōu)化
通過(guò)將循環(huán)中永遠(yuǎn)不會(huì)改變的表達(dá)式移到循環(huán)外,進(jìn)行循環(huán)不變量外提,有助于提高算術(shù)強(qiáng)度性能。循環(huán)展開可以增加指令級(jí)并行,同時(shí)減少循環(huán)開銷,但不建議開發(fā)者手動(dòng)展開任何循環(huán),因?yàn)榫幾g器非常擅長(zhǎng)并以最佳方式展開循環(huán)。借助亂序執(zhí)行,處理器具有“內(nèi)嵌的展開器”。循環(huán)強(qiáng)度折疊使用開銷更小的指令代替開銷高的指令,應(yīng)用于所有循環(huán)變量的表達(dá)式和數(shù)組索引,編譯器通過(guò)分析變量的值在循環(huán)迭代中的演變方式來(lái)實(shí)現(xiàn)。此外,如果循環(huán)內(nèi)部有不變的判斷條件,將其移到循環(huán)外,即進(jìn)行循環(huán)判斷外提,也有助于提高性能。
高層優(yōu)化
此類優(yōu)化策略會(huì)深度改變循環(huán)結(jié)構(gòu),并可能影響多個(gè)嵌套循環(huán)的整體性能。其根本目的是提升內(nèi)存訪問(wèn)效率,解決內(nèi)存帶寬和時(shí)延的瓶頸問(wèn)題。為實(shí)現(xiàn)這個(gè)目標(biāo),可以采用以下幾種策略:通過(guò)交換嵌套循環(huán)的順序,使得對(duì)多維數(shù)組元素的內(nèi)存訪問(wèn)更加有序,從而消除帶寬和時(shí)延的限制;將多維循環(huán)的執(zhí)行范圍合理拆分為多個(gè)循環(huán)塊,使得每塊數(shù)據(jù)的訪問(wèn)能夠與CPU緩存的大小相適配,從而優(yōu)化跨步幅訪存的內(nèi)存帶寬和時(shí)延;對(duì)于可以合并的情況,將多個(gè)獨(dú)立的循環(huán)合并在一起,以減少循環(huán)開銷,同時(shí)改善內(nèi)存訪問(wèn)的時(shí)間局部性。
但需要注意的是,循環(huán)合并并不總是能提高性能,有時(shí)候?qū)⒀h(huán)拆分為多條路徑、預(yù)過(guò)濾數(shù)據(jù)、對(duì)數(shù)據(jù)進(jìn)行排序和重組等可能更有效。拆分循環(huán)有助于解決在大循環(huán)中發(fā)生的緩存高度爭(zhēng)用問(wèn)題,還可以減少寄存器壓力,并且可以借助編譯器對(duì)小循環(huán)進(jìn)行進(jìn)一步的單獨(dú)優(yōu)化。
3)發(fā)現(xiàn)循環(huán)優(yōu)化的機(jī)會(huì)
編譯優(yōu)化報(bào)告顯示轉(zhuǎn)換失敗,需要查看由應(yīng)用程序剖析文件生成的匯編代碼的熱點(diǎn)部分。優(yōu)化的策略應(yīng)從簡(jiǎn)單的方案開始嘗試,然后開發(fā)者需明確循環(huán)中的瓶頸,并基于硬件理論最大值評(píng)估性能。可以使用屋頂線模型來(lái)確定需要分析的瓶頸點(diǎn),然后嘗試各種變換。
4)使用循環(huán)優(yōu)化框架
多面體框架可用于檢查循環(huán)轉(zhuǎn)換的合法性并自動(dòng)轉(zhuǎn)換循環(huán)。Polly是基于LLVM的高層循環(huán)和數(shù)據(jù)局部性優(yōu)化器及優(yōu)化基礎(chǔ)設(shè)施,采用基于整數(shù)多面體的抽象數(shù)學(xué)表示來(lái)分析和優(yōu)化程序的內(nèi)存訪問(wèn)模式。要啟用Polly,需要用戶通過(guò)顯式的編譯器選項(xiàng)(-mllvm -polly)來(lái)啟用,因?yàn)長(zhǎng)LVM基礎(chǔ)設(shè)施的標(biāo)準(zhǔn)流水線并未默認(rèn)啟用Polly。
3、向量化
使用SIMD指令可以顯著提高未向量化代碼的運(yùn)行速度。性能分析的重點(diǎn)之一是確保關(guān)鍵代碼能夠被編譯器正確向量化。如果編譯器無(wú)法生成所需的匯編指令,可以使用編譯器內(nèi)建函數(shù)重寫代碼片段。使用編譯器內(nèi)建函數(shù)的代碼與內(nèi)聯(lián)后的匯編代碼類似,可讀性較差。通常可以通過(guò)使用編譯注解等方式來(lái)指導(dǎo)編譯器進(jìn)行自動(dòng)向量化。編譯器可以進(jìn)行三種向量化操作:內(nèi)循環(huán)自動(dòng)向量化、外循環(huán)向量化和超字向量化。
1)編譯器自動(dòng)向量化
編譯器自動(dòng)向量化受到多種因素阻礙,包括編程語(yǔ)言的固有語(yǔ)義和處理器向量操作的限制。這些因素導(dǎo)致編譯器難以有效地將循環(huán)轉(zhuǎn)換為向量化的代碼。然而,通過(guò)合法性檢查、收益檢查和轉(zhuǎn)換三個(gè)階段,可以逐步優(yōu)化代碼并提高程序的運(yùn)行速度。在合法性檢查階段,評(píng)估循環(huán)向量化是否滿足一系列條件,以確保生成的代碼正確且有效。在收益檢查階段,比較不同的向量化因子并選擇最優(yōu)的方案,同時(shí)考慮代碼的執(zhí)行成本和效率。最后,在轉(zhuǎn)換階段,將通過(guò)插入向量化的保護(hù)代碼來(lái)啟用向量化執(zhí)行,并優(yōu)化代碼以提高運(yùn)行速度。
2)探索向量化的機(jī)會(huì)
分析程序中的熱點(diǎn)循環(huán),檢查編譯器已進(jìn)行哪些優(yōu)化,最簡(jiǎn)單方法是查看編譯器向量化標(biāo)記。當(dāng)循環(huán)無(wú)法向量化時(shí),編譯器會(huì)給出失敗原因。另一種方法是檢查程序的匯編輸出,分析剖析工具的輸出更好。雖然查看匯編費(fèi)時(shí),但該技能回報(bào)高,因?yàn)榭蓮膮R編代碼中發(fā)現(xiàn)次優(yōu)代碼、缺乏向量化、次優(yōu)向量化因子、執(zhí)行不必要計(jì)算等。
向量化標(biāo)記能清晰解釋問(wèn)題及編譯器不能向量化代碼的原因。gcc 10.2可輸出優(yōu)化報(bào)告(使用參數(shù)-fopt-info啟用)。開發(fā)者應(yīng)意識(shí)到向量化代碼的隱藏成本,尤其是AVX512可能導(dǎo)致大幅降頻。對(duì)于循環(huán)次數(shù)小的循環(huán),強(qiáng)制向量化程序使用小向量化因子或計(jì)數(shù)展開以減少循環(huán)處理的元素?cái)?shù)量。
多GPU編程
CUDA提供多GPU編程的功能,包括在一個(gè)或多個(gè)進(jìn)程中管理多設(shè)備,使用統(tǒng)一的虛擬尋址直接訪問(wèn)其他設(shè)備內(nèi)存,GPUDirect,以及使用流和異步函數(shù)實(shí)現(xiàn)的多設(shè)備計(jì)算通信重疊。
一、從一個(gè)GPU到多GPU
在處理大規(guī)模數(shù)據(jù)集時(shí),使用多GPU是提高計(jì)算效率和吞吐量的有效方式。多GPU系統(tǒng)通過(guò)不同的連接方式,如通過(guò)PCIe總線或在集群中的網(wǎng)絡(luò)交換機(jī)連接,來(lái)實(shí)現(xiàn)高效的GPU間通信。在多GPU應(yīng)用程序中,工作負(fù)載的分配和數(shù)據(jù)交換模式是關(guān)鍵因素。最基本的模式是各問(wèn)題分區(qū)在獨(dú)立GPU上運(yùn)行,而更復(fù)雜的模式則需要考慮數(shù)據(jù)如何在設(shè)備間進(jìn)行最優(yōu)移動(dòng)以避免數(shù)據(jù)復(fù)制到主機(jī)再?gòu)?fù)制到另一GPU。
1、在多GPU上執(zhí)行
CUDA的cudaGetDeviceCount函數(shù)可確定系統(tǒng)內(nèi)可用的CUDA設(shè)備數(shù)量。在利用CUDA與多GPU協(xié)作的應(yīng)用程序中,必須顯式指定目標(biāo)GPU。使用cudaSetDevice(int id)函數(shù)可設(shè)置當(dāng)前設(shè)備,該函數(shù)將具有特定ID的設(shè)備設(shè)置為當(dāng)前設(shè)備,與其他設(shè)備無(wú)同步,因此開銷較低。
如果在首個(gè)CUDA API調(diào)用前未顯示調(diào)用cudaSetDevice函數(shù),則當(dāng)前設(shè)備將自動(dòng)設(shè)置為設(shè)備0。選定當(dāng)前設(shè)備后,所有CUDA運(yùn)算將應(yīng)用于此設(shè)備,包括:從主線程分配的設(shè)備內(nèi)存、由CUDA運(yùn)行時(shí)函數(shù)分配的主機(jī)內(nèi)存、由主機(jī)線程創(chuàng)建的流或事件以及由主機(jī)線程啟動(dòng)的內(nèi)核。
多GPU適用于以下場(chǎng)景:?jiǎn)喂?jié)點(diǎn)的單線程、單節(jié)點(diǎn)的多線程、單節(jié)點(diǎn)的多進(jìn)程以及多節(jié)點(diǎn)的多進(jìn)程。以下代碼展示如何在主機(jī)線程中執(zhí)行內(nèi)核和內(nèi)存拷貝:
for (int i = 0; i < ngpus; i++) { ?
cudaSetDevice(i);
kernel<<>>(...);
cudaMemcpyAsync();
}
由于循環(huán)中的內(nèi)核啟動(dòng)和數(shù)據(jù)傳輸是異步的,因此在每次操作后,控制將快速返回至主機(jī)線程。
2、點(diǎn)對(duì)點(diǎn)通信
在計(jì)算能力2.0或以上的設(shè)備上,64位應(yīng)用程序執(zhí)行的內(nèi)核可以直接訪問(wèn)連接到同一PCIe根節(jié)點(diǎn)的GPU全局內(nèi)存,但需使用CUDA點(diǎn)對(duì)點(diǎn)API進(jìn)行設(shè)備間直接通信,該功能需要CUDA4.0或更高版本。點(diǎn)對(duì)點(diǎn)訪問(wèn)和傳輸是CUDA P2P API支持的兩種模式,但當(dāng)GPU連接到不同PCIe根節(jié)點(diǎn)時(shí),將不允許直接點(diǎn)對(duì)點(diǎn)訪問(wèn),此時(shí)可使用CUDA P2P API進(jìn)行點(diǎn)對(duì)點(diǎn)傳輸,但數(shù)據(jù)傳輸會(huì)通過(guò)主機(jī)內(nèi)存進(jìn)行。
1)啟用點(diǎn)對(duì)點(diǎn)訪問(wèn)
點(diǎn)對(duì)點(diǎn)訪問(wèn)允許GPU直接引用連接到同一PCIe根節(jié)點(diǎn)的其他GPU設(shè)備內(nèi)存上的數(shù)據(jù)。使用cudaDeviceCanAccessPeer檢查設(shè)備是否支持P2P,設(shè)備能直接訪問(wèn)對(duì)等設(shè)備全局內(nèi)存則返回1,否則返回0。在兩個(gè)設(shè)備間,必須使用cudaDeviceEnablePeerAccess顯式啟用點(diǎn)對(duì)點(diǎn)內(nèi)存訪問(wèn),該函數(shù)允許當(dāng)前設(shè)備到peerDevice的點(diǎn)對(duì)點(diǎn)訪問(wèn),授權(quán)的訪問(wèn)是單向的。點(diǎn)對(duì)點(diǎn)訪問(wèn)保持啟用狀態(tài),直到被cudaDeviceDisablePeerAccess顯式禁用。32位應(yīng)用程序不支持點(diǎn)對(duì)點(diǎn)訪問(wèn)。
2)點(diǎn)對(duì)點(diǎn)內(nèi)存復(fù)制
在兩個(gè)設(shè)備之間啟用對(duì)等訪問(wèn)后,可以使用cudaMemcpyPeerAsync函數(shù)異步復(fù)制設(shè)備上的數(shù)據(jù)。該函數(shù)將數(shù)據(jù)從源設(shè)備srcDev傳輸?shù)侥繕?biāo)設(shè)備dstDev。如果srcDev和dstDev連接在同一PCIe根節(jié)點(diǎn)上,數(shù)據(jù)傳輸將沿著PCIe的最短路徑執(zhí)行,無(wú)需通過(guò)主機(jī)內(nèi)存中轉(zhuǎn)。
3、多GPU間同步
多GPU應(yīng)用程序中,流和事件與單一設(shè)備關(guān)聯(lián),典型工作流程包括:選擇GPU集、為每個(gè)設(shè)備創(chuàng)建流和事件、分配設(shè)備資源、通過(guò)流啟動(dòng)任務(wù)、查詢和等待任務(wù)完成并清空資源。只有與流關(guān)聯(lián)的設(shè)備才能啟動(dòng)內(nèi)核和記錄事件。內(nèi)存拷貝可在任何流中進(jìn)行,與設(shè)備和當(dāng)前狀態(tài)無(wú)關(guān)。即使流或事件與當(dāng)前設(shè)備不相關(guān),也可以查詢或同步它們。
二、多GPU間細(xì)分計(jì)算
1、在多設(shè)備上分配內(nèi)存
在分配多個(gè)設(shè)備任務(wù)之前,首先需要確定系統(tǒng)中的可用GPU數(shù)量。通過(guò)cudaGetDeviceCount獲取GPU數(shù)量并打印。
接下來(lái),為每個(gè)設(shè)備聲明所需的內(nèi)存和流。使用cudaSetDevice為每個(gè)設(shè)備分配內(nèi)存和流。
對(duì)于每個(gè)設(shè)備,分配一定大小的主機(jī)內(nèi)存和設(shè)備內(nèi)存,并創(chuàng)建流。為了在設(shè)備和主機(jī)之間進(jìn)行異步數(shù)據(jù)傳輸,還需要分配鎖頁(yè)內(nèi)存。
最后,使用循環(huán)為每個(gè)設(shè)備執(zhí)行以下操作:
1)設(shè)置當(dāng)前設(shè)備
2)分配設(shè)備內(nèi)存:cudaMalloc
3)分配主機(jī)內(nèi)存:cudaMallocHost
4)創(chuàng)建流:cudaStreamCreate
這樣,就為每個(gè)設(shè)備分配了內(nèi)存和流,準(zhǔn)備好進(jìn)行任務(wù)分配和數(shù)據(jù)傳輸。
2、單主機(jī)線程分配工作
// 在設(shè)備間分配操作之前,為每個(gè)設(shè)備初始化主機(jī)數(shù)組的狀態(tài)
for (int i = 0; i < ngpus; i++)
{
cudaSetDevice(i);
initial(h_A[i], iSize);
initial(h_B[i], iSize);
}
// 在多個(gè)設(shè)備間分配數(shù)據(jù)和計(jì)算
for (int i = 0; i < ngpus; i++)
{
cudaSetDevice(i);
cudaMemcpyAsync(d_A[i], h_A[i], iBytes, cudaMemcpyHostToDevice, streams[i]);
cudaMemcpyAsync(d_B[i], h_B[i], iBytes, cudaMemcpyHostToDevice, streams[i]);
iKernel<<>>(d_A[i], d_B[i], d_C[i], iSize);
cudaMemcpyAsync(gpuRef[i], d_C[i], iBytes, cudaMemcpyDeviceToHost, stream[i]);
}
cudaDeviceSynchronize();
這個(gè)循環(huán)遍歷多個(gè)GPU,為設(shè)備異步地復(fù)制輸入數(shù)組。然后在想要的流中操作iSize個(gè)數(shù)據(jù)元素以便啟動(dòng)內(nèi)核。最后,設(shè)備發(fā)出異步拷貝命令,把結(jié)果從內(nèi)核返回到主機(jī)。因?yàn)樗械脑囟际钱惒降模钥刂茣?huì)立即返回到主機(jī)線程。
三、多個(gè)GPU上的點(diǎn)對(duì)點(diǎn)通信
下面將測(cè)試兩個(gè)GPU之間的單向內(nèi)存復(fù)制;兩個(gè)GPU之間的雙向內(nèi)存和內(nèi)核中對(duì)等設(shè)備內(nèi)存的訪問(wèn)3種情況;
1、實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)訪問(wèn)
首先,必須對(duì)所有設(shè)備啟用雙向點(diǎn)對(duì)點(diǎn)訪問(wèn),代碼如下;
// 啟動(dòng)雙向點(diǎn)對(duì)點(diǎn)訪問(wèn)權(quán)限
inline void enableP2P(int ngpus)
{
for (int i = 0; i < ngpus; i++)
{
cudaSetDevice(i)
for (int j = 0; j < ngpus; j++)
{
if (i == j)
continue;
int peer_access_available = 0;
cudaDeviceCanAccessPeer(&peer_access_available, i, j);
if (peer_access_avilable)
{
cudaDeviceEnablePeerAccess(j, i);
printf(" > GP%d enbled direct access to GPU%dn", i, j);
}
else
printf("(%d, %d)n", i, j);
}
}
}
函數(shù)enbleP2P遍歷所有設(shè)備對(duì)(i,j),如果支持點(diǎn)對(duì)點(diǎn)訪問(wèn),則使用cudaDeviceEnablePeerAccess函數(shù)啟用雙向點(diǎn)對(duì)點(diǎn)訪問(wèn)。
2、點(diǎn)對(duì)點(diǎn)內(nèi)存復(fù)制
不能啟用點(diǎn)對(duì)點(diǎn)訪問(wèn)的最有可能的原因是它們沒(méi)有連接到同一個(gè)PCIe根節(jié)點(diǎn)上。如果兩個(gè)GPU之間不支持點(diǎn)對(duì)點(diǎn)訪問(wèn),那么這兩個(gè)設(shè)備之間的點(diǎn)對(duì)點(diǎn)內(nèi)存復(fù)制將通過(guò)主機(jī)內(nèi)存中轉(zhuǎn),從而降低了性能。
啟用點(diǎn)對(duì)點(diǎn)訪問(wèn)后,下面的代碼在兩個(gè)設(shè)備間執(zhí)行ping-pong同步內(nèi)存復(fù)制,次數(shù)為100次。
// ping-pong undirectional gmem copy
cudaEventRecord(start, 0);
for (int i = 0; u < 100; i++)
{
if (i % 2 == 0)
cudaMemcpy(d_src[1], drc[0], iBytes, cudaMemcpyDeviceToHost);
else
cudaMemcpy(d_src[0], drc[1], iBytes, cudaMemcpyDeviceToHost);
}
請(qǐng)注意,在內(nèi)存復(fù)制之前沒(méi)有指定設(shè)備,因?yàn)榭缭O(shè)備的內(nèi)存復(fù)制不需要顯式地設(shè)定當(dāng)前設(shè)備。如果在內(nèi)存復(fù)制前指定了設(shè)備,也不會(huì)影響它的行為。
如需衡量設(shè)備之間數(shù)據(jù)傳輸?shù)男阅埽枰褑?dòng)和停止事件記錄在同一設(shè)備上,并將ping-pong內(nèi)存復(fù)制包含在內(nèi)。然后,用cudaEventElapsedTime計(jì)算兩個(gè)事件之間消耗的時(shí)間。
// ping-pong undirectional gmem copy
cudaEventRecord(start, 0);
for (int i = 0; u < 100; i++)
{
if (i % 2 == 0)
cudaMemcpy(d_src[1], drc[0], iBytes, cudaMemcpyDeviceToHost);
else
cudaMemcpy(d_src[0], drc[1], iBytes, cudaMemcpyDeviceToHost);
}
cudaEventRecord(start, 0);
for (int i = 0; u < 100; i++)
{
...
}
cudaSetDevice(0);
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsed_time_ms;
cudaEventElapsedTime(&elapsed_time_ms, start, stop);
elapsed_time_ms /= 100;
printf("Ping-pong unidirectional cudaMemcpy: tt %8.2f ms", elapsed_time_ms);
printf("performance: %8.2f GB/sn", (float)iBytes / (elapsed_time_ms * 1e6f));
因?yàn)镻CIe總線支持任何兩個(gè)端點(diǎn)之間的全雙工通道,所以也可以使用異步復(fù)制函數(shù)來(lái)進(jìn)行雙向的且點(diǎn)對(duì)點(diǎn)的內(nèi)存復(fù)制。
// bidirectional asynchronous gmem copy
for (int i = 0; u < 100; i++)
{
if (i % 2 == 0)
cudaMemcpyAsync(d_src[1], drc[0], iBytes, cudaMemcpyDeviceToHost);
else
cudaMemcpyAsync(d_rcv[0], drcv[1], iBytes, cudaMemcpyDeviceToHost);
}
注意,由于PCIe總線是一次兩個(gè)方向上使用的,所以獲得的帶寬增加了一倍。
中國(guó)算力產(chǎn)業(yè)發(fā)展及瓶頸
一、市場(chǎng)規(guī)模:服務(wù)器作為算力載體,受益云計(jì)算需求提升
1、產(chǎn)業(yè)鏈:下游各領(lǐng)域算力需求帶動(dòng)服務(wù)器產(chǎn)業(yè)發(fā)展
服務(wù)器產(chǎn)業(yè)鏈上游主要是電子材料及零部件/配套。中游為各類服務(wù)器產(chǎn)品,包括云服務(wù)器、智能服務(wù)器、邊緣服務(wù)器、儲(chǔ)存服務(wù)器。下游需求主體為數(shù)據(jù)中心服務(wù)商、互聯(lián)網(wǎng)企業(yè)、政府部門、金融機(jī)構(gòu)、電信運(yùn)營(yíng)商等。
服務(wù)器產(chǎn)業(yè)鏈全景圖
2、云計(jì)算:算力應(yīng)用互聯(lián)網(wǎng)需求最大,其次為政府、服務(wù)等
在通用算力領(lǐng)域,互聯(lián)網(wǎng)行業(yè)依然是算力需求最大的行業(yè),占據(jù)了通用算力的39%。電信行業(yè)加大了對(duì)算力基礎(chǔ)設(shè)施的投入,算力份額首次超過(guò)政府行業(yè),位列第二。而政府、服務(wù)、金融、制造、教育、運(yùn)輸?shù)刃袠I(yè)位列三到八位。
在智能算力領(lǐng)域,互聯(lián)網(wǎng)行業(yè)對(duì)數(shù)據(jù)處理和模型訓(xùn)練的需求持續(xù)增長(zhǎng),成為智能算力需求最大的行業(yè),占據(jù)了智能算力的53%。服務(wù)行業(yè)正在快速?gòu)膫鹘y(tǒng)模式轉(zhuǎn)向新興智慧模式,其算力份額占比位列第二。而政府、電信、制造、教育、金融、運(yùn)輸?shù)刃袠I(yè)分列第三到八位。
2、云計(jì)算:中國(guó)市場(chǎng)增速快于全球,預(yù)計(jì)2025年突破萬(wàn)億元
根據(jù)Gartner數(shù)據(jù),2022年全球云計(jì)算市場(chǎng)規(guī)模達(dá)到4910億美元,同比增長(zhǎng)19%,但較2021年同比下降13.5%。而根據(jù)中國(guó)信息通信研究院的統(tǒng)計(jì),2022年中國(guó)云計(jì)算市場(chǎng)規(guī)模達(dá)到4550億元,同比增長(zhǎng)40.91%。
全球云計(jì)算市場(chǎng)規(guī)模及增速
云計(jì)算仍然是新技術(shù)融合和業(yè)態(tài)發(fā)展的重要推動(dòng)力。預(yù)計(jì)在大模型和算力需求的刺激下,市場(chǎng)將繼續(xù)保持穩(wěn)定增長(zhǎng),到2026年全球云計(jì)算市場(chǎng)將突破萬(wàn)億美元。相比全球19%的增速,中國(guó)云計(jì)算市場(chǎng)仍處于快速發(fā)展階段,在大經(jīng)濟(jì)頹勢(shì)下仍保持較高的抗風(fēng)險(xiǎn)能力,預(yù)計(jì)到2025年我國(guó)云計(jì)算整體市場(chǎng)規(guī)模將突破萬(wàn)億元。
中國(guó)云計(jì)算市場(chǎng)規(guī)模及增速
3、服務(wù)器:銷售端頭部集中,采購(gòu)端以科技巨頭為主
根據(jù)IDC之前公布的數(shù)據(jù),2022年中國(guó)服務(wù)器市場(chǎng)的主要供應(yīng)商包括浪潮信息、新華三、超聚變、寧暢和中興通訊。
2022年中國(guó)服務(wù)器市份額情況
國(guó)內(nèi)AI服務(wù)器行業(yè)采用CPU+加速芯片的架構(gòu)形式,在進(jìn)行模型訓(xùn)練和推斷時(shí)具有效率優(yōu)勢(shì)。浪潮信息在國(guó)內(nèi)市場(chǎng)份額較高,其次為新華三、寧暢、安擎等。
2022年中國(guó)AI服務(wù)器市份額情況
隨著云計(jì)算、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等技術(shù)的興起,互聯(lián)網(wǎng)巨頭逐漸取代政府和銀行等部門成為服務(wù)器的主要采購(gòu)方。在2012年之前,服務(wù)器的下游客戶主要是政府、銀行等金融機(jī)構(gòu)、電信和其他大型企業(yè)。然而,現(xiàn)在服務(wù)器的下游客戶主要以科技巨頭為主,如海外亞馬遜、微軟、谷歌以及國(guó)內(nèi)阿里、騰訊等為代表的云計(jì)算巨頭逐步成為服務(wù)器市場(chǎng)的主要采購(gòu)客戶。
2022年中國(guó)主要云廠商服務(wù)器規(guī)模
根據(jù)IDC的預(yù)測(cè)數(shù)據(jù),2023年全球服務(wù)器市場(chǎng)規(guī)模同比幾乎持平,而2024年及以后服務(wù)器市場(chǎng)將保持8-11%的增速,預(yù)計(jì)到2027年市場(chǎng)規(guī)模將達(dá)到1780億美元。
2022-2027E全球服務(wù)器市場(chǎng)規(guī)模(億美元)
2022年中國(guó)服務(wù)器市場(chǎng)規(guī)模約為273.4億美元,同比增長(zhǎng)9%,增速有所放緩。根據(jù)華經(jīng)產(chǎn)業(yè)研究院的數(shù)據(jù),2023年市場(chǎng)規(guī)模將達(dá)到308億美元,增速為13%。隨著東數(shù)西算項(xiàng)目的推進(jìn)、海量數(shù)據(jù)運(yùn)算和存儲(chǔ)需求的快速增長(zhǎng)等因素的影響,中國(guó)服務(wù)器整體的采購(gòu)需求將進(jìn)一步增加。IDC預(yù)測(cè),到2027年中國(guó)AI服務(wù)器市場(chǎng)規(guī)模將達(dá)到164億美元。
2016-2023E中國(guó)服務(wù)器市場(chǎng)規(guī)模(億美元)
二、底層關(guān)鍵: CPU是服務(wù)器的大腦,國(guó)產(chǎn)替代空間廣闊
1、作用關(guān)鍵:CPU是服務(wù)器的大腦,GPU并行計(jì)算能力很強(qiáng)
CPU是服務(wù)器的控制中心,負(fù)責(zé)完成布局謀略、發(fā)號(hào)施令、控制行動(dòng)等任務(wù),其結(jié)構(gòu)包括運(yùn)算器、控制單元、寄存器、高速緩存器和通訊的總線。GPU由于圖形渲染、數(shù)值分析、AI推理等底層邏輯需要將繁重的數(shù)學(xué)任務(wù)拆解,利用GPU多流處理器機(jī)制,將大量運(yùn)算拆解為小運(yùn)算,并行處理。CPU和GPU是兩種不同的處理器,CPU是程序控制、順序執(zhí)行的通用處理器,而GPU是用于特定領(lǐng)域分析的專用處理器,受CPU控制。在許多終端設(shè)備中,CPU和GPU通常集成在一個(gè)芯片中,同時(shí)具備CPU或GPU處理能力。
GPU投入更多晶體管進(jìn)行數(shù)據(jù)處理,并行運(yùn)算能力強(qiáng)
2、價(jià)值關(guān)鍵:CPU、GPU占據(jù)各類服務(wù)器的硬件成本高
服務(wù)器的硬件成本構(gòu)成上,CPU及芯片組、內(nèi)存和外部存儲(chǔ)是主要部分:在普通服務(wù)器中,CPU及芯片組約占32%,內(nèi)存約占27%,外部存儲(chǔ)約占18%,其他硬件約占23%。而在AI服務(wù)器上,GPU的成本占比則遠(yuǎn)高于其他部分,可能接近整體成本的70%。從普通服務(wù)器升級(jí)到AI訓(xùn)練服務(wù)器時(shí),其他單臺(tái)服務(wù)器價(jià)值量增量較大的部件包括內(nèi)存、SSD、PCB、電源等,都有數(shù)倍的提升。
服務(wù)器內(nèi)部拆解示意圖
3、處理器:CPU主導(dǎo)地位,GPU增長(zhǎng)迅猛
根據(jù)Yole Intelligence的報(bào)告,預(yù)計(jì)到2028年處理器市場(chǎng)的收入將達(dá)到2420億美元,復(fù)合年增長(zhǎng)率為8%。CPU市場(chǎng)的主導(dǎo)地位將得到鞏固,2028年市場(chǎng)規(guī)模將達(dá)到970億美元,復(fù)合年增長(zhǎng)率為6.9%。GPU市場(chǎng)也將實(shí)現(xiàn)顯著增長(zhǎng),2028年市場(chǎng)規(guī)模將達(dá)到550億美元,復(fù)合年增長(zhǎng)率為16.5%。在處理器市場(chǎng)上,英特爾、AMD、英偉達(dá)等巨頭以及紫光展銳主導(dǎo)著市場(chǎng)。在國(guó)內(nèi)外服務(wù)器所使用的處理器方面,英特爾、AMD、英偉達(dá)、龍芯、兆芯、鯤鵬、海光、飛騰、申威、昇騰等占主導(dǎo)地位。
2022-2028年按處理器類型劃分的處理器收入預(yù)測(cè)
4、我國(guó)在美國(guó)多輪制裁下不斷進(jìn)行科技攻堅(jiān)
自2019年5月至2020年9月,美國(guó)政府對(duì)華為實(shí)施多輪制裁,導(dǎo)致華為5G手機(jī)芯片供應(yīng)被切斷,華為手機(jī)銷量大幅下滑。此后,美國(guó)針對(duì)我國(guó)半導(dǎo)體領(lǐng)域的限制不斷升級(jí)。然而,華為最新旗艦機(jī)型采用了7nm工藝的麒麟9000s芯片,標(biāo)志著中國(guó)在芯片設(shè)計(jì)和制造領(lǐng)域的里程碑。
2023年10月17日,美國(guó)商務(wù)部工業(yè)和安全局公布了新的尖端芯片出口管制規(guī)則,共計(jì)近500頁(yè),全面限制美國(guó)芯片巨頭如英偉達(dá)、英特爾等生產(chǎn)的“特供版”芯片出口到中國(guó)及40余個(gè)國(guó)家。此外,還更新了半導(dǎo)體設(shè)備和技術(shù)相關(guān)的“長(zhǎng)臂管轄”,擴(kuò)大荷蘭***企業(yè)ASML不可對(duì)華出口機(jī)型范圍,并限制波及中國(guó)之外20余個(gè)國(guó)家。同時(shí),將壁仞科技、摩爾線程等13個(gè)中國(guó)實(shí)體加入美國(guó)管制清單,限制中國(guó)企業(yè)通過(guò)代工廠生產(chǎn)先進(jìn)芯片。
10月17日美國(guó)商務(wù)部工業(yè)和安全局公布管制新規(guī)
三、算力的瓶頸在哪里,機(jī)會(huì)就會(huì)在哪里
算力是現(xiàn)代計(jì)算機(jī)技術(shù)的核心,其瓶頸主要存在于數(shù)據(jù)傳輸和存儲(chǔ)方面。目前,計(jì)算機(jī)普遍采用馮諾依曼架構(gòu),數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)計(jì)算分開,算力容易被卡在數(shù)據(jù)傳輸,而非真正的計(jì)算。算力分為四層,每一層都需要解決如何讓數(shù)據(jù)連接更快的問(wèn)題。
1、GPU內(nèi)部
GPU內(nèi)部的計(jì)算單元與顯存之間的數(shù)據(jù)傳輸是性能提升的瓶頸,同時(shí)多個(gè)GPU間的協(xié)同計(jì)算也受到數(shù)據(jù)傳輸速度的限制。傳統(tǒng)GPU通常采用GDDR內(nèi)存,這種內(nèi)存是平面封裝,導(dǎo)致數(shù)據(jù)傳輸速度跟不上GPU的計(jì)算速度。為解決這一問(wèn)題,升級(jí)后的方案采用HBM內(nèi)存技術(shù)。HBM內(nèi)存是垂直封裝,能夠提供更大的帶寬,從而將數(shù)據(jù)更快地傳輸?shù)紾PU的計(jì)算單元中。例如,HBM2的帶寬高達(dá)256GB/s,比傳統(tǒng)的GDDR內(nèi)存快十倍以上。
2、AI服務(wù)器
每臺(tái)AI服務(wù)器都由多個(gè)GPU組成(4個(gè)、8個(gè)甚至更多),GPU需要進(jìn)行協(xié)同計(jì)算。然而,它們之間的數(shù)據(jù)傳輸速度成為性能的瓶頸。在這方面,英偉達(dá)GPU連接技術(shù)最為先進(jìn),使用的是其NVLink協(xié)議,每秒傳輸速度高達(dá)50GB。華為也擁有自己的HCCS協(xié)議,帶寬表現(xiàn)不錯(cuò),每秒30GB,與英偉達(dá)沒(méi)有量級(jí)的差異。然而,其他傳統(tǒng)的服務(wù)器只采用PCIe 5標(biāo)準(zhǔn)接口,每通道傳輸速度只有4GB,不到英偉達(dá)的十分之一。因此,為提高數(shù)據(jù)傳輸速度并解決該瓶頸問(wèn)題,需要采用更先進(jìn)的技術(shù)和協(xié)議。
3、數(shù)據(jù)中心
數(shù)據(jù)中心由上百甚至上千臺(tái)AI服務(wù)器組成計(jì)算集群,服務(wù)器之間需要快速的數(shù)據(jù)連接。英偉達(dá)采用專用的InfiniBand網(wǎng)絡(luò),而其他廠商則使用ROC高速以太網(wǎng)網(wǎng)絡(luò)。盡管這兩種網(wǎng)絡(luò)在物理層都使用光纖連接,但都離不開光模塊。無(wú)論是數(shù)據(jù)發(fā)送還是接收,無(wú)論是服務(wù)器端還是交換機(jī)端,都需要光模塊。今年,光模塊的技術(shù)從400G升級(jí)到800G,因?yàn)閲?guó)內(nèi)廠商在光模塊制造領(lǐng)域的占比很高,因此這一塊的業(yè)績(jī)能夠真正實(shí)現(xiàn),導(dǎo)致光模塊技術(shù)在算力領(lǐng)域被炒作得最多。
4、數(shù)據(jù)網(wǎng)絡(luò)
不同地點(diǎn)和城市的數(shù)據(jù)中心可以組成一個(gè)龐大的算力網(wǎng)絡(luò),通過(guò)調(diào)度和統(tǒng)籌,終端用戶輕松地使用最快且最便宜的算力資源。目前,算力網(wǎng)絡(luò)的發(fā)展趨勢(shì)是采用云-邊-端的架構(gòu),旨在解決數(shù)據(jù)傳輸?shù)膯?wèn)題。其中,邊緣計(jì)算是最為熱門的技術(shù)之一。邊緣計(jì)算并不僅僅是指手機(jī)和智能車輛,而是指在傳統(tǒng)的云計(jì)算中心之外,更靠近終端地方增加一層直接計(jì)算能力,以節(jié)省數(shù)據(jù)傳輸?shù)某杀竞蜁r(shí)間。因此,未來(lái)的大趨勢(shì)是云的AI算力、邊緣的AI算力和用戶端的AI算力相互結(jié)合,共同推動(dòng)人工智能技術(shù)的發(fā)展。
藍(lán)海大腦深度學(xué)習(xí)大數(shù)據(jù)平臺(tái)
藍(lán)海大腦深度學(xué)習(xí)大數(shù)據(jù)平臺(tái)是面向多源空間數(shù)據(jù)的處理平臺(tái),集成存儲(chǔ)、計(jì)算和數(shù)據(jù)處理軟件,具有高效、易操作、低成本、多層次擴(kuò)展和快速部署等顯著優(yōu)勢(shì),在測(cè)繪、農(nóng)業(yè)、林業(yè)、水利、環(huán)保等領(lǐng)域大大提升圖像處理能力,保護(hù)投資,高效應(yīng)對(duì)大數(shù)據(jù)挑戰(zhàn),加速業(yè)務(wù)突破和轉(zhuǎn)型。
一、主要技術(shù)指標(biāo)
可 靠 性:平均故障間隔時(shí)間MTBF≥15000 h
工作溫度:5~40 ℃
工作濕度:35 %~80 %
存儲(chǔ)溫度:-40~55 ℃
存儲(chǔ)濕度:20 %~90 %
聲 噪:≤35dB
二、特點(diǎn)及優(yōu)勢(shì):
基于統(tǒng)一的整體架構(gòu),采用先進(jìn)成熟可靠的技術(shù)與軟硬件平臺(tái),保證基礎(chǔ)數(shù)據(jù)平臺(tái)易擴(kuò)展、易升級(jí)、易操作、易維護(hù)等特性。基于業(yè)界熱門,且領(lǐng)先的 Spark 技術(shù),極速提高平臺(tái)的整體計(jì)算性能。
支持基礎(chǔ)數(shù)據(jù)模型、應(yīng)用分析模型、前端應(yīng)用的擴(kuò)展性;支持在統(tǒng)一系統(tǒng)架構(gòu)中服務(wù)器、存儲(chǔ)、I/O 設(shè)備等的可擴(kuò)展性。
制定并實(shí)施基礎(chǔ)數(shù)據(jù)平臺(tái)高可用性方案、運(yùn)行管理監(jiān)控制度、運(yùn)行維護(hù)制度、故障處理預(yù)案等,保證系統(tǒng)在多用戶、多節(jié)點(diǎn)等復(fù)雜環(huán)境下的可靠性。
高效性:在規(guī)定時(shí)間內(nèi)完成數(shù)據(jù)寫入操作,并將數(shù)據(jù)寫入對(duì)數(shù)據(jù)分析的影響降到最低;提升實(shí)現(xiàn)規(guī)劃要求的數(shù)據(jù)查詢和統(tǒng)計(jì)分析速度。
數(shù)據(jù)質(zhì)量貫穿基礎(chǔ)數(shù)據(jù)平臺(tái)系統(tǒng)建設(shè)的每個(gè)環(huán)節(jié),基礎(chǔ)數(shù)據(jù)平臺(tái)系統(tǒng)通過(guò)合理的數(shù)據(jù)質(zhì)量管理解決方案保證數(shù)據(jù)質(zhì)量。
按國(guó)家標(biāo)準(zhǔn)、行業(yè)標(biāo)準(zhǔn)、安全規(guī)范等實(shí)現(xiàn)數(shù)據(jù)安全管理。
統(tǒng)一的管理平臺(tái),對(duì)系統(tǒng)進(jìn)行相應(yīng)的性能管理和日志監(jiān)控。
人機(jī)接口靈活多樣的展現(xiàn)方式,最終用戶只需進(jìn)行適當(dāng)?shù)呐嘤?xùn)就可以方便地使用新的分析工具,減少 IT 人員的工作量,加強(qiáng)集群監(jiān)管的時(shí)效性。
具有超強(qiáng)影像處理能力,每天(24小時(shí))可處理多達(dá)500景對(duì)(全色和多光譜)高分一號(hào)影像數(shù)據(jù)。
廣泛適用于基礎(chǔ)測(cè)繪、農(nóng)業(yè)、林業(yè)、水利、環(huán)保等領(lǐng)域,適合常規(guī)模式下產(chǎn)品生產(chǎn)和應(yīng)急模式下快速影像圖生成。
針對(duì)大數(shù)據(jù)原始技術(shù)存在的問(wèn)題,藍(lán)海大腦大數(shù)據(jù)平臺(tái)從企業(yè)應(yīng)用角度出發(fā),對(duì) Apache Hadoop 進(jìn)行了系列技術(shù)開發(fā),形成了適應(yīng)企業(yè)級(jí)應(yīng)用的一站式大數(shù)據(jù)平臺(tái),從而滿足各類企業(yè)的要求:
超大數(shù)據(jù)的分布式存儲(chǔ)、流數(shù)據(jù)實(shí)時(shí)計(jì)算要求
滿足大數(shù)據(jù)的高并發(fā)、低延遲查詢請(qǐng)求
分布式應(yīng)用系統(tǒng)異常故障時(shí),業(yè)務(wù)切換
系統(tǒng)線性擴(kuò)展時(shí),無(wú)需增加開發(fā)工作,實(shí)現(xiàn)無(wú)成本擴(kuò)展
三、常用配置推薦
1、CPU:
- Intel Xeon Gold 8358P 32C/64T 2.6GHz 48MB,DDR4 3200,Turbo,HT 240W
- Intel Xeon Platinum 8458P 28C/56T 2.7GHz 38.5MB,DDR4 2933,Turbo,HT 205W
- Intel Xeon Platinum 8468 Processor 48C/64T 2.1GHz 105M Cache 350W
- AMD EPYC? 7742 64C/128T,2.25GHz to 3.4GHz,256MB,DDR4 3200MT/s,225W
- AMD EPYC? 9654 96C/192T,2.4GHz to 3.55GHz to 3.7GHz,384MB,DDR5 4800MT/s,360W
- Intel Xeon Platinum 8350C 32C/64T 2.6GHz 48MB,DDR4 3200,Turbo,HT 240W
- Intel Xeon Gold 6240R 24C/48T,2.4GHz,35.75MB,DDR4 2933,Turbo,HT,165W.1TB
- Intel Xeon Gold 6258R 28C/56T,2.7GHz,38.55MB,DDR4 2933,Turbo,HT,205W.1TB
- Intel Xeon W-3265 24C/48T 2.7GHz 33MB 205W DDR4 2933 1TB
- Intel Xeon Platinum 8280 28C/56T 2.7GHz 38.5MB,DDR4 2933,Turbo,HT 205W 1TB
- Intel Xeon Platinum 9242 48C/96T 3.8GHz 71.5MB L2,DDR4 3200,HT 350W 1TB
- Intel Xeon Platinum 9282 56C/112T 3.8GHz 71.5MB L2,DDR4 3200,HT 400W 1TB
2、GPU:
- NVIDIA A100, NVIDIA GV100
- NVIDIA L40S GPU 48GB
- NVIDIA NVLink-A100-SXM640GB
- NVIDIA HGX A800 80GB
- NVIDIA Tesla H800 80GB HBM2
- NVIDIA A800-80GB-400Wx8-NvlinkSW
- NVIDIA RTX 3090, NVIDIA RTX 3090TI
- NVIDIA RTX 8000, NVIDIA RTX A6000
- NVIDIA Quadro P2000,NVIDIA Quadro P2200
審核編輯 黃宇
-
cpu
+關(guān)注
關(guān)注
68文章
11003瀏覽量
215029 -
gpu
+關(guān)注
關(guān)注
28文章
4880瀏覽量
130343 -
源碼
+關(guān)注
關(guān)注
8文章
665瀏覽量
30040 -
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8941瀏覽量
139060 -
AIGC
+關(guān)注
關(guān)注
1文章
380瀏覽量
2044
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
DeepSeek推動(dòng)AI算力需求:800G光模塊的關(guān)鍵作用
云 GPU 加速計(jì)算:突破傳統(tǒng)算力瓶頸的利刃
GPU算力租用平臺(tái)有什么好處
算智算中心的算力如何衡量?

《算力芯片 高性能 CPUGPUNPU 微架構(gòu)分析》第3篇閱讀心得:GPU革命:從圖形引擎到AI加速器的蛻變
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--了解算力芯片GPU
【一文看懂】大白話解釋“GPU與GPU算力”

未來(lái)邊緣GPU算力在車聯(lián)網(wǎng)中的創(chuàng)新應(yīng)用

《算力芯片 高性能 CPU/GPU/NPU 微架構(gòu)分析》第1-4章閱讀心得——算力之巔:從基準(zhǔn)測(cè)試到CPU微架構(gòu)的深度探索
GPU算力租用平臺(tái)是什么
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--全書概覽
中國(guó)算力大會(huì)召開,業(yè)界首個(gè)算力高質(zhì)量評(píng)估體系發(fā)布

弘信電子集團(tuán):破解中國(guó)算力瓶頸的燧弘模式
名單公布!【書籍評(píng)測(cè)活動(dòng)NO.43】 算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析
算力服務(wù)器為什么選擇GPU

評(píng)論