在初創(chuàng)公司甚至VC都在瘋狂囤積GPU的狂熱年代,干一件事比囤GPU更有價(jià)值——搞明白如何高效地使用它們。
直到Eleuther AI的出現(xiàn)。
(相關(guān)資料圖)
四月,Eleuther AI團(tuán)隊(duì)發(fā)布博文《Transformers Math 101》,介紹如何運(yùn)用簡(jiǎn)單算式估計(jì)大模型的算力成本,大大消除了該領(lǐng)域的信息不對(duì)稱,在圈內(nèi)圈外廣泛傳播,成為該領(lǐng)域最具權(quán)威性的博文之一。公式如下:
C = τT?≈?6PD
其中:C表示Transformer需要的計(jì)算量,單位是FLOP;P表示Transformer模型包含的參數(shù)量;D表示訓(xùn)練數(shù)據(jù)規(guī)模,以Token數(shù)量為單位;τ表示吞吐量,單位為FLOP 表示訓(xùn)練時(shí)間;
該公式的原理如下:
C=Cforward+Cbackward:表示訓(xùn)練過程中的前后向傳播;?Cforward?≈?2PD:前向傳播計(jì)算成本約等于兩倍的參數(shù)量乘以數(shù)據(jù)規(guī)模;Cbackrward?≈?4PD:反向傳播計(jì)算成本約等于四倍的參數(shù)量乘以數(shù)據(jù)規(guī)模;
C是一個(gè)量化計(jì)算成本的單位,通常用FLOP表示,亦可用一些新的單位來表示,如FLOP/s-s:表示每秒浮點(diǎn)運(yùn)算數(shù)/秒;PetaFLOP/s-days:表示實(shí)際情況下每秒浮點(diǎn)運(yùn)算數(shù)/天。
8月17日,Eleuther AI首席工程師、《Transformers Math 101》的主要作者Quentin Anthony博士,同風(fēng)險(xiǎn)投資公司Decibel Partners 的合伙人兼首席技術(shù)官Alessio、Latent Space主理人Swyx進(jìn)行了一場(chǎng)深度交流,
雙方圍繞Transformer模型算力評(píng)估、混合精度訓(xùn)練、3D并行、INT8量化、分布式挑戰(zhàn)等NLP前沿話題展開了深度討論,文章干貨很足,相信對(duì)想了解Transformer成本、大模型優(yōu)化技術(shù)等方面的朋友一定大有裨益。
以下為全文內(nèi)容,大家enjoy~???
(由ChatGPT翻譯,經(jīng)略微修改)
●?發(fā)文動(dòng)機(jī)
●?GPU并非越多越好
●?估計(jì)GPT-3訓(xùn)練的計(jì)算量
●?AMD GPU:可用,但效率不高
●?模型精度(FP32、FP16、BF16等)對(duì)內(nèi)存的影響
●?深度學(xué)習(xí)模型量化的好處
●?如何計(jì)算優(yōu)化器的內(nèi)存使用
●?訓(xùn)練內(nèi)存的各個(gè)組成部分
● 并行訓(xùn)練
●?高級(jí)3D并行技術(shù)
●?異構(gòu)集群分布的挑戰(zhàn)
Quentin:
聊到撰寫《Transformer Math 101》一文的動(dòng)機(jī),就不得不提到我經(jīng)常會(huì)在深度學(xué)習(xí)訓(xùn)練領(lǐng)域看到一些推特帖子,比如Hugging Face的Stas Bekman,他會(huì)發(fā)布一些推文,說什么他們剛剛發(fā)現(xiàn)了一個(gè)神奇數(shù)字,一切都變得快了20%等等。
他們非常興奮,但實(shí)際上并不真正了解發(fā)生了什么。對(duì)我們來說,我們經(jīng)常發(fā)現(xiàn)很多人可能了解AI訓(xùn)練或推理的理論或基本原理,但沒有人真正了解像在自己的機(jī)器上如何正確運(yùn)行分布在兩個(gè)GPU上的推理之類的細(xì)節(jié)。
而我們,在Eleuther內(nèi)部積累了很多筆記,并在工程師之間共享,我們認(rèn)為,這可能會(huì)幫助很多其他人。
這可能不適合寫論文,但對(duì)于博客文章或技術(shù)報(bào)告來說,這可能確實(shí)能夠從已有的硬件中擠出更多性能。
因此,我們?cè)贓leuther有很多經(jīng)驗(yàn),我們?cè)噲D以一種大公司們不會(huì)采取的方式將其與人們分享。
Swyx:
是的,這是很少有人會(huì)真正干的事情。首先,寫下來需要額外的工作。其次,這是一種商業(yè)機(jī)密,因此很少有人這樣做。
因此,通常了解這些內(nèi)容的唯一方法就是實(shí)際在大型模型實(shí)驗(yàn)室中工作。而你們,做了很多特別的事情。我唯一能想到的其他另一個(gè)情況是Facebook的OPT。還有什么類似的項(xiàng)目,可以共享交流經(jīng)驗(yàn),但不是正式的研究知識(shí)呢?
Quentin:
我會(huì)說是Bloom。比如Hugging Face的Bloom項(xiàng)目在大科學(xué)領(lǐng)域等方面,這種開放程度非常高。
我覺得,OPT和Bloom的級(jí)別相同,甚至更詳細(xì)。
除此之外,我想微軟有一個(gè)有關(guān)他們的Turing NLG的文檔。他們的文章讀起來非常輕松,也確實(shí)談到了工作中的一些挑戰(zhàn)。除了OPT, Bloom和我們,我想不出其他的了。這是一個(gè)新事物。
Swyx:
重要的是,你們正追求足夠好的經(jīng)驗(yàn)法則。我認(rèn)為,很多人試圖追求精確,但過于精確實(shí)際上并不有幫助。
Quentin:
是的,你會(huì)在博客文章中看到一些類似表述。你知道,我們不會(huì)進(jìn)一步詳細(xì)討論每個(gè)小的內(nèi)存部分,錙銖必較的話可能需要額外的一個(gè)月。但是,得到足夠好的結(jié)果對(duì)人們?nèi)匀挥袔椭?/p>02 最少GPU數(shù)量,是最佳方案
Alessio:
聊回您在《Transformer Math 101》一文中給出的估計(jì)方程,這里的核心方程式不是計(jì)算成本,而是轉(zhuǎn)化Transformer模型所需的計(jì)算,大約等于τ乘以T,其中τ是吞吐量,單位為FLOPT表示訓(xùn)練時(shí)間,然后T是花費(fèi)的時(shí)間。
我認(rèn)為人們可以很容易地想象這一點(diǎn)。基本上是你有多少個(gè)GPU,你讓它們運(yùn)行多長(zhǎng)時(shí)間。
之前在Chinchilla論文和OpenAI的規(guī)模定律中,有類似的內(nèi)容,你在博文中也提到了這一點(diǎn)。
現(xiàn)在,人們?cè)跇?gòu)建模型時(shí)應(yīng)該如何考慮這個(gè)問題?當(dāng)他們開始考慮訓(xùn)練自己的基于Transformer 的模型時(shí),他們應(yīng)該從哪里找到這個(gè)方程?
Quentin:
人們通常從數(shù)據(jù)集開始,你有一些數(shù)據(jù)集,然后你想在基于此訓(xùn)練一個(gè)模型。
讓我們開始逐步思考,一開始,從6PD的角度來看,每個(gè)參數(shù)大約有6個(gè)令牌與之對(duì)應(yīng)。因此,這決定了我的模型大小,以此為Chinchilla Optimal。
從那時(shí)起,我們發(fā)現(xiàn)為了獲得良好的質(zhì)量模型,需要更多的令牌,可能會(huì)超過20個(gè)。
但從系統(tǒng)的角度來看,你們應(yīng)該考慮的下一個(gè)問題是,這個(gè)模型需要多長(zhǎng)時(shí)間來訓(xùn)練?我應(yīng)該有什么樣的預(yù)算?
假設(shè)我需要一些云實(shí)例,持續(xù)一段時(shí)間,每個(gè)實(shí)例都有一個(gè)附加的價(jià)格。這就是吞吐量的用武之地。
現(xiàn)在,你有了這個(gè)模型,這個(gè)參數(shù)數(shù)量,你應(yīng)該將它映射到一個(gè)Transformer架構(gòu),并在該模型類型的軟件棧上基準(zhǔn)測(cè)試你的吞吐量,接著你可以在單個(gè)GPU上實(shí)現(xiàn)每秒的FLOPS。
然后根據(jù)并行性方案(我相信我們會(huì)詳細(xì)討論的,例如數(shù)據(jù)并行性或張量并行性等),這個(gè)FLOPS數(shù)將如何擴(kuò)展到不同數(shù)量的GPU?
從這里,你將得到一個(gè)時(shí)間。進(jìn)而,得到了時(shí)間,就能算出成本。
簡(jiǎn)而言之,這就是答案。
Alessio:
我注意到另一件事,你提到一些這些定律,只在1個(gè)小時(shí)內(nèi)使用1000 GPU的成本與1個(gè)GPU運(yùn)行1000小時(shí)的成本相同才成立。
考慮目前我們?nèi)狈Υ罅縂PU的實(shí)際情況,在這方面,對(duì)于人們?nèi)绾蝺?yōu)先考慮這一點(diǎn),你有什么想法嗎?
我會(huì)說,首先應(yīng)該找出剛好能容納你的模型的最小GPU數(shù)量。
如果您在訓(xùn)練一個(gè)相當(dāng)大的模型,內(nèi)存瓶頸是你最大的問題。如果只在訓(xùn)練一個(gè)小模型,那沒人會(huì)在意。
大多數(shù)人關(guān)心的模型,都需要分配到多個(gè)GPU上。因此,找到適合你的模型的一個(gè)實(shí)例的最小gpu數(shù)量,然后計(jì)算需要多長(zhǎng)時(shí)間。如果是時(shí)間合理,那么你完成了。如果時(shí)間太長(zhǎng),那么你就需要開始考慮使用多個(gè)模型實(shí)例。
我總是覺得,人們應(yīng)該選擇最小數(shù)量的GPU。你擁有的GPU數(shù)量越多,出現(xiàn)問題的可能性就越大。
所以我會(huì)說,只要找出什么時(shí)間對(duì)你來說是合理的,然后將gpu的數(shù)量與之匹配,而不需更多。
人們往往會(huì)變得貪婪,他們會(huì)說,如果我有兩倍的GPU,我可以在半個(gè)時(shí)間內(nèi)完成這項(xiàng)工作。但事實(shí)上,最終可能花了三倍時(shí)間,因?yàn)槊刻於紩?huì)出現(xiàn)各種問題。那時(shí),可能需要痛苦地在午夜時(shí)分起床,加班加點(diǎn)搶修你的模型。
Swyx:
你們會(huì)不會(huì)有一個(gè)類似的開源框架,來幫助gpu線性擴(kuò)展?還是說,這么想過于簡(jiǎn)單化了?
Quentin:
Mosaic和我們都有一種可以理論上良好擴(kuò)展的軟件堆棧配置,一會(huì)我會(huì)詳細(xì)討論。
Mosaic完全基于優(yōu)化器分片。它基于ZeRO。因此,你完全將模型優(yōu)化器、參數(shù)和梯度分布在所有不同的GPU上。你的聚合內(nèi)存就是參數(shù)數(shù)目除以GPU數(shù)目。優(yōu)化器和其他內(nèi)容也是一樣。
而我們?cè)贓leuther使用了Megatron DeepSpeed的庫,會(huì)更加復(fù)雜。因此,效率可能會(huì)更高,但也更容易出現(xiàn)故障。
在這兩種情況下,回到實(shí)際情況,通過增加更多的GPU應(yīng)該能夠獲得線性加速。但問題是會(huì)出現(xiàn)硬件故障。
如果有太多的GPU,你可能會(huì)有問題,例如損失會(huì)溢出,或者一個(gè)GPU掛掉,你就可能碰到軟件問題、同步問題等。
這就是我為什么說,實(shí)際上你應(yīng)該選取你擁有的最小GPU數(shù)量,因?yàn)檫@些情況更容易調(diào)試。
Alessio:
另一件事情是,電腦就像在前向和后向傳遞,前向是2PD,后向是4PD。為什么兩者之間的比率是如此?你能解釋一下嗎?為什么是兩倍的數(shù)量?
Quentin:
簡(jiǎn)單來說,對(duì)于前向傳播,您只是在移動(dòng),您正在通過該層向前傳播輸入。
而在后向傳播中,你要做的事情比這更復(fù)雜一些。你正在做反向傳播。我認(rèn)為我無法足夠直觀地解釋它,需要數(shù)字上進(jìn)一步深入探討。
Swyx:
實(shí)際上,反向傳播的速度很低。老實(shí)說,這是我喜歡深度學(xué)習(xí)數(shù)學(xué)的最基本的原因之一,與大學(xué)微積分中遇到的其他數(shù)值方法相比,深度學(xué)習(xí)的數(shù)學(xué)令人驚訝地高效。
Alessio:
我認(rèn)為另一件事是,事情聽起來很簡(jiǎn)單,你知道,當(dāng)人們?cè)赥witter上說,哦,20是最優(yōu)的比率,然后就是,好吧,為什么是那個(gè)數(shù)字呢?
答案通常要困難得多,就像我們現(xiàn)在看到的。所以我認(rèn)為這是一個(gè)很好的提醒,數(shù)字聽起來簡(jiǎn)單,就像所有最好和最受歡迎的數(shù)學(xué)方程一樣,非常優(yōu)雅。不過,顯然,背后的證明并不那么容易。
Swyx:
我想稍微測(cè)試一下這個(gè)方程。我們可以從GPT-3的角度或GPT-NeoX的角度來做。你有實(shí)際浮點(diǎn)運(yùn)算和理論浮點(diǎn)運(yùn)算之間的區(qū)別。
很多時(shí)候,當(dāng)人們報(bào)告訓(xùn)練一個(gè)模型所需的浮點(diǎn)運(yùn)算量時(shí),就像我們剛剛在Lama 2中看到的那樣,估算的數(shù)值就是浮點(diǎn)運(yùn)算量。
比如,GPT-3需要3.14 x 10的23次浮點(diǎn)運(yùn)算。這是理論浮點(diǎn)運(yùn)算。我想弄清楚一個(gè)數(shù)值是否經(jīng)得起推敲。
我想知道如何做到這一點(diǎn),因?yàn)槲覒?yīng)該能夠?qū)⑦@個(gè)方程代入其中,對(duì)吧?我知道GPT-3是基于3000億tokens進(jìn)行訓(xùn)練的。
我知道模型的參數(shù)大小是175。是不是只要計(jì)算一下6 x 175 x 300就行了?
Quentin:
理論浮點(diǎn)運(yùn)算通常是根據(jù)給定的硬件配置得出的,這是你預(yù)計(jì)硬件可以實(shí)現(xiàn)的。
但問題在于,實(shí)際上,我們通常會(huì)有一些閑置時(shí)間,例如等待從GPU到CPU的數(shù)據(jù)傳輸,或者等待跨不同GPU之間的同步。所以訓(xùn)練時(shí)候你會(huì)花掉很多空閑時(shí)間。
Swyx:
聞起來怎么樣。(注:效果如何?)
Quentin:
我不確定我是否有一個(gè)自己的"聞起來怎么樣"的標(biāo)準(zhǔn),
坦白說,也許我會(huì)查看像在A100上期望的一些浮點(diǎn)運(yùn)算量。
事實(shí)上,在某種程度上,對(duì)于給定的GPU類型,每個(gè)人都知道可以期望多少浮點(diǎn)運(yùn)算量。
例如,對(duì)于A100來說,這個(gè)數(shù)值大約在100到180之間。對(duì)于較舊的GPU類型V100,這個(gè)數(shù)值可能在30到40之間。
人們通常會(huì)根據(jù)運(yùn)行深度學(xué)習(xí)的內(nèi)核來確定應(yīng)該期望的浮點(diǎn)運(yùn)算量。然后,將這個(gè)與人們報(bào)告的理論浮點(diǎn)運(yùn)算量進(jìn)行比較,看是否與你的預(yù)期相符。
Alessio:
在文章中,你提到對(duì)于A100來說,如果你的浮點(diǎn)運(yùn)算量低于115 TeraFLOPS/秒,那么你的模型或硬件有問題。
你是怎么得出這個(gè)115的?是不是根據(jù)實(shí)際觀察和經(jīng)驗(yàn),你在過去的幾個(gè)月里見到的平均水平?你是怎么得出這些數(shù)字的?
Quentin:
對(duì)于這個(gè)數(shù)字,基本上,我們比較了很多不同的框架。就像我之前提到的,Mosaic有他們自己的框架,我們也有自己的框架。它們都有自己的浮點(diǎn)運(yùn)算計(jì)數(shù)器。
我們看到,在許多不同的硬件配置上,如果你正確調(diào)整設(shè)置,你應(yīng)該在幾乎所有情況下都能得到超過115的浮點(diǎn)運(yùn)算量。
所以,如果某個(gè)數(shù)值低于115,那么你的軟件肯定有問題。但這實(shí)際上就是比較不同的軟件堆棧和硬件系統(tǒng)。
Alessio:
不同的GPU有什么不同嗎?
上周,我們邀請(qǐng)了George Hotz,他談到了AMD顯卡,以及理論上他們的浮點(diǎn)運(yùn)算要比一些Nvidia顯卡好得多,但實(shí)際上,CUDA運(yùn)行時(shí)會(huì)彌補(bǔ)這一差距。
人們應(yīng)該如何考慮這一點(diǎn)?你知道,像A100的浮點(diǎn)運(yùn)算量達(dá)到115 TeraFLOPS。我是否應(yīng)該堅(jiān)持使用它?
Quentin:
這涉及到開發(fā)者的時(shí)間,哪個(gè)更昂貴,歸根結(jié)底,AMD和Rockham的軟件堆棧還有很長(zhǎng)的路要走。
我會(huì)說,大多數(shù)東西都可以在那里運(yùn)行,但效率不高,而且你可能會(huì)遇到以前沒有遇到過的奇怪錯(cuò)誤。
選擇使用Nvidia和PyTorch的軟件堆棧的一個(gè)重要優(yōu)點(diǎn)是,有成千上萬個(gè)GitHub問題與你面臨的相同問題,而且,以開源方式快速解決這些問題,這可能是目前選擇Nvidia軟件堆棧的最大優(yōu)勢(shì)。
AMD的硬件與Nvidia相當(dāng),但軟件不太一樣,而且他們?cè)陂_源領(lǐng)域的勢(shì)頭還沒有完全發(fā)展起來。
例如,像Flash Attention這樣的功能在更多Nvidia GPU類型上的應(yīng)用要比在AMD上的應(yīng)用要多。等待這些最新的功能在AMD上實(shí)現(xiàn),對(duì)很多人來說是一個(gè)障礙,但它正在發(fā)展壯大。
我現(xiàn)在正在AMD上運(yùn)行很多實(shí)驗(yàn),因?yàn)樗呀?jīng)進(jìn)入了政府實(shí)驗(yàn)室的超級(jí)計(jì)算機(jī)。所以很多實(shí)驗(yàn)現(xiàn)在都在那里進(jìn)行,而且我預(yù)計(jì)它會(huì)在幾年內(nèi)趕上來。
(注:一般情況下,計(jì)算機(jī)在進(jìn)行浮點(diǎn)運(yùn)算時(shí)所采用的是FP32(單精度),其中8位用于存儲(chǔ)整數(shù)部分,23位存儲(chǔ)小數(shù)部分,因此其可以存儲(chǔ)高精度浮點(diǎn)數(shù)。
因此,在顯存優(yōu)化場(chǎng)景下,犧牲浮點(diǎn)運(yùn)算的精度可以降低存儲(chǔ)量。)
Alessio:
我們可以輪流討論一下,有很多內(nèi)容需要涵蓋,但或許我們可以從模型權(quán)重開始。
過去,我們?cè)谶^去的許多討論中經(jīng)常涉及的一個(gè)主題就是精度和量化,這顯然是內(nèi)存的主要因素之一。
你在文章中提到,大多數(shù)Transformer都是混合精度,如FP16加FP32或BF16 FP32,它們可以進(jìn)行轉(zhuǎn)換,而且可以進(jìn)行高達(dá)INT8的量化,而不會(huì)對(duì)性能造成太大的影響。也許,我們可以解釋一下一些數(shù)學(xué)和不同精度之間的字節(jié)參數(shù)比率?
Quentin:
當(dāng)我開始入行深度學(xué)習(xí)時(shí),一切都是FP32。每個(gè)參數(shù)需要32位,即4個(gè)字節(jié)。事情相當(dāng)簡(jiǎn)單。你不需要進(jìn)行任何損失縮放。
但問題是,一旦NVIDIA切換到了V100并引入了Tensor核心,F(xiàn)P32就不能提供太多的浮點(diǎn)運(yùn)算。Tensor核心在FP16精度下執(zhí)行所有計(jì)算。
因此,如果你在FP32下進(jìn)行操作,你實(shí)際上浪費(fèi)了所有這些。所以一旦硬件遷移到V100,軟件就會(huì)切換到混合精度,如APEX和AMP等?;旌暇鹊囊粋€(gè)讓人意想不到的部分是,實(shí)際上在訓(xùn)練時(shí)你需要更多的內(nèi)存,因?yàn)槟阈枰粋€(gè)FP16版本的權(quán)重副本和一個(gè)FP32版本的權(quán)重副本。
FP16是在Tensor核心上進(jìn)行實(shí)際計(jì)算的地方。因此,你可能得到的吞吐量可能是FP32的兩倍。然后在每個(gè)步驟中,使用FP16更新FP32的副本,兩者都需要存儲(chǔ)在內(nèi)存中。
問題在于,F(xiàn)P16非常精確,但動(dòng)態(tài)范圍不太大,
因此,如果從浮點(diǎn)的角度來看,你有一個(gè)非常大的尾數(shù),但沒有太多的指數(shù)。所以BF16將更多的位數(shù)從尾數(shù)移到指數(shù)中。也就是說,你有更大的范圍和較低的精度。
這消除了許多不穩(wěn)定性問題和損失縮放等問題,對(duì)于任何熟悉調(diào)試的人來說,都知道它有多么不穩(wěn)定,尤其是在大規(guī)模訓(xùn)練中。而BF16則減少了很多這種問題,但只在A100上受支持。所以你看到了硬件和軟件之間的來回變化。
每次NVIDIA引入一些新的Tensor核心或BF16支持之類的功能,軟件就會(huì)適應(yīng)并開始支持它,然后訓(xùn)練適應(yīng)。然后你現(xiàn)在提到了Ind8等。
現(xiàn)在,我們看到一些模型已經(jīng)在FP16、FP32或其他模式下訓(xùn)練,然后現(xiàn)在你想將該模型盡可能地量化為像Ind8這樣的更小的表示,同時(shí)又保持最小的損失和精度。
實(shí)際上,我們發(fā)現(xiàn),由于深度學(xué)習(xí)是一個(gè)如此具有隨機(jī)性的問題,許多這些最后的精度位實(shí)際上并不重要,我認(rèn)為這種情況將會(huì)持續(xù)下去。
Alessio:
如果你有一個(gè)量化成八位的模型,你只需要一個(gè)字節(jié)來表示每個(gè)參數(shù)。例如,在一個(gè)80GB VRAM的A100上,你可以放下700億個(gè)參數(shù)的八位模型,而你無法放下一個(gè)FP32模型,因?yàn)槟阈枰蠹s280GB的內(nèi)存。這會(huì)有多大影響?
你剛剛提到剛開始時(shí)都是FP32,如果有一個(gè)帶有1TB VRAM的GPU,人們會(huì)只將內(nèi)存加載為FP32權(quán)重嗎,還是他們?nèi)匀粫?huì)希望將它們量化以使其更加高效?是的。
Quentin:
我認(rèn)為,即使你有無限的VRAM,你仍然會(huì)想要一個(gè)量化模型,只是一個(gè)更大的經(jīng)過量化的模型。
因?yàn)檎缥覄倓偺岬降模谧詈?,深度學(xué)習(xí)是非常隨機(jī)的,很多時(shí)候,你可能擁有世界上所有的精度,但是當(dāng)你仍然非常依賴輸入時(shí),這些精度實(shí)際上是沒有意義的。你在很大程度上依賴于輸入的微小變化,也許更多的訓(xùn)練數(shù)據(jù)樣本會(huì)更加重要。
在深度學(xué)習(xí)中,總體上,這些微小的精度并不是很重要的,重要的是整體的畫面。那個(gè)神經(jīng)元實(shí)際上在說什么?而不是它可能在想什么微小的細(xì)節(jié)。我還想提到,即使你擁有A100,實(shí)際模型的大小要比你提到的要小得多。
這是因?yàn)镵V緩存。所以KV緩存在推理過程中,只在推理過程中起作用,想象一下,如果你在寫一段話,你想要在寫下一個(gè)詞之前記住之前寫過的每一個(gè)單詞。
所以什么是自回歸語言建模?它就是填充下一個(gè)詞、下一個(gè)標(biāo)記。如果我說"the dog went to the",然后我需要寫下一個(gè)詞,我可能會(huì)寫"park"之類的。在我寫下一個(gè)詞之前,我的記憶會(huì)被清除,然后我必須重新閱讀整個(gè)句子。
這就是沒有KV緩存的情況。KV緩存則是說,在推理過程中,記住我之前生成的所有內(nèi)容,以及我之前生成內(nèi)容的所有上下文。但是KV緩存的內(nèi)存開銷通常與模型的內(nèi)存開銷相當(dāng),或在某些情況下甚至更大,特別是在上下文很長(zhǎng)的情況下。
我認(rèn)為具體的計(jì)算公式大致是,哦,是類似于兩倍的層數(shù)乘以頭數(shù)乘以每個(gè)頭的維度,然后有兩個(gè)這樣的部分,一個(gè)是K,一個(gè)是V。簡(jiǎn)要來說,大概就是這樣。
Alessio:
我知道,這是Transformer中的數(shù)學(xué)概念,不過,關(guān)于RNNs,也有一些有趣的地方,比如遠(yuǎn)離隨著序列長(zhǎng)度增加而增加的KV緩存,而是使用固定的序列傳遞。
我知道,人們正在研究這些方面的內(nèi)容。
Quentin:
那么,如何在不增加Transformer所需的二次注意力開銷的情況下獲得Transformer質(zhì)量?這是有趣的,我建議人們閱讀這篇論文原文。
Swyx:
我們實(shí)際上已經(jīng)和RWKV的核心成員進(jìn)行了一次未發(fā)布的訪談,他們稱之為軟注意力或輕量級(jí)注意力。我忘記他們具體叫什么了,但是可以近似地表示,使其線性化而不是二次方的方法。這很棒。
Quentin:
RWKV的人員經(jīng)常出現(xiàn)在Eleuther。
他們與我們密切合作。我的貢獻(xiàn)是,我們所有這些關(guān)于RNNs的實(shí)驗(yàn)是由不同的人完成的,這些實(shí)驗(yàn)與Transformer的關(guān)系以及我們?nèi)绾螌⑵滢D(zhuǎn)化為一篇論文,以便人們不必閱讀一年前的Discord日志就能理解發(fā)生了什么。
Swyx:
很棒,現(xiàn)在,我想我們可能要花更多時(shí)間在優(yōu)化器狀態(tài)和Atom優(yōu)化器上。當(dāng)你處理這些優(yōu)化器時(shí),你的想法是什么?在處理這些優(yōu)化器時(shí),人們應(yīng)該記住什么?
Quentin:
我認(rèn)為,Atom優(yōu)化器在其領(lǐng)域內(nèi)是出色的。這是一個(gè)比較寬泛的問題,所以讓我想一想。你有權(quán)重的副本,然后你有你的動(dòng)量和方差。
用直觀的預(yù)言來解釋一下動(dòng)量:比如說,你在一個(gè)峽谷,你想要到達(dá)底部。
如果你只是進(jìn)行基本的隨機(jī)梯度下降,那么每一步都會(huì)是相同大小的。而如果你使用帶有動(dòng)量項(xiàng)的Atom,那么你的步幅應(yīng)該會(huì)逐漸變大,因?yàn)槟憧梢钥吹?,一般的趨?shì)是我們正在迅速地向下前進(jìn)。但是,由于Atom中有所有這些額外的項(xiàng),你需要更多的內(nèi)存來存儲(chǔ)它。
例如,與SGD相比,通常需要三倍的內(nèi)存。如果你在你的優(yōu)化器狀態(tài)中花費(fèi)了所有這些內(nèi)存,那么,你如何將它分布到GPU上?
你會(huì)發(fā)現(xiàn),在給定的GPU上,實(shí)際上比起裸計(jì)算、原始的計(jì)算能力,你更多地受限于并行性。這歸結(jié)為在將模型分割成需要在許多GPU上分割之前,你能夠?qū)⒍嗌倌P头旁趩蝹€(gè)GPU上。
然后,你會(huì)發(fā)現(xiàn)花費(fèi)的時(shí)間更多地用于它們相互通信,而不是實(shí)際取得進(jìn)展。所以,我們?cè)诓┪闹谢ㄙM(fèi)了很多時(shí)間來討論如何分布你的模型?所有這些不同的分布策略是什么樣的?哪些策略更有效?考慮到很多內(nèi)存都花費(fèi)在了優(yōu)化器上,你如何有效地分布這個(gè)優(yōu)化器?
很多人在談?wù)摬⑿行詴r(shí),他們談?wù)摰氖悄P筒⑿行?,即參?shù)本身。實(shí)際上,在訓(xùn)練時(shí),相當(dāng)大一部分的內(nèi)存實(shí)際上是花費(fèi)在優(yōu)化器狀態(tài)上的。所以你想要深入探討其中的哪個(gè)部分嗎?你想要深入探討零、分片優(yōu)化器之類的嗎?
Alessio:
Quentin,你在博文中提到"Atom是神奇的",實(shí)際上,即使對(duì)于像你這樣與底層很接近的人,有多少內(nèi)容是實(shí)際上的"神奇",有一些東西對(duì)你來說只是教義?有一些事情是你實(shí)際上在考慮在日常工作中進(jìn)行改進(jìn)的嗎?
Quentin:
所以我是一個(gè)系統(tǒng)工程師,很多這些事情對(duì)我來說是神奇的,Atom對(duì)我來說是神奇的。
我認(rèn)為,這就是一個(gè)深度學(xué)習(xí)模型的訓(xùn)練方式。這就是下一步的計(jì)算方式。然后我說,好的,如何使其變得更快?
我會(huì)說我會(huì)看看如何通過使用第二階優(yōu)化器來改進(jìn)它。因?yàn)橛泻芏嚓P(guān)于這方面的研究,因?yàn)樗鼈兒茈y分布。
但是對(duì)我來說,核心的貢獻(xiàn)總是來自于其他人已經(jīng)進(jìn)行了一些深度學(xué)習(xí)的優(yōu)化,我需要使其運(yùn)行得更快。所以我實(shí)際上無法談?wù)摓槭裁碅tom產(chǎn)生了,除非像我剛剛提到的,使用動(dòng)量的一些簡(jiǎn)單直觀的東西。
對(duì)我來說,Atom所占用的內(nèi)存比SGD要多三倍,這一點(diǎn)很重要。所有這些內(nèi)存都需要找個(gè)地方存放,它需要有效地分布。
Alessio:
所以,當(dāng)你把所有這些加在一起時(shí),使用普通的Adam優(yōu)化器,每個(gè)參數(shù)需要12字節(jié)。
然后,你仍然需要在內(nèi)存中保存模型參數(shù),就像你提到的那樣,需要同時(shí)保存FB32、FB16混合量化的兩份副本,因此有不同的精度級(jí)別。所以每個(gè)參數(shù)需要6字節(jié),對(duì)吧?
Quentin:
再回顧一下,大多數(shù)人認(rèn)為模型會(huì)變得很大,所以需要純粹的模型并行處理,比如張量并行處理。
但實(shí)際上,如果我們使用FB16,模型每個(gè)參數(shù)只需要2字節(jié)。而優(yōu)化器本身需要每個(gè)參數(shù)4字節(jié)的模型狀態(tài)、4字節(jié)的動(dòng)量、4字節(jié)的方差。所以更重要的是如何高效地分割優(yōu)化器以及如何高效地存儲(chǔ)它。
像"bits and bytes"中的8位Adam優(yōu)化器,每個(gè)參數(shù)的優(yōu)化器狀態(tài)只需要1字節(jié),而不是4字節(jié)之類的。這會(huì)比將純FB16模型權(quán)重量化到int8之類的方式,更有效地降低模型訓(xùn)練所需的內(nèi)存開銷。
因此,對(duì)于訓(xùn)練來說,優(yōu)化器內(nèi)存占用非常重要,在大多數(shù)情況下最為重要。
Alessio:
在我們深入討論Zero之前,讓我們先總結(jié)一下稍后會(huì)對(duì)參數(shù)、優(yōu)化器狀態(tài)和梯度進(jìn)行分片處理??梢院?jiǎn)要談一下這個(gè)問題,然后我們可以討論如何在GPU上高效地加載它們。
Quentin:
所謂的參數(shù),是參數(shù)的FP32副本。
我們?cè)趦?yōu)化器討論中將它們包括在內(nèi)。有些人不這樣做,但只是為了清楚起見,優(yōu)化器狀態(tài)每個(gè)參數(shù)需要12字節(jié),其中有四個(gè)字節(jié)是用于FP32的權(quán)重副本。
四個(gè)字節(jié)是用于動(dòng)量。我已經(jīng)解釋過為什么存儲(chǔ)動(dòng)量很重要,但這也是每個(gè)參數(shù)。你需要存儲(chǔ)該參數(shù)未來的前進(jìn)方向以及它在過去的前進(jìn)方向。
你還需要知道,我們知道它往哪走,但是在這個(gè)峽谷上會(huì)有凹陷。
所以我們需要存儲(chǔ)它的方差。這些凹陷的頻率是多少?我們應(yīng)該更關(guān)注動(dòng)量嗎?還是這個(gè)參數(shù)在到處跳來跳去?這些都是優(yōu)化器需要存儲(chǔ)的重要答案,它是每個(gè)參數(shù)的。
Alessio:
我正在查看總訓(xùn)練內(nèi)存。您實(shí)際上有模型內(nèi)存、優(yōu)化器內(nèi)存、梯度內(nèi)存和激活內(nèi)存。我認(rèn)為,這是我們討論的最后一個(gè)問題。
所以也許簡(jiǎn)要地向人們介紹一下,,比方說活動(dòng)內(nèi)存再計(jì)算、檢查點(diǎn)等。
Quentin:
在激活檢查點(diǎn)之前,可能會(huì)變得復(fù)雜,你有模型參數(shù),就像我之前提到的一樣,它們?cè)?jīng)是FP32?,F(xiàn)在可能是BF16,或者如果是較舊的GPU,則可能是FP16。然后有優(yōu)化器。那是許多內(nèi)存所在的地方。
通常情況下,這是權(quán)重的高精度副本,通常是FP32。所以每個(gè)參數(shù)需要4字節(jié),然后你還有一些可選項(xiàng),就像我們剛剛討論過的,比如動(dòng)量或方差,或者根據(jù)你的優(yōu)化器而定的其他內(nèi)容。
接著是梯度,梯度是在模型前向傳遞后得到的梯度更新。這將是你低精度權(quán)重的副本,如果你使用FP16或BF16,每個(gè)參數(shù)需要兩個(gè)字節(jié)。
所有這些都是固定的。這個(gè)開銷在訓(xùn)練期間不會(huì)消失。在反向傳播梯度后,梯度可能會(huì)被清除,但優(yōu)化器狀態(tài)和模型狀態(tài)不會(huì)消失。
內(nèi)存開銷將一直存在。動(dòng)態(tài)的是激活再計(jì)算和激活內(nèi)存。因此,有些人會(huì)遇到這樣的問題,模型在訓(xùn)練時(shí)加載得很好。但當(dāng)你實(shí)際運(yùn)行第一次迭代,或者運(yùn)行某個(gè)未來的迭代之類的時(shí)候,你會(huì)突然發(fā)現(xiàn)內(nèi)存不足。這是因?yàn)槟銓?shí)時(shí)計(jì)算的這些激活。
Alessio:
再計(jì)算是在什么時(shí)候發(fā)生的?它是如何在重新計(jì)算和存儲(chǔ)之間做出決策的?
Quentin:
有很多不同的方法,但我會(huì)說有幾種主要的方法。
首先,是一個(gè)非常簡(jiǎn)單的方案。你重新計(jì)算所有的東西。你計(jì)算出的每一個(gè)激活都會(huì)被使用或拋棄,直到結(jié)束。所以在這種情況下,你非常關(guān)心內(nèi)存,但對(duì)計(jì)算關(guān)心不大。也許這會(huì)是一種情況,你必須在許多不同的GPU上分布,而且你的通信速度非常低。
然后可能是選擇性再計(jì)算。在選擇性再計(jì)算中,Megatron有一篇很好的論文,我認(rèn)為我們博客文章中的圖表也是從那里來的。在這種情況下,你為每個(gè)激活做出加權(quán)決策。
對(duì)于非常大的激活張量,你決定,從內(nèi)存角度來看,是將其保存更昂貴,還是從計(jì)算角度來看,重新計(jì)算更昂貴?這是Megatron實(shí)施的智能方案。
他們使用了許多不同的啟發(fā)式方法。在這里可能沒有必要提到超長(zhǎng)的方程式,但如果你對(duì)選擇性再計(jì)算感興趣,你應(yīng)該去閱讀那篇論文。然后大多數(shù)人使用的是一個(gè)相當(dāng)愚蠢的方案,包括NeoX,就是不使用所有這些啟發(fā)式方法,而是只是說,如果我的張量大于X,我就拋棄它。然后將X設(shè)置為某個(gè)固定的數(shù)字,就是這樣。
對(duì)于許多情況來說,這足夠了。
Swyx:
為什么足夠呢?
Quentin:
你不希望存儲(chǔ)超過X大小的張量。有些超過了這個(gè)限制,有些沒有。你不想擠壓。
你更關(guān)心的是讓某些張量盡可能地接近實(shí)際啟發(fā)式方法,而不是實(shí)際計(jì)算啟發(fā)式代碼,因?yàn)槟悴幌牖〞r(shí)間編寫那些啟發(fā)式代碼。
Swyx:
好的。我想這確實(shí)為我們帶來了內(nèi)存數(shù)學(xué)的一次大觀。在我們進(jìn)入分布式處理、Zero等細(xì)節(jié)之前,還有什么高層次的要點(diǎn)嗎?
Quentin:
我想大概就是這樣了。
我要說的是,對(duì)于訓(xùn)練和推斷來說,情況會(huì)大不相同。人們常常說,BF16是最好的。然而,更正確的看法是,在訓(xùn)練期間,精度會(huì)更加重要。
因此,在訓(xùn)練中,BF16會(huì)比在推斷中使用更久一些,因?yàn)樵谕茢嘀?,模型已?jīng)基本成型,它絕對(duì)不需要一些精度的最后幾位,因此,對(duì)于推斷來說,更容易將精度降至int8,而不是訓(xùn)練。
所以,你在訓(xùn)練中學(xué)到的所有東西都必須在推斷中重新學(xué)習(xí),反之亦然。
Swyx:
還有第三類情況。你談到了訓(xùn)練與推斷之間的區(qū)別。這第三類情況與微調(diào)和可能的參數(shù)高效微調(diào)方法有關(guān)。
實(shí)現(xiàn)微調(diào)的樸素方法只是進(jìn)行更多的訓(xùn)練。但我不知道你是否對(duì)微調(diào)有什么直覺,是否值得在這里插入。有什么直覺嗎?如果你要編寫微調(diào)的數(shù)學(xué)公式,會(huì)包含什么內(nèi)容?
Quentin:
我認(rèn)為,關(guān)于微調(diào)還有很多問題沒有得到解答。
例如,我們知道訓(xùn)練的縮放規(guī)律。有些人已經(jīng)做了關(guān)于微調(diào)的縮放規(guī)律。但已經(jīng)在一個(gè)領(lǐng)域訓(xùn)練過的模型如何轉(zhuǎn)移到另一個(gè)領(lǐng)域進(jìn)行微調(diào),就微調(diào)大小而言,我們不清楚。
對(duì)于微調(diào)數(shù)據(jù)集,每個(gè)參數(shù)應(yīng)該有多少個(gè)標(biāo)記?也許我是無知的,但我覺得關(guān)于模型如何在原始訓(xùn)練數(shù)據(jù)集中沒有的新能力進(jìn)行微調(diào)或理解的問題,肯定會(huì)包含在未來關(guān)于微調(diào)的博客文章中。
此外,數(shù)據(jù)集轉(zhuǎn)移、學(xué)習(xí)率轉(zhuǎn)移也是我們博客感興趣的內(nèi)容之一。
Alessio:
您在這里首先提到的是ZeRO,它專注于分片優(yōu)化器。也許可以給人們解釋一下如何理解它。
Quentin:
ZeRO圍繞兩個(gè)通信操作展開。第一個(gè)是scatter。人們應(yīng)該看一下我們有的ZeRO圖表。
在我談?wù)撨@個(gè)問題時(shí),論文中有一個(gè)包含參數(shù)、梯度和優(yōu)化器狀態(tài)的圖表。每個(gè)GPU將獲得自己等量的切片。
如果我們進(jìn)行...有ZeRO的不同階段,但讓我們首先假設(shè)它是優(yōu)化器狀態(tài)、梯度和參數(shù)的等量切片。
在這種情況下,那將是零三,第三階段。我們通過scatter實(shí)現(xiàn)這一點(diǎn)。scatter的計(jì)算是,每個(gè)GPU分配1/結(jié)束的GPU數(shù)量,加上切片的偏移量,切片被分配給該GPU?,F(xiàn)在,所有的GPU都有一個(gè)相等的切片,按照其排名順序。
在每個(gè)訓(xùn)練步驟中,該GPU將等待所有其他切片進(jìn)行通信,以便我們現(xiàn)在在該GPU上擁有整個(gè)數(shù)據(jù)。一旦我們有了整個(gè)數(shù)據(jù),我們對(duì)其進(jìn)行正向傳遞。
然后,我們使用gather將該正向傳遞分發(fā)給所有其他GPU。所以,它是scatter,具體來說是減少scatter,然后是對(duì)所有其他GPU的gather。并且您每一步都這樣做。因此,它的要點(diǎn)是您正在將這些狀態(tài)分片到不同的GPU上。
通過不同的階段,您將在圖表中看到,優(yōu)化器狀態(tài)占據(jù)了最大的比例,這是因?yàn)槲抑疤岬降?。我們包括FP32副本并進(jìn)行原子操作。所以我們需要每個(gè)參數(shù)的4個(gè)字節(jié),用于動(dòng)量和方差。然后,零階段一,這是最常見的一個(gè),僅為優(yōu)化器。
零階段二是優(yōu)化器加梯度。零階段三是優(yōu)化器梯度和模型參數(shù)。但歸根結(jié)底,所有這些都是圍繞著分片和來回聚合展開的。所以您從ZeRO中得到了很多通信開銷。但其中的正面部分是您可以將其中大部分的移動(dòng)與計(jì)算重疊。
Alessio:
Quentin:
這更多地取決于您的互連是什么。放慢一步,所有這些GPU之間都需要同步,而且這些同步往往是累積的。
因此,如果您在速度較慢的互連上使用過多的GPU,那么您最終會(huì)花更多的時(shí)間在同步上。在哪個(gè)GPU上花費(fèi)更多時(shí)間同步的這個(gè)魔法數(shù)字會(huì)因您的互連和GPU內(nèi)存的情況而異。每個(gè)GPU獲得多小的切片呢?
例如,對(duì)于Summit,我不能給出確切數(shù)字,但大約在200億參數(shù)左右?,F(xiàn)在您有200億個(gè)參數(shù),那么對(duì)于那個(gè)數(shù)量的GPU,大約需要100到200個(gè)規(guī)模。
超過這個(gè)數(shù)量,您最終只會(huì)花費(fèi)更多的時(shí)間在通信上。實(shí)際的FLOPS跌破您預(yù)先設(shè)定的某個(gè)數(shù)值,將取決于您最終確定的最佳選擇。
Alessio:
那么,對(duì)我來說,這部分內(nèi)容比較難理解,所以我很高興您能解釋一下3D并行。
Quentin:
好的,首先,讓我們來看一個(gè)非常基本的維度,即數(shù)據(jù)并行。
數(shù)據(jù)并行是您有一個(gè)模型的副本。為簡(jiǎn)單起見,假設(shè)一個(gè)副本恰好適合一個(gè)GPU。數(shù)據(jù)并行是,現(xiàn)在您有兩個(gè)GPU,所以GPU一上有一個(gè)副本,GPU二上有一個(gè)副本。兩者都執(zhí)行正向和反向傳遞,然后進(jìn)行同步和平均梯度。然后這就是一個(gè)步驟。對(duì)于3D并行來說,數(shù)據(jù)并行實(shí)際上是零。所以,您正在將優(yōu)化器狀態(tài)分片到所有不同的GPU上。
而在流水線并行中,假設(shè)您的模型有四個(gè)層次,有四個(gè)GPU。您將一層放在每個(gè)GPU上,然后GPU一執(zhí)行前向傳遞,然后將其激活的輸出發(fā)送到GPU二。它執(zhí)行前向傳遞,將激活發(fā)送到三,您只是在沿著一條線移動(dòng)。那是一個(gè)樸素的方案,所有其他GPU在單個(gè)GPU執(zhí)行其前向或后向傳遞時(shí)都處于空閑狀態(tài)。所以它被稱為流水線并行,因?yàn)槟鷮⑿∨畏殖闪宋⑿∨巍?/p>
但問題在于,您需要一個(gè)非常大的批次大小,以將其分成小批次和微小批次。因此,將這三者結(jié)合起來,您將得到一個(gè)3D網(wǎng)格,其中每個(gè)參數(shù)、優(yōu)化器狀態(tài)等都映射到每個(gè)GPU上。這就是3D并行。
進(jìn)行此操作時(shí)是否需要所有GPU都相同?還是也可以使用不匹配的GPU?
有兩件事情很重要。如果兩種不同類型的GPU之間的VRAM有差異,那么您將受到VRAM較少的GPU的限制,因?yàn)樗鼤?huì)耗盡內(nèi)存。然后您不能使用較大的GPU上剩余的部分。
問題在于,我之前提到的同步操作會(huì)讓您受限。因此,在這種情況下,您的移動(dòng)速度將與您最慢或最小的GPU相同。
因此,每個(gè)節(jié)點(diǎn)都有一個(gè)不同的網(wǎng)絡(luò)交換機(jī)。所以,您最終會(huì)以最慢交換機(jī)的速度運(yùn)行,并且調(diào)整一切,使其不比最慢交換機(jī)差,這是一個(gè)現(xiàn)實(shí)世界中可能會(huì)遇到的問題。
Alessio:
就是分片優(yōu)化器和3D并行,將兩者結(jié)合在一起,采用這種網(wǎng)格策略。
我會(huì)說,很多主要的基于GPT的模型都使用了這種方案?,F(xiàn)在很多人更傾向于純粹的ZeRO方案。所以就是純粹的分片。
您只需對(duì)所有內(nèi)容進(jìn)行分片。因?yàn)檫@樣非常容易,每個(gè)人都可以得到相等的切片。不再有流水線階段的問題。不再有哪個(gè)張量應(yīng)該放在哪個(gè)GPU上的問題。
我認(rèn)為,3D并行給您最多的控制權(quán),也是犯錯(cuò)的最多方式。具體是選擇哪種取決于您是擁有更多工程師還是更多GPU。
Swyx:
這也不算太難,對(duì)吧?
您基本上已經(jīng)概述了需要記住的五六個(gè)不同的數(shù)字。如果需要達(dá)到這種控制水平,您已經(jīng)為每個(gè)人提供了主要的控制杠桿。這很好。絕對(duì)的。
Quentin:
問題在于,比如說,好吧,GPT-4發(fā)布了?,F(xiàn)在我們有了VLLMs。
Swyx:
Virtual LLMs,就像Metro of Expert的東西嗎?不,是視覺的。
所以現(xiàn)在我們有了多模態(tài)模型之類的東西。我們?nèi)绾芜M(jìn)行分布?我們將其分配到流水線階段嗎?我們只是將其分片嗎?將張量分割并進(jìn)行張量并行嗎?
當(dāng)您具有這種3D并行方案時(shí),要更改模型并添加新功能變得有點(diǎn)困難。我說困難,我的意思是將其調(diào)整和修改為適應(yīng)新功能會(huì)變得困難。
Alessio:
我很好奇,您是否仍然認(rèn)為這些問題集中在訓(xùn)練、推理、數(shù)學(xué)優(yōu)化上,還是還有其他領(lǐng)域需要大家關(guān)注?
我認(rèn)為在我研究的領(lǐng)域里,有兩個(gè)問題是我認(rèn)為人們應(yīng)該非常關(guān)心的。
因此,如何將某些模型或某些GPU用于推理,而某些GPU用于訓(xùn)練?就像我之前提到的,你需要重新學(xué)習(xí)所有內(nèi)容,而且它們具有非常獨(dú)特的挑戰(zhàn)。
例如,在訓(xùn)練期間如何分割一個(gè)KV緩存?這些都是尚未得到充分研究的挑戰(zhàn)。
在多模態(tài)方面,你可能有一個(gè)視覺變換器和一個(gè)文本變換器。如何分割它們?你是否平均分配?將它們放在不同的GPU上,還是只是將一些視覺、一些文本參數(shù)放在一個(gè)GPU上?
然后,第二個(gè)問題是通信往往是一個(gè)瓶頸。所以我們談?wù)摿?D并行,但很多情況下,比如張量并行,你不能跨節(jié)點(diǎn)使用。你會(huì)在通信中受到限制。
讓人們?cè)谕ㄐ呕A(chǔ)設(shè)施上花費(fèi)更少的金錢,而更多地用于GPU,這也是人們需要探索的領(lǐng)域。
關(guān)鍵詞:
新聞發(fā)布平臺(tái) |科極網(wǎng) |環(huán)球周刊網(wǎng) |tp錢包官網(wǎng)下載 |中國(guó)創(chuàng)投網(wǎng) |教體產(chǎn)業(yè)網(wǎng) |中國(guó)商界網(wǎng) |萬能百科 |薄荷網(wǎng) |資訊_時(shí)尚網(wǎng) |連州財(cái)經(jīng)網(wǎng) |劇情啦 |5元服裝包郵 |中華網(wǎng)河南 |網(wǎng)購省錢平臺(tái) |海淘返利 |太平洋裝修網(wǎng) |勵(lì)普網(wǎng)校 |九十三度白茶網(wǎng) |商標(biāo)注冊(cè) |專利申請(qǐng) |啟哈號(hào) |速挖投訴平臺(tái) |深度財(cái)經(jīng)網(wǎng) |深圳熱線 |財(cái)報(bào)網(wǎng) |財(cái)報(bào)網(wǎng) |財(cái)報(bào)網(wǎng) |咕嚕財(cái)經(jīng) |太原熱線 |電路維修 |防水補(bǔ)漏 |水管維修 |墻面翻修 |舊房維修 |參考經(jīng)濟(jì)網(wǎng) |中原網(wǎng)視臺(tái) |財(cái)經(jīng)產(chǎn)業(yè)網(wǎng) |全球經(jīng)濟(jì)網(wǎng) |消費(fèi)導(dǎo)報(bào)網(wǎng) |外貿(mào)網(wǎng) |重播網(wǎng) |國(guó)際財(cái)經(jīng)網(wǎng) |星島中文網(wǎng) |手機(jī)測(cè)評(píng) |品牌推廣 |名律網(wǎng) |項(xiàng)目大全 |整形資訊 |整形新聞 |美麗網(wǎng) |佳人網(wǎng) |稅法網(wǎng) |法務(wù)網(wǎng) |法律服務(wù) |法律咨詢 |成報(bào)網(wǎng) |媒體采購網(wǎng) |聚焦網(wǎng) |參考網(wǎng)
亞洲資本網(wǎng) 版權(quán)所有
Copyright © 2011-2020 亞洲資本網(wǎng) All Rights Reserved. 聯(lián)系網(wǎng)站:55 16 53 8 @qq.com