亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,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)備源代碼、編譯、撰寫模塊的操作。

        (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ù)用戶編寫的流程完成下載源代碼包、解壓、編譯、安裝的流程。這兩個(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ù)手工編寫模塊文件,其工作量很大,Spack通過(guò)RPATH和自動(dòng)生成模塊降低了軟件調(diào)用的難度。Spack在編譯時(shí)使用RPATH參數(shù)將依賴庫(kù)的路徑寫入了編譯出的二進(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)
        日韩精品成人一区二区三区| 开心婷婷五月激情综合社区| 一本色道久久爱88av| 亚洲av永久无码精品网址| 亚洲欧美精品伊人久久| 九九精品国产99精品| 日本免费一区精品推荐| 亚洲一区二区三区偷拍女| 新婚人妻不戴套国产精品| 久久精品夜色国产亚洲av| 一个人看的www免费视频中文| 国产成人综合久久久久久| 无码中文字幕专区一二三| 经典女同一区二区三区| 国产在线观看午夜视频| 激情综合五月| 免费看黑人男阳茎进女阳道视频| 国产欧美VA欧美VA香蕉在| 视频精品熟女一区二区三区| 亚洲黄色一级在线观看| 国产亚洲日韩在线一区二区三区| 99精品视频在线观看免费 | 夜先锋av资源网站| chinese国产乱在线观看 | 水蜜桃视频在线观看免费18| 成人爽a毛片免费网站中国| 亚洲一区二区国产激情| 国产肥熟女视频一区二区三区| 久久tv中文字幕首页| 久草视频在线这里只有精品| 日本久久久精品免费免费理论| 一本久道综合色婷婷五月| 国产a v无码专区亚洲av | 91久久精品人妻一区二区| 国产精品一区二区黄色| 亚洲欧美日韩精品久久| 中文字幕一区二区人妻| 国产精品激情综合久久| 少妇高潮精品在线观看| 国产av无码专区亚洲av中文| 精品久久久久久无码不卡 |