国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

使用Spack 軟件包管理器構(gòu)建高性能計(jì)算軟件環(huán)境

2020-09-14 08:29:56韋建文文敏華王一超林新華
實(shí)驗(yàn)室研究與探索 2020年7期
關(guān)鍵詞:編譯器管理器高性能

韋建文, 王 杰, 文敏華, 王一超, 林新華

(上海交通大學(xué)網(wǎng)絡(luò)信息中心,上海200240)

0 引 言

上海交通大學(xué)高性能計(jì)算平臺(tái)的計(jì)算能力位居全國(guó)高校前列[1],自2013年上線以來(lái),常年滿負(fù)荷運(yùn)行,已累計(jì)為校內(nèi)300多個(gè)課題組提供超過(guò)5億核小時(shí)的計(jì)算服務(wù)。為支持用戶高效完成計(jì)算任務(wù),除了穩(wěn)定可靠的硬件環(huán)境,還需要靈活易用的軟件環(huán)境。在每年2 000多人次技術(shù)咨詢中,“如何安裝軟件”占了60%。為應(yīng)對(duì)這種情況,中心配備了一名員工專職從事應(yīng)用編譯,在過(guò)去一年新增了71個(gè)計(jì)算軟件庫(kù),進(jìn)行了205次版本更新,可用軟件包總數(shù)超過(guò)200個(gè)。

2019年9月上線的第二代校級(jí)高性能計(jì)算平臺(tái),計(jì)算能力提升了10倍,理論性能達(dá)到2PFlops??梢灶A(yù)期的是,用戶必將對(duì)軟件種類和易用性提出更高的要求。如何構(gòu)建一個(gè)軟件種類豐富、運(yùn)行高效、調(diào)用方便的軟件環(huán)境,是維護(hù)高性能計(jì)算平臺(tái)的一個(gè)難題。本文將著重介紹構(gòu)建高性能計(jì)算軟件環(huán)境的主要挑戰(zhàn)、軟件包管理器的概念、如何使用Spack軟件包管理器以及使用Spack構(gòu)建上海交通大學(xué)的超算軟件環(huán)境。

1 構(gòu)建高性能計(jì)算軟件環(huán)境的主要挑戰(zhàn)

如圖1所示,編譯一個(gè)高性能計(jì)算軟件需要準(zhǔn)備好軟件源代碼以及依賴軟件庫(kù),通過(guò)構(gòu)建工具編譯出可執(zhí)行程序,整理出軟件模塊文件供用戶調(diào)用。

圖1 軟件編譯流程

構(gòu)建一個(gè)面向高性能計(jì)算軟件環(huán)境存在如下挑戰(zhàn):

(1)軟件數(shù)量多。常用的高性能計(jì)算軟件多達(dá)上百種,若算上軟件在版本、編譯器、優(yōu)化選項(xiàng)上的變種,構(gòu)建軟件環(huán)境需要重復(fù)上千次準(zhǔn)備源代碼、編譯、撰寫(xiě)模塊的操作。

(2)編譯流程差異大。常用的軟件編譯工具就有Autotools[12]、CMake[13]、Maven[14]、SCons[15]等10 余種,用法上差異較大,需要投入大量時(shí)間才能熟練掌握這些工具。

(3)維護(hù)環(huán)境模塊工作量大。供最終用戶使用的環(huán)境模塊文件,必須與軟件版本一一對(duì)應(yīng),手動(dòng)維護(hù)模塊文件難以保證內(nèi)容的正確性。

(4)軟件版本共存。出于性能、穩(wěn)定性和結(jié)果一致性的考慮,高性能計(jì)算平臺(tái)需要提供同一個(gè)軟件的多個(gè)版本供用戶使用,這需要在安裝時(shí)設(shè)計(jì)好安裝路徑,避免路徑?jīng)_突。

(5)軟件管理角色不清晰。在現(xiàn)有方法中,系統(tǒng)管理員擁有特權(quán)可以部署全局可用的軟件,普通用戶因無(wú)特權(quán)而很難從基礎(chǔ)庫(kù)開(kāi)始構(gòu)建自定義的軟件環(huán)境。

2 軟件包管理器

為了應(yīng)對(duì)構(gòu)建軟件環(huán)境的挑戰(zhàn),一類被稱為軟件包管理器(Software Package Manager)的工具應(yīng)運(yùn)而生。這類工具屏蔽了不同軟件在獲取、編譯和加載過(guò)程中的差異,為用戶提供了一個(gè)統(tǒng)一的軟件包管理接口,在類UNIX操作系統(tǒng)上獲得了廣泛應(yīng)用,例如Yum、Apt、BSD Ports等。一些針對(duì)高性能計(jì)算軟件環(huán)境的包管理器在此基礎(chǔ)上改進(jìn),如OpenHPC、Anaconda、EasyBuild、Spack 等。此外,Docker和Singularity等基于容器技術(shù)的軟件部署方法,也獲得了越來(lái)越多的關(guān)注。這些軟件包管理器的主要特性見(jiàn)表1。

表1 軟件包管理器對(duì)比

OpenHPC[6]是一個(gè)基于Yum的軟件包管理工具,以預(yù)編譯包提供x86和ARM平臺(tái)的常用高性能計(jì)算庫(kù)。OpenHPC需要使用管理員權(quán)限安裝,系統(tǒng)中只能保留軟件的一個(gè)版本。

Anaconda[7]是基于Pip的軟件包管理器,用于管理Python擴(kuò)展包和一般的科學(xué)計(jì)算軟件包。Anaconda可以把軟件安裝在用戶家目錄,不需要管理員特權(quán),并可以創(chuàng)建多個(gè)相互隔離的軟件環(huán)境。

Docker[8]和Singularity[9]是基于容器技術(shù)的軟件封裝技術(shù),他們將軟件連同系統(tǒng)庫(kù)一起打包,構(gòu)建出一個(gè)共享宿主節(jié)點(diǎn)內(nèi)核的運(yùn)行環(huán)境。應(yīng)用只需要打包一次就能在支持容器技術(shù)、同一指令集架構(gòu)的操作系統(tǒng)上運(yùn)行。

EasyBuild[10]和Spack[11]借鑒了BSD Ports,將軟件編譯過(guò)程中的關(guān)鍵步驟抽象成一系列函數(shù),用戶使用函數(shù)而非具體執(zhí)行的命令描述編譯過(guò)程,在實(shí)際執(zhí)行時(shí)包管理器根據(jù)用戶編寫(xiě)的流程完成下載源代碼包、解壓、編譯、安裝的流程。這兩個(gè)工具都可以方便地以普通用戶權(quán)限安裝軟件,且已支持超過(guò)1 000種科學(xué)計(jì)算軟件。Spack安裝簡(jiǎn)單,命令行提供了豐富的編譯選項(xiàng),評(píng)估試用后被選中用于構(gòu)建上海交通大學(xué)高性能計(jì)算平臺(tái)的軟件環(huán)境。

3 使用Spack安裝軟件

3.1 安裝Spack

Spack只需要Python和GCC編譯器就能工作,安裝過(guò)程非常簡(jiǎn)單,不需要管理員特權(quán),只要將源代碼克隆到本地即可使用。

$ git clone https://github.com/spack/spack.git

$ cd spack/bin

$ ./spack-v

3.2 使用Spack安裝軟件包

Spack使用install命令安裝軟件包,這個(gè)命令可指定軟件版本、軟件功能、優(yōu)化選項(xiàng)、編譯器、依賴軟件包等編譯參數(shù)。如圖2所示,使用Spack安裝aoflagger[12]2.10.0 版本,指定編譯器優(yōu)化參數(shù)(cflags)為“-O2”,使用符號(hào)“%”指定編譯器為Intel編譯器18.0.3,使用“^”符號(hào)指定依賴軟件為casacore 2.4.1版本,并要求在casacore上開(kāi)啟對(duì)python的支持。

圖2 Spack安裝軟件示例

3.3 Spack的工作流程

編譯軟件時(shí),Spack根據(jù)命令行指定的選項(xiàng),讀取與軟件包對(duì)應(yīng)的package.py包文件,解析軟件包下載地址、特性選項(xiàng)、依賴和沖突、編譯方式,然后編譯軟件。aoflagger軟件的包文件片段如圖3所示。

圖3 Aoflagger的package.py示例片段

其中,class指定軟件包類型,以決定使用什么工具編譯這個(gè)軟件,Spack支持的軟件包類型包括AutotoolsPackage、CMakePackage、MakePackage 以及一般的Package等;home和url分別用于指定軟件主頁(yè)和下載地址;version指定軟件包的版本和校驗(yàn)和,確保用戶下載的軟件源碼包是正確的;variant用于描述軟件支持的特性,常見(jiàn)的如是否開(kāi)啟對(duì)openmp、mpi、python的支持等,使用者可以在spack install選項(xiàng)中通過(guò)“+”或“~”符號(hào)開(kāi)啟或關(guān)閉這些特性;depends_on和conflicts指令用于描述這個(gè)軟件依賴的其他軟件包,或是與之沖突的軟件包、編譯器等。

Spack將遞歸地構(gòu)建出一個(gè)包含軟件及其依賴包的有向無(wú)圈圖(directed acyclic graph,DAG),以此指導(dǎo)編譯過(guò)程。編譯aoflagger的有向無(wú)圈圖如圖4所示,Spack將從下到上依次編譯依賴包最后編譯aoflagger。

圖4 Aoflagger軟件包依賴關(guān)系

3.4 調(diào)用Spack安裝的軟件

高性能計(jì)算系統(tǒng)普遍使用環(huán)境模塊[13](Environment Module)調(diào)用軟件,環(huán)境模塊通過(guò)修改“PATH”“CPATH”“LD_LIBRARY_PATH”等環(huán)境變量動(dòng)態(tài)地調(diào)用軟件。為軟件的每一個(gè)版本及其依賴庫(kù)手工編寫(xiě)模塊文件,其工作量很大,Spack通過(guò)RPATH和自動(dòng)生成模塊降低了軟件調(diào)用的難度。Spack在編譯時(shí)使用RPATH參數(shù)將依賴庫(kù)的路徑寫(xiě)入了編譯出的二進(jìn)制程序中而無(wú)須依賴環(huán)境模塊提供的LD_LIBRARY_PATH。每一個(gè)安裝的軟件唯一地對(duì)應(yīng)了一個(gè)有向無(wú)圈圖,Spack在軟件安裝路徑中添加了這個(gè)圖的散列值,從而保證同一軟件的不同編譯版本或變種能唯一地確定,不會(huì)發(fā)生路徑?jīng)_突。Spack根據(jù)軟件的構(gòu)建選項(xiàng)和安裝路徑,可自動(dòng)生成環(huán)境模塊供用戶調(diào)用。下面的示例展示了通過(guò)module命令加載和使用軟件的流程。

$module avail gromacs

gromacs/4.5.5-intel-19.0.4 groamcs/4.5.5-gcc-8.3.0

$ module load gromacs/4.5.5-intel-19.0.4

$ which mdrun_mpi

/lustre/spack/opt/sandybridge/intel-19.0.4/gromacs-4.5.5-f239hfe823gf/bin

3.5 Spack性能測(cè)試

使用軟件編譯時(shí)間與軟件運(yùn)行時(shí)間來(lái)考察Spack性能,與之對(duì)比的是手動(dòng)編譯和Docker編譯。用于測(cè)試的程序是基因數(shù)據(jù)處理軟件Samtools[14]和計(jì)算流體軟件OpenFOAM[15],前者運(yùn)行一個(gè)單機(jī)多線程算例,后者運(yùn)行一個(gè)4節(jié)點(diǎn)MPI算例。

編譯耗時(shí)如圖5所示。Samtools編譯耗時(shí)差異很小,Docker因?yàn)樾枰螺d鏡像,最耗時(shí)。OpenFOAM編譯耗時(shí)差異大,Docker可以直接使用操作系統(tǒng)預(yù)編譯的OpenMPI庫(kù)因而最快;Spack可以自動(dòng)解決依賴包,可在無(wú)人值守狀態(tài)下完成編譯,也比手工方式快。

圖5 編譯時(shí)間

運(yùn)行耗時(shí)如圖6所示。單節(jié)點(diǎn)Samtools運(yùn)行耗時(shí)差異很小,Docker多了首次啟動(dòng)需要的15 s時(shí)間。4節(jié)點(diǎn)OpenFOAM運(yùn)行耗時(shí)差異大,手動(dòng)編譯和Spack安裝的版本基本持平,分別需要603 s和598 s完成計(jì)算;而Docker版需要1 028 s,慢了41%。經(jīng)檢查發(fā)現(xiàn),Docker版本使用的操作系統(tǒng)自帶OpenMPI庫(kù)沒(méi)有加入對(duì)Infiniband網(wǎng)絡(luò)的支持,運(yùn)行過(guò)程中使用了低速的千兆網(wǎng)導(dǎo)致多節(jié)點(diǎn)運(yùn)行效率降低。

圖6 運(yùn)行時(shí)間

綜上,手動(dòng)編譯和Spack編譯都能發(fā)揮出了高性能計(jì)算平臺(tái)的應(yīng)有性能。而Docker為保證兼容性優(yōu)先選擇了操作系統(tǒng)預(yù)編譯的軟件包,這在配備了Infiniband等特殊硬件的高性能計(jì)算平臺(tái)上并不是最優(yōu)方案。使用Spack作為構(gòu)建Docker鏡像工具,以解決Docker應(yīng)用在高性能計(jì)算平臺(tái)上多節(jié)點(diǎn)運(yùn)行效率低的問(wèn)題,是一個(gè)可行的方向。

4 上海交通大學(xué)高性能計(jì)算中心的Spack實(shí)踐

上海交大高性能計(jì)算中心摸索出了一套使用Spack構(gòu)建高性能計(jì)算軟件環(huán)境的方法,在國(guó)內(nèi)率先使用Spack安裝生產(chǎn)環(huán)境上的軟件,構(gòu)建流程如圖7所示。

圖7 基于Spack按角色分工的高性能計(jì)算軟件環(huán)境構(gòu)建方法

首先,Spack使用者被分為3類:Spack開(kāi)發(fā)者,負(fù)責(zé)定期從Spack社區(qū)更新軟件包,測(cè)試軟件包穩(wěn)定性,并補(bǔ)充Spack缺失的軟件包;系統(tǒng)管理員,根據(jù)Spack開(kāi)發(fā)者反饋的測(cè)試結(jié)果,將軟件的穩(wěn)定版本部署到系統(tǒng)中供所有用戶使用;普通用戶,既可以直接使用Spack部署在系統(tǒng)中的應(yīng)用,也可以只使用Spack部署的編譯器或科學(xué)庫(kù),或者完全從頭用Spack部署自己的軟件環(huán)境。3個(gè)角色在相互隔離的環(huán)境中測(cè)試與合作,管理員只部署通過(guò)驗(yàn)證的軟件,而開(kāi)發(fā)者進(jìn)行的測(cè)試不會(huì)影響生產(chǎn)環(huán)境,普通用戶可自由選擇復(fù)用或重新構(gòu)建整個(gè)軟件環(huán)境。

按類別選擇需要部署的軟件。軟件環(huán)境中的軟件數(shù)量并非越多越好,環(huán)境中共存的軟件數(shù)量越多,生成模塊文件和指定依賴關(guān)系時(shí)產(chǎn)生沖突的概率也越大。根據(jù)軟件類型、使用廣泛程度等因素,選擇一個(gè)穩(wěn)定可靠的子集部署在軟件環(huán)境中。對(duì)于編譯器和科學(xué)庫(kù)這類基礎(chǔ)軟件,如GCC、OpenBLAS等,可安裝盡可能多的版本供用戶選擇,并保持一個(gè)版本能用至少半年;常用科學(xué)計(jì)算軟件會(huì)保留最近的2~3個(gè)版本,更新頻率要比基礎(chǔ)庫(kù)高;對(duì)于使用量小的軟件將被部署在特定用戶的家目錄下。

這套分角色分類別的軟件構(gòu)建方法,很好兼顧了只需要運(yùn)行計(jì)算軟件的初級(jí)用戶需求和需要構(gòu)建自己軟件環(huán)境的高級(jí)用戶的需求。軟件部署前經(jīng)過(guò)測(cè)試,超過(guò)生命周期后有序退出,管理員部署的軟件也能最大限度地復(fù)用,避免了重復(fù)勞動(dòng)。

5 結(jié) 語(yǔ)

本文總結(jié)了構(gòu)建高性能計(jì)算軟件環(huán)境遇到的軟件數(shù)量多、編譯流程差異大、維護(hù)模塊工作量大、軟件版本共存、軟件管理角色不清晰等挑戰(zhàn),在對(duì)比數(shù)個(gè)軟件包管理器后,重點(diǎn)介紹了Spack軟件包管理器的安裝方法、工作流程和軟件調(diào)用方法,并通過(guò)測(cè)試展示了Spack優(yōu)異的編譯速度和高質(zhì)量的編譯結(jié)果。最后介紹了上海交通大學(xué)高性能計(jì)算平臺(tái)基于Spack的分角色分類別的軟件環(huán)境部署流程,這套流程能涵蓋Spack開(kāi)發(fā)者、系統(tǒng)管理員和普通用戶的軟件部署需求,為構(gòu)建高性能計(jì)算軟件環(huán)境提供了有效方法。Spack收錄的軟件包數(shù)量和功能仍在穩(wěn)步增加,將為高性能計(jì)算用戶構(gòu)建特定領(lǐng)域的軟件環(huán)境帶來(lái)便利。

猜你喜歡
編譯器管理器高性能
應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
Windows文件緩沖處理技術(shù)概述
一款高性能BGO探測(cè)器的研發(fā)
電子制作(2017年19期)2017-02-02 07:08:49
高性能砼在橋梁中的應(yīng)用
SATA推出全新高性能噴槍SATAjet 5000 B
高集成度2.5A備份電源管理器簡(jiǎn)化鋰離子電池備份系統(tǒng)
高性能可變進(jìn)氣岐管降低二氧化碳排放
汽車零部件(2014年8期)2014-12-28 02:03:03
快速導(dǎo)出QQ群消息
電腦迷(2014年2期)2014-04-29 19:21:13
通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
福贡县| 文安县| 工布江达县| 新昌县| 汝南县| 宝丰县| 淳化县| 蛟河市| 栖霞市| 剑河县| 太康县| 赤城县| 剑川县| 五大连池市| 界首市| 保康县| 灵山县| 教育| 遵化市| 青田县| 方正县| 南靖县| 桦南县| 通榆县| 日喀则市| 西盟| 桂东县| 宜都市| 怀安县| 洛扎县| 延寿县| 哈巴河县| 额尔古纳市| 任丘市| 湛江市| 张家港市| 福泉市| 磐石市| 马边| 锡林浩特市| 饶河县|