本文篇幅較長(zhǎng),共4部分,分別解答了4個(gè)很多人可能關(guān)心的問題。這四個(gè)問題間的上下文關(guān)聯(lián)不大,可選擇性閱讀。 1.Folding@home究竟是個(gè)什么樣的項(xiàng)目? 2.新冠病毒研究,為什么需要算力?算力能為新冠病毒研究提供什么幫助? 3.Folding@home的架構(gòu)是否真的能夠有效利用起全球范圍的計(jì)算機(jī)或更多設(shè)備的算力? 4.英偉達(dá)為什么重點(diǎn)呼吁PC游戲玩家?
前一陣英偉達(dá)官方發(fā)推,呼吁PC游戲玩家聯(lián)合起來對(duì)抗2019-nCoV新冠病毒,方法是把自己閑置的GPU算力都捐出來,幫助科學(xué)家們做病毒研究[1]。通過采用名為Folding@home(在家折疊?)的軟件,就能讓每個(gè)在家用電腦的人把算力捐出來:每個(gè)人一點(diǎn),就能以全球組合成網(wǎng)絡(luò)的方式,構(gòu)建起一個(gè)龐大的超級(jí)計(jì)算機(jī)。
微博人民對(duì)于英偉達(dá)的此次呼吁似乎多有質(zhì)疑之聲,不少人認(rèn)為這個(gè)所謂的Folding@home只是在為他人做嫁衣,無端捐獻(xiàn)算力也不知道是拿來做了什么。實(shí)際上大規(guī)模分布式計(jì)算,讓Folding@home這樣的計(jì)劃具有十分的可行性,只不過通過并不算可靠的互聯(lián)網(wǎng)結(jié)成這樣的分布式結(jié)構(gòu)做計(jì)算,帶寬之類的問題究竟該怎么解決?以及如果新冠病毒研究真的需求海量算力,為什么不直接采用超算?
這是我們期望通過本文去大致了解的問題。本文篇幅較長(zhǎng),共4部分,分別解答了4個(gè)很多人可能關(guān)心的問題。這四個(gè)問題間的上下文關(guān)聯(lián)不大,可選擇性閱讀。
1.Folding@home究竟是個(gè)什么樣的項(xiàng)目?
2.新冠病毒研究,為什么需要算力?算力能為新冠病毒研究提供什么幫助?
3.Folding@home的架構(gòu)是否真的能夠有效利用起全球范圍的計(jì)算機(jī)或更多設(shè)備的算力?
4.英偉達(dá)為什么重點(diǎn)呼吁PC游戲玩家?
Folding@home是個(gè)什么樣的項(xiàng)目?雖然我們沒辦法做到完整細(xì)致地回答這幾個(gè)問題,畢竟其中可能還涉及到相應(yīng)的生物、醫(yī)學(xué)或病毒學(xué)知識(shí),不過勾勒一個(gè)框架應(yīng)該還是可以的。而且理解Folding@home,對(duì)于我們參考理解大型項(xiàng)目網(wǎng)絡(luò)構(gòu)建也有價(jià)值。
針對(duì)第一個(gè)問題,F(xiàn)olding@home項(xiàng)目的存在歷史還是比較久的,其最初發(fā)起時(shí)間是2000年10月,由斯坦福大學(xué)(Stanfor University)的Pande Lab實(shí)驗(yàn)室發(fā)起。目前參與Folding@home各部分開發(fā)的除了Pande實(shí)驗(yàn)室以外,還包括了索尼、英偉達(dá)、ATI、Cauldron Development等。[2]
Folding@home就是一個(gè)分布式計(jì)算項(xiàng)目,它主要做的就是蛋白質(zhì)的分子動(dòng)力學(xué)模擬。最初Folding@home著眼的就是蛋白質(zhì)折疊(protein folding),現(xiàn)在轉(zhuǎn)向更多的生物醫(yī)療研究,包括阿茲海默癥、癌癥、埃博拉病毒、2019-nCoV等。所以2019-nCoV實(shí)際上只是Folding@home研究的一個(gè)最新組成部分(于今年3月加入)。
其中的所有大型計(jì)算項(xiàng)目,都是由知名研究院校運(yùn)營或者直接輔助執(zhí)行的。其實(shí)有關(guān)2019-nCoV即新冠病毒在Folding@home上的項(xiàng)目具體由誰在推動(dòng),這一點(diǎn)我們并沒有查到詳實(shí)的資料。僅知在Folding@home發(fā)起呼吁的這位Greg Bowman,目前就是Folding@home的負(fù)責(zé)人(2019年的新任負(fù)責(zé)人,也是上一任負(fù)責(zé)人Pande博士的學(xué)生)。Bowman是圣路易斯華盛頓大學(xué)的副教授。看起來,2019-nCoV病毒研究項(xiàng)目的發(fā)起者就是Folding@home官方。
那么針對(duì)這些研究,F(xiàn)olding@home究竟是怎么提供算力的呢?其核心理念就是期望能夠利用全球個(gè)人計(jì)算機(jī)的閑置計(jì)算資源——當(dāng)然這些PC需要安裝來自Folding@home的客戶端軟件,至于由誰來安裝,那當(dāng)然就是愿意貢獻(xiàn)算力的志愿者了。如此一來,集合全球CPU、GPU各路硬件的算力,就能為科學(xué)研究做貢獻(xiàn)了。
整個(gè)分布式系統(tǒng)實(shí)際上比我們闡述得要復(fù)雜很多,這在后文還會(huì)提到,比如志愿者可以在Folding@home官網(wǎng)上追蹤自己的貢獻(xiàn),甚至以貢獻(xiàn)算力多少,及積分制的方式相互比較排名;還能組隊(duì)刷分——Folding@home官網(wǎng)常年更新團(tuán)隊(duì)積分排名[3]。讓算力貢獻(xiàn)在呈現(xiàn)上更加生動(dòng)和有趣。實(shí)際在2009年,F(xiàn)olding@home發(fā)布的paper中就提到,為志愿者開發(fā)的客戶端程序集成了OpenGL,主要是以圖形化的方式向志愿者展示蛋白質(zhì)模擬的情況[4]。Folding@home的團(tuán)隊(duì)認(rèn)為,這種呈現(xiàn)對(duì)于科學(xué)研究雖然沒有多大價(jià)值,但是對(duì)志愿者去了解正在自家PC上發(fā)生什么,幫助Folding@home在人群中擴(kuò)散是很有幫助的。
這是Folding@home項(xiàng)目一個(gè)很小的例子,其整體復(fù)雜性都還是比較大的。
從某種意義上來講,在這些年的發(fā)展中,F(xiàn)olding@home已經(jīng)成為全球性能最彪悍的超算系統(tǒng)——尤其是3月初Folding@home開啟了針對(duì)新冠病毒的研究項(xiàng)目,為Folding@home整體算力推升到一個(gè)新的小高潮。不嚴(yán)謹(jǐn)?shù)卣f,如今其算力已經(jīng)達(dá)到了768 petaFLOPs。截至3月25日,F(xiàn)olding@home算力達(dá)到1.5 x86 exaFLOPs[5],數(shù)倍于目前全球最快的超算。
(注:Folding@home給定的算力單位包括native FLOPs,x86 FLOPs等。某一類硬件的每秒浮點(diǎn)運(yùn)算數(shù)即為native FLOPs;x86 FLOPs是指如果將所有算力統(tǒng)統(tǒng)劃歸為x86 CPU,則有多少FLOPs——GPU的1 native GPU FLOP通常就相當(dāng)于好多native x86 FLOPs。[6])
很多人對(duì)這個(gè)算力數(shù)字大概沒有概念:2007年9月,由于Folding@home加強(qiáng)對(duì)PS3的性能利用,以及大量PS3游戲機(jī)玩家加入進(jìn)來,F(xiàn)olding@home算力就推到了1 petaFLOPs。當(dāng)時(shí)Folding@home就成為全球首個(gè)跨入到petaFLOPs級(jí)別的計(jì)算系統(tǒng),那會(huì)兒全球Top 500中最快的超算是BlueGene/L,其算力是0.280 petaFLOPs。
性能在后續(xù)還有幾波小高潮,比如2009年其算力達(dá)到5 petaFLOPs,那時(shí)IBM超算Roadrunner的性能是1.105 petaFLOPs;2016年年中,F(xiàn)olding@home超過100 x86 petaFLOPs。實(shí)際在今年3月這一個(gè)月,F(xiàn)olding@home的等效算力提升是真正飛快的。3月20日,F(xiàn)olding@home在推特上表示其算力達(dá)到470 petaFLOPs(958 x86 petaFLOPs),而到了3月25日,這個(gè)數(shù)字就飛奔到了768 petaFLOPs(1.5 x86 exaFLOPs)。
就科學(xué)研究來說,這些數(shù)字當(dāng)然不能代表什么,但Pande Lab實(shí)驗(yàn)室已經(jīng)因此產(chǎn)出了223篇科學(xué)研究paper。
這里有個(gè)問題可能是很多人更加關(guān)注的,即Folding@home產(chǎn)生的研究數(shù)據(jù)是否公開的問題。因?yàn)槲覀儾⒎强蒲腥藛T,所以很難理解數(shù)據(jù)集的透明性如何。這里面實(shí)際上涉及到兩個(gè)問題,其一是志愿者貢獻(xiàn)的算力,獲得的研究數(shù)據(jù)或研究結(jié)果是否公開;以及Folding@home這套系統(tǒng)本身的軟件、硬件是否開源(或足夠開源)?
Folding@home曾經(jīng)提到過來自Folding@home的大型數(shù)據(jù)集對(duì)其他人是公開的,并且隨時(shí)間推移會(huì)有更多數(shù)據(jù)給出。“我們期望通過對(duì)數(shù)據(jù)的公開,讓其他科研人員利用這些數(shù)據(jù),也能用于其他的研究。”[7]最早領(lǐng)銜這個(gè)項(xiàng)目的Vijay Pande曾在論壇上說過:“根據(jù)NIH(美國國立衛(wèi)生研究院)的規(guī)則,所有paper必須免費(fèi),但是在發(fā)布一年以后。這是科學(xué)工作的常規(guī),至于同行評(píng)議期刊怎么做是我無法控制的?!保ㄆ诳赡軙?huì)出售這些paper)有關(guān)原始數(shù)據(jù)的問題,“一般我們按需提供,有人需求數(shù)據(jù)時(shí),我們就會(huì)將其公開在網(wǎng)站上。由于數(shù)據(jù)量非常大,這種按需提供的方法比較合理,我們也無法單獨(dú)個(gè)別處理所有需求?!?/p>
而在Folding@home這套系統(tǒng)本身的軟件、硬件的開源程度問題,整體我們也很難在短時(shí)間內(nèi)全盤把控。就我們掌握的信息,F(xiàn)olding@home系統(tǒng)本身的打造就離不開很多開源工具,比如Gromacs、TINKER、AMBER、MPICH等[8]。所以它也在為開源社區(qū)做貢獻(xiàn),很多組成部分也的確是開源的。比如說后文還會(huì)提到,F(xiàn)olding@home的core是基于分子動(dòng)力學(xué)軟件包Gromacs,F(xiàn)olding@home自己對(duì)其GPU加速開發(fā)起到了相當(dāng)?shù)淖饔茫会槍?duì)GPU的庫OpenMM,為應(yīng)用開發(fā)者和GPU供應(yīng)商提供相對(duì)統(tǒng)一的API等等。
2011年,F(xiàn)olding@home就發(fā)布過一個(gè)開源的Copernicus軟件,基于其MSM(Markov state model,馬爾科夫狀態(tài)模型)以及其他并行方法。主要價(jià)值就是針對(duì)大型計(jì)算機(jī)集群和超算,提升分子模擬的效率和規(guī)模。這對(duì)于其他科學(xué)領(lǐng)域的研究也是相當(dāng)有價(jià)值的。
有關(guān)數(shù)據(jù)實(shí)際在國際間共享的透明性,以及這些研究數(shù)據(jù)和開源軟件本身可能還涉及到的政治問題,這就是另外一個(gè)話題了,這里不再做深入討論。
算力對(duì)新冠病毒研究有什么用?這是個(gè)相關(guān)生物學(xué)研究的問題,理論上應(yīng)該是生物學(xué)媒體更關(guān)注的問題,我們簡(jiǎn)略地談一談。研究人員期望搞清楚的是對(duì)于2019-nCoV潛在藥物靶點(diǎn)(potential drug targets)結(jié)構(gòu),這樣就能設(shè)計(jì)新的治療方法。2019-nCoV可以認(rèn)為是SARS病毒的近親,行為方式類似。兩者的第一步感染就是在肺部發(fā)生的,病毒表面的蛋白質(zhì)會(huì)“綁定”到肺細(xì)胞的受體蛋白質(zhì),這里的受體被稱作ACE2。
這里的病毒蛋白被稱作纖突蛋白(spike protein),也就是上圖中的紅色部分。科學(xué)家追逐的治療性抗體,實(shí)際上是蛋白質(zhì)的一種,它的目標(biāo)就是阻斷病毒蛋白與受體綁定,起到阻止病毒感染肺細(xì)胞的作用。SARS-CoV的治療性抗體已經(jīng)開發(fā)出來了。但如果要開發(fā)2019-nCoV也就是這次新冠病毒的治療性抗體,科學(xué)家就需要去更好地理解病毒纖突蛋白的結(jié)構(gòu),以及它究竟是怎樣與ACE2受體結(jié)合的。
蛋白質(zhì)會(huì)擺動(dòng)、折疊、展開,形成各種形狀。科學(xué)家需要研究的,不光是病毒纖突蛋白的一種形狀,而是其擺動(dòng)、折疊成各種形狀的方式,這樣才能更好地理解它與ACE2受體是如何交互的,如此一來抗體就可以設(shè)計(jì)出來的。[9]
Folding@home在官網(wǎng)上提到,SARS-CoV病毒的“低分辨率”結(jié)構(gòu)已經(jīng)有了,外加SARS-CoV和2019-nCoV的已知差別,F(xiàn)olding@home的這個(gè)項(xiàng)目就是要幫助構(gòu)建起2019-nCoV纖突蛋白的結(jié)構(gòu),并識(shí)別抗體的靶點(diǎn)。而構(gòu)建計(jì)算模型是需要海量算力的,這是Folding@home介入的原因。
前文已經(jīng)提到,F(xiàn)olding@home本身就是致力于理解蛋白質(zhì)折疊問題的項(xiàng)目。這對(duì)于理解蛋白質(zhì)做什么、如何工作是很有幫助的。這個(gè)模擬和理解的過程,也就是computational biology(計(jì)算生物學(xué))。蛋白質(zhì)另外也可能發(fā)生錯(cuò)誤折疊(misfold),錯(cuò)誤折疊會(huì)導(dǎo)致各種疾病,比如阿茲海默癥。利用計(jì)算模型,外加補(bǔ)充實(shí)驗(yàn),理解蛋白質(zhì)折疊、錯(cuò)誤折疊等的完整過程,就非常重要。
由于蛋白質(zhì)構(gòu)造,及其可能變化的形狀,本身就非常復(fù)雜,這個(gè)過程對(duì)算力需求便非常之高。通用超級(jí)計(jì)算機(jī)也曾一度用于模擬蛋白質(zhì)折疊過程,不過成本非常高;另外,由于動(dòng)力學(xué)模型計(jì)算是連續(xù)的,傳統(tǒng)分子模擬的規(guī)模化執(zhí)行會(huì)非常困難;而且蛋白質(zhì)折疊是一個(gè)隨機(jī)的過程,隨時(shí)間推移各種變化。這些對(duì)于模擬計(jì)算都提出了很大的挑戰(zhàn)。
在Folding@home各種模擬軌跡以及新構(gòu)造發(fā)現(xiàn)的過程中,逐漸建立起自適應(yīng)抽樣的馬爾科夫狀態(tài)模型(MSMs)。這種模型法極大地提升了模擬的效率,而且它很適用于分布式計(jì)算。一個(gè)馬爾科夫狀態(tài)模型構(gòu)建的時(shí)間,與并行模擬數(shù)量(比如處理器的數(shù)量)成反比。也就是說,并行數(shù)越多,模擬效率就越高。
Folding@home利用馬爾科夫狀態(tài)模型,來給蛋白質(zhì)可能的形狀和折疊路徑建模
一個(gè)完整的馬爾科夫狀態(tài)模型可能包含了數(shù)萬個(gè)蛋白質(zhì)相空間(phase space,蛋白質(zhì)可形成的所有構(gòu)造)的樣本狀態(tài),以及不同狀態(tài)間的轉(zhuǎn)變過程。這樣一個(gè)模型表征到了折疊事件、路徑等。研究人員利用這些模型,可了解蛋白質(zhì)如何折疊,并結(jié)合試驗(yàn),與模擬做對(duì)比。
雖然我們并不清楚這次新冠病毒纖突蛋白研究需要投入多少算力,以及需要多久。不過就其原理看來,投入算力也是聚少成多的過程,或者說,其效力大約很難在短期內(nèi)體現(xiàn)出來——所以即便越來越多的人由于本次新冠病毒而參與Folding@home項(xiàng)目,它也無法立刻顯現(xiàn)出成效,并讓計(jì)算生物學(xué)即刻顯現(xiàn)出多大的威力,這畢竟是個(gè)長(zhǎng)久的項(xiàng)目。
Folding@home的系統(tǒng)架構(gòu)如何?采用互聯(lián)網(wǎng)構(gòu)成一個(gè)分布式計(jì)算網(wǎng)絡(luò),其帶寬和存儲(chǔ)問題怎么解決,應(yīng)該是我們更關(guān)心的一個(gè)問題;畢竟互聯(lián)網(wǎng)和超算中的本地網(wǎng)絡(luò)比起來實(shí)在是太慢了。理解了這個(gè)問題,也就可以回答,F(xiàn)olding@home架構(gòu)對(duì)于科學(xué)研究是否真的有價(jià)值,或者Folding@home對(duì)于全球算力利用是否真的有效了。
我們能夠找到的Folding@home發(fā)布相對(duì)詳細(xì)的解釋,實(shí)際是2009年的一篇paper[4],在這10多年內(nèi),其整體架構(gòu)應(yīng)該又有了變化,所以下面的闡述大概會(huì)相對(duì)落后。但我們相信,其大框架應(yīng)該是不變的。
客戶端界面
首先有必要談一談志愿者一側(cè),也就是用戶的軟件組成。用戶端的軟件主要包括了work units、core、client(客戶端)。
(1)每一個(gè)work unit,就是客戶端要求處理的一部分蛋白質(zhì)數(shù)據(jù)。work unit實(shí)際上就是馬爾科夫狀態(tài)模型不同狀態(tài)間模擬的一小部分??蛻舳藭?huì)自動(dòng)下載work unit,然后進(jìn)行計(jì)算,再返回給Folding@home的服務(wù)器,服務(wù)器就會(huì)給予一定的積分獎(jiǎng)勵(lì)。
為了保證計(jì)算的效率,所有的work unit都有個(gè)計(jì)算的截止時(shí)間,如果超過截止時(shí)間還沒有計(jì)算結(jié)束,則這個(gè)work unit就會(huì)自動(dòng)移交給其他人。前文就已經(jīng)提到了,蛋白質(zhì)折疊是一個(gè)連續(xù)的過程,許多work unit的生成,都依賴于上一個(gè)work unit,所以設(shè)立這樣的截止時(shí)間是非常有必要的。針對(duì)更高性能的客戶端,會(huì)有更短的截止時(shí)間設(shè)定。
(2)一個(gè)特定的分子動(dòng)力學(xué)程序,就是一個(gè)core。針對(duì)這些core,work unit作為后臺(tái)進(jìn)程去執(zhí)行計(jì)算。Folding@home的絕大部分core都基于前文就提到的Gromacs,也就是一個(gè)開源的軟件包,其中主要包括了手動(dòng)優(yōu)化過的匯編語言代碼和硬件優(yōu)化方案。core是獨(dú)立于client客戶端的,這樣一來,在不需要更新客戶端的情況下就能更新科學(xué)方法。另外,core還周期性地創(chuàng)建計(jì)算檢查點(diǎn)(checkpoint),在計(jì)算被打斷的情況下,后續(xù)可以從這個(gè)點(diǎn)上再開始。
(3)Client自然就是指運(yùn)行在PC(或者其他用戶終端)的客戶端程序了,用戶和客戶端進(jìn)行交互。Client與Folding@home服務(wù)器聯(lián)系:獲取和上傳work unit;根據(jù)用戶設(shè)置、操作系統(tǒng)、底層硬件架構(gòu)下載相應(yīng)的core。
在client上,用戶可以暫停折疊進(jìn)程,查看事件日志,檢查進(jìn)度,或者查看個(gè)人數(shù)據(jù)-比如積分之類。Client以很低的優(yōu)先級(jí)持續(xù)跑在后臺(tái),僅使用閑置算力,確保設(shè)備的日常使用不會(huì)受到影響(用戶可以自行設(shè)置Folding@home如何使用自己設(shè)備的資源)。Client部分的軟件開發(fā)團(tuán)隊(duì),包括來自英偉達(dá)、ATI、索尼、Cauldron Development的程序員。程序本體似乎已經(jīng)經(jīng)過了多次迭代,據(jù)說最早的客戶端是個(gè)屏幕保護(hù)程序,僅在計(jì)算機(jī)不使用的時(shí)候才會(huì)運(yùn)行。
擴(kuò)展到整個(gè)分布式網(wǎng)絡(luò)部署,則會(huì)更復(fù)雜一些。很容易想見,F(xiàn)olding@home就是個(gè)客戶端-服務(wù)器這樣一個(gè)CS結(jié)構(gòu)。首先志愿者在自己的設(shè)備上安裝客戶端,會(huì)有一臺(tái)分配服務(wù)器(assignment server)為客戶端分配一臺(tái)工作服務(wù)器(work server)。隨后客戶端與工作服務(wù)器通訊,獲取work unit——work unit具體就是一組文件;根據(jù)分配到的work unit,客戶端可能還需要從web服務(wù)器下載core。
在計(jì)算工作結(jié)束后,客戶端將結(jié)果發(fā)回給相同的工作服務(wù)器;工作服務(wù)器再收集日志文件和積分?jǐn)?shù)據(jù),并交給數(shù)據(jù)服務(wù)器(statistics server),并顯示給志愿者們看。
如果我們?cè)偌?xì)致的剖析一下,整個(gè)架構(gòu)在任務(wù)調(diào)度、指派、執(zhí)行等各方各面,都很像是一個(gè)放大版的CPU或超算網(wǎng)絡(luò)。工作服務(wù)器(work server)會(huì)生成work unit,并且分析接下來需要完成什么工作:前一個(gè)計(jì)算得到的結(jié)果需要用于生成后續(xù)任務(wù)。每臺(tái)工作服務(wù)器都承載了很多的項(xiàng)目,且由不同的研究人員管理。
分配服務(wù)器(assignment server)是一個(gè)全局調(diào)度機(jī)(scheduler),還要確保整個(gè)系統(tǒng)負(fù)載均衡??蛻舳耸紫嚷?lián)系的實(shí)際上就是分配服務(wù)器。項(xiàng)目?jī)?yōu)先級(jí)本身就受很多因素影響,另外還要結(jié)合客戶端的各種參數(shù)(比如客戶端的硬件配置、系統(tǒng)版本、網(wǎng)絡(luò)帶寬、可靠性等)做出工作分配決策。Collection服務(wù)器則是一種冗余方案,在客戶端無法將結(jié)果上傳給work服務(wù)器時(shí),就會(huì)啟用。
除此之外,當(dāng)然還需要有一個(gè)專門給用戶看的數(shù)據(jù)網(wǎng)站——志愿者們可以在網(wǎng)站上看到他們自己貢獻(xiàn)的成果。這就是數(shù)據(jù)服務(wù)器(statistics server)的工作了,其上還包括分配給志愿者或者團(tuán)隊(duì)的積分。數(shù)據(jù)服務(wù)器需要從工作服務(wù)器周期性地獲取日志文件,以給用戶呈現(xiàn)數(shù)據(jù)。另外網(wǎng)站上面還有社區(qū)論壇,這些論壇通常也是志愿者在維護(hù)的,交流和提供技術(shù)支持,還有用戶反饋等。
這就是Folding@home的基本運(yùn)作方式了。不難發(fā)現(xiàn),這并不是一個(gè)對(duì)實(shí)時(shí)性要求很高的系統(tǒng):其重點(diǎn)還在于大規(guī)模并行運(yùn)算能力,它對(duì)整個(gè)系統(tǒng)的帶寬、延遲并沒有那么敏感。另外,上面的描述僅是個(gè)梗概,而且這個(gè)框架是10年前的,當(dāng)年Folding@home還提到過系統(tǒng)后端可能存在的瓶頸,所以那會(huì)兒就提出了分布式存儲(chǔ)Storage@home,以提升運(yùn)算結(jié)果處理的效果。不過這個(gè)項(xiàng)目很快擱淺,原因未知[9]。
為什么特別呼吁PC玩家參與?在耗費(fèi)最低成本的前提下,隨加入Folding@home的設(shè)備越來越多,實(shí)現(xiàn)摩爾定律增長(zhǎng)——這也是一個(gè)很有意思的說法,就類似于處理器的執(zhí)行單元可以無限增加一樣。而回答“為什么特別呼吁PC玩家參與”,拍腦袋就知道是因?yàn)镻C玩家的設(shè)備性能強(qiáng),捐的算力就多。
給出算力的第一選擇,在Folding@home誕生之時(shí)必然是CPU。其完整形式的個(gè)人電腦,自然成為捐獻(xiàn)算力的一個(gè)完美載體。不過在Folding@home經(jīng)歷的這20年歷史上,參與到算力捐獻(xiàn)的設(shè)備并不只有PC,還包括了PS3游戲機(jī)、索尼Android手機(jī)。甚至2014年,借由谷歌Chrome瀏覽器的NaCl特性,還能讓Folding@home跑在一個(gè)沙盒里,這樣一來Chrome瀏覽器就能直接跑Folding@home。但去年6月NaCl已經(jīng)不在,F(xiàn)olding@home的web客戶端也就沒有了。
這其中比較令人在意的是PS3游戲機(jī):PS3在Folding@home項(xiàng)目上的服役時(shí)間還不短。PS3游戲機(jī)的流處理器對(duì)于某些計(jì)算而言,提供超過PC多達(dá)20倍的速度,讓PS3成為Folding@home算力上的一支超強(qiáng)戰(zhàn)力。Folding@home的PS3客戶端,是由索尼和Pande Lab合作開發(fā)的,發(fā)布時(shí)間是2007年3月。當(dāng)時(shí)這個(gè)客戶端的介紹中提到,它同時(shí)利用了CPU的彈性和GPU的速度。
事實(shí)上,那個(gè)年代GPGPU還不流行。不過PS3是一個(gè)固定的環(huán)境,做技術(shù)支持和開發(fā)也就比較容易。那會(huì)兒Folding@home的PS3客戶端有個(gè)比較尷尬的問題,即PS3用戶在跑客戶端的時(shí)候,就不能做別的事情??墒羌幢闳绱耍?012年,索尼正式結(jié)束對(duì)Folding@home PS客戶端支持之際,依然有1500萬PS3用戶,貢獻(xiàn)了超過1億小時(shí)的算力。
像蛋白質(zhì)折疊相關(guān)的計(jì)算,要求高度并行的計(jì)算能力,是Folding@home早就注意到的。所以Folding@home很早就實(shí)現(xiàn)了對(duì)CPU多核心的充分利用,多核并行能夠在相同的時(shí)間內(nèi)實(shí)現(xiàn)更長(zhǎng)的模擬路徑,也就沒有必要再把模擬分派給不同的處理器。2006年11月,F(xiàn)olding@home的SMP(對(duì)稱多處理)客戶端進(jìn)入開放beta測(cè)試階段。這個(gè)客戶端采用MPI通訊協(xié)議進(jìn)行并行處理,這也是歷史上分布式計(jì)算項(xiàng)目首次使用MPI。
隨后Folding@home也隨硬件本身的發(fā)展,實(shí)現(xiàn)更多算力的獲取。比如在SMP2客戶端發(fā)布之后,某一類名為bigadv的work unit就要求至少8個(gè)CPU核心來計(jì)算,而且還對(duì)內(nèi)存和互聯(lián)網(wǎng)帶寬資源提出了要求。當(dāng)然,如果志愿者能夠跑得了這樣的work unit,就能獲得多加20%的額外積分。比較有趣的是,后來SMP2客戶端將bigadv的硬件要求提升到至少16個(gè)核心,而那些8核CPU用戶就只能跑常規(guī)的work unit了。據(jù)說這事兒傷害到了很多用戶,因?yàn)樗麄優(yōu)榱薋olding@home在硬件上也花了很多錢,于是在很多人的反饋之下,Pande終止了bigadv。
Folding@home團(tuán)隊(duì)
事實(shí)上,在談到高度并行計(jì)算的時(shí)候,GPU已經(jīng)成為當(dāng)代的首選——看看AI training發(fā)展如火如荼就知道了。不過早年的GPU編程還是相當(dāng)有難度的,尤其GPU市場(chǎng)還有不同架構(gòu)和選擇。Folding@home采用開源的OpenMM庫——這個(gè)庫采用一種橋接設(shè)計(jì)模式,有兩個(gè)API層級(jí),連接分子模擬軟件和底層的硬件架構(gòu)。加上額外的硬件優(yōu)化,基于OpenMM的GPU模擬,程序并不需要多大改動(dòng)就能獲得據(jù)說是接近于手動(dòng)調(diào)整的GPU代碼性能,當(dāng)然也遠(yuǎn)超CPU的算力。
Folding@home的第一代GPU支持客戶端,是在2006年10月發(fā)布的。這也是史上頭一次GPU應(yīng)用到分布式計(jì)算中。研究人員也是從這個(gè)時(shí)候開始積累起GPGPU軟件開發(fā)的經(jīng)驗(yàn)。二代GPU客戶端開始對(duì)英偉達(dá)的CUDA,以及ATI的GPU做出更到位的支持,支持更高級(jí)的算法更大型的蛋白質(zhì),而且還能做模擬的實(shí)時(shí)視覺呈現(xiàn)。
很多年前,GPU就已經(jīng)是Folding@home貢獻(xiàn)算力最大的組成部分。2012年11月,GPU客戶端占到整個(gè)項(xiàng)目算力吞吐的87%。
現(xiàn)在GPU通用計(jì)算發(fā)展得這么風(fēng)生水起,我們?nèi)ツ陞⒓佑ミ_(dá)的GTC大會(huì),英偉達(dá)宣傳的就是自家GPU已經(jīng)應(yīng)用到了多少不同的領(lǐng)域,而早就不限于圖形計(jì)算[10]。去年英偉達(dá)平臺(tái)應(yīng)用就開始支持全基因組測(cè)序(NVIDIA PARABRICKS基因組分析工具包),3月20日英偉達(dá)發(fā)布的新聞稿就提到開始向研究人員免費(fèi)提供PARABRICKS軟件,主要用于新型冠狀病毒和COVID-19確診者的基因組測(cè)序。
這就已經(jīng)完美解答英偉達(dá)為何呼吁PC游戲玩家參與Folding@home了,因?yàn)橛螒蛲婕业腉PU一般都更出色。
一些花絮與下載地址以上我們就基本把Folding@home這個(gè)項(xiàng)目大致說清楚了。事實(shí)上項(xiàng)目面臨的挑戰(zhàn)也遠(yuǎn)沒有我們想象得那么簡(jiǎn)單,在查閱資料的過程中還是發(fā)現(xiàn)了一些項(xiàng)目組有趣的吐槽。比如說Folding@home曾提到,數(shù)據(jù)系統(tǒng)遭遇的一個(gè)挑戰(zhàn)是,有一小撮志愿者為了提高他們的積分,會(huì)作弊。有一些人甚至采用種植木馬的方式,把客戶端裝到別人的電腦上,然后用別人電腦的算力給自己賺積分——聽起來就跟挖礦木馬一樣。
而Folding@home在客戶端層面面臨的最大挑戰(zhàn)還在于,現(xiàn)有硬件平臺(tái)的多樣化。“存在幾近無數(shù)種硬件、軟件、驅(qū)動(dòng)的組合方式,也就是說在進(jìn)行客戶端開發(fā)時(shí),要花海量的時(shí)間去處理不兼容的問題。”而在硬件架構(gòu)變化時(shí),又要進(jìn)行core的移植和測(cè)試工作,并對(duì)客戶端進(jìn)行重新編譯,“畢竟計(jì)算機(jī)總是要隨時(shí)間做各種升級(jí)?!痹缒晏O果從PPC遷往x86,就得做很多工作。
最后提供一下Folding@home客戶端的下載地址,當(dāng)前macOS、Windows、Android、Linux都支持,具體的使用方法有興趣的各位可以自行體驗(yàn)嘗試:https://foldingathome.org/iamoneinamillion/