器安裝全指南:License配置與并行計(jì)算)
服務(wù)器裝 GROMACS、CP2K 裝習(xí)慣的人第一次部署 Materials Studio 8.0 多半會(huì)愣一下——這軟件和常見(jiàn)開(kāi)源分子模擬工具的安裝邏輯不太一樣它有圖形化安裝器、獨(dú)立的 License 服務(wù)、Gateway 調(diào)度層還要照顧一堆 32 位兼容庫(kù)。我在某課題組先后部署過(guò)兩次 MS 8.0第一次從早上裝到天黑第二次只花了兩小時(shí)。差別在于第一次直接掛載鏡像點(diǎn)下一步完全沒(méi)做前置檢查第二次把系統(tǒng)版本、授權(quán)文件、遠(yuǎn)程圖形環(huán)境這三件事先捋清楚再動(dòng)手。這篇教程就按照后者的順序來(lái)寫(xiě)重點(diǎn)覆蓋 CentOS 6/7 下 MS 8.0 服務(wù)端的完整安裝過(guò)程、License 授權(quán)配置、環(huán)境變量和并行計(jì)算設(shè)置以及裝完以后最常踩的幾個(gè)坑。適合需要在 Linux 計(jì)算節(jié)點(diǎn)上部署 MS 8.0 服務(wù)端、給 Windows/Mac 客戶端提供 Gateway 連接入口的課題組管理員參考。1. 安裝前的三件事系統(tǒng)版本、授權(quán)文件和遠(yuǎn)程圖形環(huán)境的確認(rèn)1.1 先確認(rèn) CentOS 版本和內(nèi)核架構(gòu)而不是直接開(kāi)裝MS 8.0 這個(gè)年代的服務(wù)端對(duì)操作系統(tǒng)版本有明確邊界官方支持范圍主要在 Red Hat Enterprise Linux 5/6/7 這一條線上對(duì)應(yīng)到 CentOS 就是 CentOS 6 和 CentOS 7 最穩(wěn)CentOS 8 我沒(méi)試過(guò)不推薦在項(xiàng)目里拿它硬扛。拿到機(jī)器以后第一件事不是找安裝包而是先看清楚三樣?xùn)|西cat /etc/redhat-release uname -m df -h /optx86_64 架構(gòu)是基本要求雖然 MS 8.0 里還有不少 32 位組件但那是在 64 位內(nèi)核下用兼容庫(kù)跑不是讓你真的找一臺(tái) i686 機(jī)器。磁盤(pán)方面完整安裝 MS 8.0 所有模塊需要 40GB 左右如果你的 /opt 是系統(tǒng)盤(pán)最好提前規(guī)劃單獨(dú)掛載一塊數(shù)據(jù)盤(pán)避免裝到一半提示磁盤(pán)空間不足。內(nèi)存看節(jié)點(diǎn)用途單機(jī)做測(cè)試 8GB 起步如果打算跑并行計(jì)算子程序我建議按每個(gè)物理核心 2GB 以上預(yù)留后面并行章節(jié)會(huì)細(xì)說(shuō)。這里特別提醒一點(diǎn)MS 8.0 是上世紀(jì)風(fēng)格的老軟件安裝目錄里會(huì)塞大量的鏈接庫(kù)、模塊文件、幫助文檔如果放在 NFS 網(wǎng)絡(luò)存儲(chǔ)上安裝過(guò)程會(huì)非常慢而且個(gè)別模塊加載容易出怪問(wèn)題。有條件就把安裝根目錄放在服務(wù)器本地盤(pán)后面沒(méi)那么多糟心事。1.2 授權(quán)文件決定部署形態(tài)浮動(dòng)授權(quán)還是節(jié)點(diǎn)鎖定MS 8.0 用的是 FlexNet 授權(quán)機(jī)制拿到手的授權(quán)文件通常是一個(gè)以 .lic 結(jié)尾的文本里面寫(xiě)著授權(quán)類(lèi)型、允許的 Feature 模塊清單、綁定的主機(jī)名或 MAC 地址。安裝前先搞清楚你拿到的是哪種授權(quán)這直接決定了 License 服務(wù)部署在哪臺(tái)機(jī)器上。如果是節(jié)點(diǎn)鎖定授權(quán)那授權(quán)文件綁定了某一臺(tái)服務(wù)器的 MAC 和 hostname你就只能在那一臺(tái)機(jī)器上運(yùn)行 lmgrd別想著換臺(tái)機(jī)器跑。如果是浮動(dòng)授權(quán)通常還附帶一個(gè)獨(dú)立 License 服務(wù)器地址和端口計(jì)算節(jié)點(diǎn)只需要在環(huán)境變量里寫(xiě)MS_LICENSE_SERVERporthostname指向那臺(tái)授權(quán)服務(wù)器即可。在開(kāi)始安裝之前有一件特別容易被忽略的事hostname 的規(guī)范化。很多 CentOS 機(jī)器裝好以后默認(rèn)叫l(wèi)ocalhost.localdomain這種主機(jī)名在 FlexNet 授權(quán)匹配時(shí)非常容易出問(wèn)題。建議安裝前先定一個(gè)好記、規(guī)范的主機(jī)名比如計(jì)算節(jié)點(diǎn)叫cnode01hostnamectl set-hostname cnode01 echo 192.168.1.10 cnode01 /etc/hosts改完以后要么重啟要么重新登錄一次讓 hostname 全局生效。等授權(quán)文件到手以后再對(duì)照里面的 HOSTNAME 字段確認(rèn)大小寫(xiě)完全一致。1.3 沒(méi)有顯示器怎么裝X11轉(zhuǎn)發(fā)與VNC的取舍MS 8.0 的服務(wù)端安裝器是 Java 圖形界面在服務(wù)器上裝就面臨一個(gè)現(xiàn)實(shí)問(wèn)題服務(wù)器沒(méi)有顯示器。兩條路一是用 SSH X11 轉(zhuǎn)發(fā)二是用 VNC 起遠(yuǎn)程桌面。SSH X11 轉(zhuǎn)發(fā)聽(tīng)起來(lái)簡(jiǎn)單ssh -X登錄然后跑安裝器就行但實(shí)際上跨網(wǎng)絡(luò)轉(zhuǎn)發(fā) Java Swing 界面非??ǘ医?jīng)常出現(xiàn)窗口畫(huà)不出來(lái)、部分按鈕點(diǎn)了沒(méi)反應(yīng)的情況。我第一次安裝就是在這上面耗了不少時(shí)間。后來(lái)學(xué)乖了直接在服務(wù)器上裝 tigervncyum install -y tigervnc-server vncserver :1 -geometry 1280x1024 export DISPLAY:1VNC 的桌面里開(kāi)終端再跑安裝器穩(wěn)穩(wěn)當(dāng)當(dāng)。如果你對(duì)文本操作有經(jīng)驗(yàn)還可以用安裝器的 console 模式我自己后面幾次就直接./Install -console文本交互既快又不會(huì)因?yàn)閳D形庫(kù)缺失導(dǎo)致安裝器起不來(lái)可以少裝一堆圖形相關(guān)的依賴包。2. 前置依賴安裝32位兼容庫(kù)、Java運(yùn)行時(shí)與內(nèi)核參數(shù)調(diào)整2.1 32位兼容庫(kù)老版本軟件的硬性要求MS 8.0 服務(wù)端的相當(dāng)一部分核心子程序和授權(quán)工具還是 32 位二進(jìn)制CentOS 7 默認(rèn)只有 64 位環(huán)境缺了 i686 兼容庫(kù)裝到一半或者啟動(dòng)子程序的時(shí)候就會(huì)報(bào)類(lèi)似error while loading shared libraries: libXp.so.6: cannot open shared object file的錯(cuò)誤。裝依賴這一步別省一次性把常用庫(kù)裝齊避免裝一個(gè)缺一個(gè)、缺一個(gè)裝一個(gè)的循環(huán)yum install -y glibc.i686 libXp.i686 libXt.i686 libXtst.i686 \ libXext.i686 libX11.i686 libXau.i686 libXrender.i686 \ libstdc.i686 compat-libstdc-33.i686 \ mesa-libGL.i686 zlib.i686 fontconfig.i686這里面的compat-libstdc-33.i686是老版本 MS 子程序的常客它提供的是舊版 C 運(yùn)行時(shí)有的環(huán)境不裝也能過(guò)但裝上以后能避免后面遇到libstdc.so.5找不到。如果你用的是 CentOS 7libXp.i686在默認(rèn)倉(cāng)庫(kù)里就能找到如果 yum 提示找不到可以用yum provides */libXp.so.6查一下包里位置再手動(dòng)裝 rpm。2.2 Java運(yùn)行時(shí)和字體相關(guān)包的檢查MS 8.0 安裝器自己帶了一份 JRE所以理論上不強(qiáng)制要求你預(yù)裝 Java。但在實(shí)際部署里部分輔助工具和 Gateway 組件會(huì)調(diào)用系統(tǒng) Java環(huán)境里完全沒(méi)有 Java 還是可能出問(wèn)題。我的做法是統(tǒng)一裝一個(gè) OpenJDK 8yum install -y java-1.8.0-openjdk裝完以后可以確認(rèn)一下java -version正常。要注意不要在服務(wù)器上裝一大堆亂七八糟的 JDK 版本然后亂改JAVA_HOMEMS 安裝器對(duì) Java 版本不敏感但對(duì)路徑里的空格、特殊字符很敏感。以前見(jiàn)過(guò)把 Java 解壓到帶中文的目錄里導(dǎo)致安裝器直接白屏這種環(huán)境問(wèn)題最不值得排查。另外字體問(wèn)題也經(jīng)常被忽略。圖形界面花屏、中文變成方塊、Gateway 的網(wǎng)頁(yè)控制臺(tái)字體異常很多都和缺少 X11 字體包有關(guān)yum install -y xorg-x11-fonts-ISO8859-1-75dpi \ xorg-x11-fonts-ISO8859-1-100dpi \ xorg-x11-fonts-type12.3 /etc/hosts、防火墻與SELinux的調(diào)整CentOS 7 上默認(rèn) firewalld 是開(kāi)啟的SELinux 也是 enforcing。MS 8.0 的 License 服務(wù)和 Gateway 需要監(jiān)聽(tīng)端口如果防火墻擋著客戶端就會(huì)連接不上而且這種問(wèn)題的報(bào)錯(cuò)很誤導(dǎo)——它可能不是報(bào)連接失敗而是在客戶端界面里一直轉(zhuǎn)圈。一般 CPU 計(jì)算節(jié)點(diǎn)都放內(nèi)網(wǎng)我對(duì)防火墻的處理很簡(jiǎn)單放行 MS 需要的幾個(gè)端口然后保持防火墻開(kāi)啟狀態(tài)不給課題組留下更大的安全缺口。MS 8.0 通常用到的端口是 License 的27080和 Gateway 的18888firewall-cmd --permanent --add-port27080/tcp firewall-cmd --permanent --add-port18888/tcp firewall-cmd --reloadSELinux 這塊說(shuō)實(shí)話很多老軟件的安裝腳本根本沒(méi)適配 SELinux與其查各種布爾值不如對(duì)這臺(tái)計(jì)算節(jié)點(diǎn)把它設(shè)為 permissive。生產(chǎn)環(huán)境管理員可能要權(quán)衡一下但對(duì)于課題組內(nèi)部的計(jì)算節(jié)點(diǎn)來(lái)說(shuō)這樣能省掉大量莫名奇妙的權(quán)限阻斷問(wèn)題setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config2.4 離線環(huán)境怎么準(zhǔn)備依賴包很多計(jì)算節(jié)點(diǎn)在內(nèi)網(wǎng)沒(méi)有外網(wǎng) yum 源這就非??简?yàn)安裝前的準(zhǔn)備。如果你沒(méi)有提前把依賴包準(zhǔn)備好到了現(xiàn)場(chǎng)才發(fā)現(xiàn)yum install全都失敗那才是真正的地獄開(kāi)局。離線環(huán)境有兩種做法。一種是在有外網(wǎng)的機(jī)器上先把需要安裝的包連同依賴一起下載下來(lái)yumdownloader --resolve --destdir/tmp/ms8_pkgs glibc.i686 libXp.i686 ...然后把整個(gè)目錄拷貝到服務(wù)器上用yum localinstall *.rpm裝。另一種是直接掛 CentOS 系統(tǒng)安裝光盤(pán)做本地源mount /dev/cdrom /mnt寫(xiě)一個(gè)本地倉(cāng)庫(kù)配置文件指向 /mnt把 gpgcheck 關(guān)掉yum install就能直接從光盤(pán)里取包。這個(gè)方法對(duì) CentOS 6/7 都有效缺點(diǎn)是系統(tǒng)光盤(pán)倉(cāng)庫(kù)里不一定包含所有需要的包但至少基礎(chǔ)兼容庫(kù)是沒(méi)問(wèn)題的。3. 主安裝流程掛載介質(zhì)、運(yùn)行安裝器與模塊勾選3.1 掛載ISO鏡像與安裝目錄規(guī)劃拿到安裝介質(zhì)以后上傳到服務(wù)器某個(gè)臨時(shí)目錄。如果是 ISO 文件就掛載mkdir -p /mnt/ms80 mount -o loop MaterialsStudio_8.0.iso /mnt/ms80 ls /mnt/ms80掛載以后看一眼目錄結(jié)構(gòu)找到Install腳本?,F(xiàn)在很多 Linux 軟件鏡像都喜歡用標(biāo)準(zhǔn)的install.sh但 MS 8.0 這個(gè)年代的安裝腳本一般就叫Install后面帶上個(gè)版本號(hào)或者不帶。如果執(zhí)行時(shí)提示Permission denied記得加執(zhí)行權(quán)限chmod x /mnt/ms80/Install安裝目錄我建議規(guī)劃為/opt/msiMS 安裝時(shí)會(huì)在這個(gè)根目錄下面按自己的一套邏輯再拆分出多個(gè)部分。別自作主張把目錄名改成MS80之類(lèi)的保持默認(rèn)風(fēng)格后續(xù)跟官方文檔對(duì)照、找文件位置都省事。安裝用戶也別用 root 直接跑到最后后面我會(huì)說(shuō)改目錄屬主的問(wèn)題。3.2 安裝器交互選項(xiàng)解讀啟動(dòng)安裝器有兩種方式圖形界面就./Install文本模式就./Install -console。如果你前面沒(méi)有開(kāi) VNC我強(qiáng)烈建議直接 console 模式交互過(guò)程不繁瑣逐項(xiàng)輸序號(hào)、輸路徑就行反而比圖形界面更不容易卡住。安裝過(guò)程中會(huì)詢問(wèn)幾組關(guān)鍵信息安裝類(lèi)型一般選完整安裝或者自定義安裝。如果介質(zhì)里包含多個(gè)平臺(tái)組件注意確認(rèn)當(dāng)前選擇的是 Linux 版本而不是 Windows 版本。安裝根目錄默認(rèn)通常是/opt/msi保持默認(rèn)或改成你規(guī)劃好的路徑。組件列表這一頁(yè)會(huì)列出所有模塊組件Gateway 是必選的其他材料計(jì)算模塊按需勾選。這里我要強(qiáng)調(diào)一個(gè)很多人踩過(guò)的坑安裝過(guò)程中會(huì)讓你填 License 服務(wù)器信息這個(gè)階段可以先跳過(guò)或者隨便填一個(gè)占位等主程序裝完以后單獨(dú)再配授權(quán)。因?yàn)?License 服務(wù)的調(diào)試經(jīng)常要反復(fù)重啟、改 hostname、看日志如果把它綁在安裝流程里一次搞定出錯(cuò)以后排查鏈路會(huì)很亂。先讓主程序落地再回頭收拾授權(quán)。3.3 模塊選擇策略別只想省那點(diǎn)空間模塊勾選這里我的建議是除非磁盤(pán)空間實(shí)在緊張否則全部選上。原因有三個(gè)第一MS 模塊之間不是完全獨(dú)立的很多模塊要調(diào)用公共數(shù)據(jù)文件、力場(chǎng)參數(shù)庫(kù)和輔助工具你少裝一個(gè)某個(gè)模塊可能在運(yùn)行到一半時(shí)才報(bào)缺文件。第二License 是按授權(quán)文件里的 Feature 控制每個(gè)模塊能不能用的你裝全模塊不會(huì)多消耗授權(quán)數(shù)只是占磁盤(pán)而已。第三后續(xù)補(bǔ)裝模塊需要重新跑安裝器而且如果安裝器版本或者介質(zhì)已經(jīng)被清理補(bǔ)裝成本比現(xiàn)在一次性選上高得多。如果你確實(shí)空間不夠最核心的組件請(qǐng)至少包含MaterialsVisualizer、Forcite、CASTEP、DMol3、MS Gateway。這幾個(gè)覆蓋了材料計(jì)算最常見(jiàn)的結(jié)構(gòu)搭建、分子動(dòng)力學(xué)和第一性原理計(jì)算需求。3.4 安裝后的目錄結(jié)構(gòu)核對(duì)與權(quán)限修正安裝過(guò)程會(huì)持續(xù)一段時(shí)間取決于服務(wù)器的 CPU 和磁盤(pán)速度。裝完以后別看安裝器提示“Success”就關(guān)終端先把根目錄結(jié)構(gòu)過(guò)一遍ls /opt/msi正常情況下你應(yīng)該能看到類(lèi)似MaterialsStudio8.0、LicensePack、Gateway這樣的子目錄。如果某個(gè)目錄缺失說(shuō)明對(duì)應(yīng)組件沒(méi)裝上趕緊回看安裝日志找出是哪個(gè)步驟失敗。安裝日志一般在/tmp下或者安裝根目錄下的InstallLogs目錄里報(bào)錯(cuò)行會(huì)寫(xiě)清楚是在復(fù)制哪個(gè)文件時(shí)失敗。然后做一件很重要的事把整個(gè)安裝目錄的屬主改成非 root 用戶。MS 子程序在運(yùn)行時(shí)可能會(huì)往安裝目錄寫(xiě)臨時(shí)文件、日志如果用 root 全權(quán)持有客戶端任務(wù)以普通用戶身份執(zhí)行時(shí)反而會(huì)遇到權(quán)限問(wèn)題。建議先建一個(gè)專(zhuān)門(mén)用于運(yùn)行 MS 的用戶useradd -m msi chown -R msi:msi /opt/msi不要小看這一步后面子程序莫名崩潰查到最后發(fā)現(xiàn)是作業(yè)目錄無(wú)寫(xiě)權(quán)限的案例不在少數(shù)。4. License配置啟動(dòng)License服務(wù)與模塊授權(quán)驗(yàn)證4.1 License文件放置與方式選擇MS 8.0 的授權(quán)服務(wù)本質(zhì)上就是 FlexNet 的lmgrd授權(quán)文件是你從管理員那里拿到的.lic文件。部署方式分兩種如果課題組有獨(dú)立的授權(quán)服務(wù)器那計(jì)算節(jié)點(diǎn)根本不用跑 lmgrd只需要在環(huán)境變量里指向它比如MS_LICENSE_SERVER27080license-server。這種方式最省心License 服務(wù)只需要在一臺(tái)機(jī)器上維護(hù)所有計(jì)算節(jié)點(diǎn)共享。如果這里是唯一授權(quán)節(jié)點(diǎn)或者你想先在一臺(tái)機(jī)器上把服務(wù)跑通就要把.lic放到 LicensePack 的對(duì)應(yīng)目錄下。常見(jiàn)的位置是/opt/msi/LicensePack/share/licenses/具體目錄名以你介質(zhì)里的 LicensePack 結(jié)構(gòu)為準(zhǔn)可以用find /opt/msi -name *.lic或者find /opt/msi -type d -iname *licens*先探路。存放之前用文本編輯器打開(kāi).lic文件檢查里面的 HOSTID 和主機(jī)名跟你服務(wù)器的實(shí)際情況是否一致不一致的話后面 lmgrd 就算啟動(dòng)成功客戶端也會(huì)報(bào) invalid host。4.2 啟動(dòng)lmgrd并設(shè)置開(kāi)機(jī)自啟假定授權(quán)服務(wù)就在本機(jī)用下面的方式手動(dòng)啟動(dòng) lmgrd 做驗(yàn)證License_ROOT/opt/msi/LicensePack/linux_x86_64 $License_ROOT/bin/lmgrd \ -c /opt/msi/LicensePack/share/licenses/MS80.lic \ -l /var/log/lmgrd.log啟動(dòng)以后第一件事不是急著連客戶端而是看日志。日志里如果出現(xiàn)類(lèi)似License server started或者FlexNet Licensing version ...字樣就說(shuō)明基本成功了。然后確認(rèn)端口監(jiān)聽(tīng)netstat -tunlp | grep 27080我這里用 27080 舉例具體端口要以授權(quán)文件里寫(xiě)的信息為準(zhǔn)。為了讓重啟機(jī)器后授權(quán)服務(wù)自動(dòng)起來(lái)我習(xí)慣寫(xiě)一個(gè)簡(jiǎn)單的 systemd 服務(wù)。CentOS 7 下在/etc/systemd/system/lmgrd.service里寫(xiě)[Unit] DescriptionFlexNet License Server Afternetwork.target [Service] Typeforking ExecStart/opt/msi/LicensePack/linux_x86_64/bin/lmgrd -c /opt/msi/LicensePack/share/licenses/MS80.lic -l /var/log/lmgrd.log ExecStop/opt/msi/LicensePack/linux_x86_64/bin/lmutil lmdown Restarton-failure [Install] WantedBymulti-user.target然后執(zhí)行systemctl daemon-reload systemctl enable --now lmgrd。這里注意一個(gè)細(xì)節(jié)如果你的lmgrd實(shí)際是 32 位程序而系統(tǒng)里沒(méi)裝 32 位庫(kù)啟動(dòng)時(shí)可能直接報(bào)No such file or directory這不是文件不存在是加載器找不到對(duì)應(yīng)的 32 位 ld-linux回到第二章把兼容庫(kù)補(bǔ)上就好。4.3 用客戶端任務(wù)驗(yàn)證授權(quán)是否覆蓋到模塊License 啟動(dòng)成功不代表所有模塊都能用。每個(gè)模塊對(duì)應(yīng)一個(gè) Feature 名稱(chēng)比如 CASTEP 對(duì)應(yīng)一個(gè)特征碼DMol3 對(duì)應(yīng)另一個(gè)。驗(yàn)證授權(quán)范圍最直接的辦法是拿客戶端實(shí)際提交一個(gè)小任務(wù)。在客戶端機(jī)器上輸入服務(wù)端 IP 和登錄賬號(hào)新建一個(gè)簡(jiǎn)單結(jié)構(gòu)比如一個(gè)小晶胞的幾何優(yōu)化計(jì)算引擎選 CASTEP 或者 DMol3提交任務(wù)。如果授權(quán)正常任務(wù)會(huì)在服務(wù)端排隊(duì)、運(yùn)行、最后正常返回結(jié)果。如果任務(wù)一提交就報(bào)錯(cuò)去 Gateway 日志或者任務(wù)日志里找 License 相關(guān)的關(guān)鍵詞比如Cannot find license for ...說(shuō)明授權(quán)文件里沒(méi)有這個(gè)模塊的 Feature或者該 Feature 的并發(fā)數(shù)已經(jīng)被占滿。License server system down說(shuō)明 lmgrd 根本沒(méi)在跑或者客戶端連不上授權(quán)端口。Invalid host說(shuō)明授權(quán)文件綁定的主機(jī)名跟實(shí)際不一致。驗(yàn)證完一個(gè)模塊后最好把幾個(gè)常用模塊都各提交一遍小任務(wù)一次性確認(rèn)所有模塊可用別到課題組日常計(jì)算時(shí)才發(fā)現(xiàn)某個(gè)模塊沒(méi)授權(quán)。5. 環(huán)境變量與并行計(jì)算讓子程序跑在真正的多核上5.1 環(huán)境變量配置給所有用戶生效MS 8.0 運(yùn)行需要的核心環(huán)境變量主要是三個(gè)export MS_INSTALL_ROOT/opt/msi/MaterialsStudio8.0 export MS_LICENSE_SERVER27080cnode01 export PATH$MS_INSTALL_ROOT/bin:$PATHMS_INSTALL_ROOT指向 MS 程序主目錄。MS_LICENSE_SERVER的格式是端口主機(jī)名主機(jī)名要跟 License 服務(wù)器的實(shí)際 hostname 一致如果你寫(xiě) IP 也可以但有些模塊對(duì) IP 解析方式敏感盡量寫(xiě) hostname。PATH里加入 bin 目錄后命令行工具和輔助程序才能被直接調(diào)用。為了讓所有登錄用戶都自動(dòng)生效我習(xí)慣寫(xiě)到/etc/profile.d/ms8.sh里然后source /etc/profile或重新登錄。這里有個(gè)值得提醒的細(xì)節(jié)安裝目錄下的 bin 路徑可能不是標(biāo)準(zhǔn)的一層bin有的模塊會(huì)把可執(zhí)行文件放到各自模塊目錄下的深層路徑里如果你加了 bin 后敲命令還是提示 not found用ls $MS_INSTALL_ROOT看一下實(shí)際結(jié)構(gòu)把真實(shí)的 binaries 路徑加到 PATH。5.2 MPI運(yùn)行時(shí)選擇MS自帶的優(yōu)先MS 8.0 服務(wù)端跑并行計(jì)算時(shí)Gateway 會(huì)把任務(wù)提交給 MPI 運(yùn)行時(shí)執(zhí)行。有些新裝的服務(wù)器管理員圖省事系統(tǒng)里裝一個(gè)openmpi結(jié)果 MS 子程序一跑就崩或者提交任務(wù)后根本起不來(lái)并行進(jìn)程。原因很簡(jiǎn)單MS 8.0 適配的是它自帶的那套 MPI 運(yùn)行時(shí)和配套的進(jìn)程管理方式系統(tǒng)里的 OpenMPI 版本和它不一致時(shí)兩邊銜不上。我的做法是在 PATH 里讓 MS 自帶的 MPI 目錄排在系統(tǒng) MPI 前面優(yōu)先調(diào)用 MS 自己的運(yùn)行時(shí)。如果你不確定自帶的 MPI 放在哪找一下安裝目錄里帶mpirun或者mpiexec的路徑比如常見(jiàn)的是$MS_INSTALL_ROOT/../Mpi/mpich/bin用find /opt/msi -name mpirun搜一下。找到后把對(duì)應(yīng) bin 目錄加到環(huán)境變量的最前面。在 Gateway 的任務(wù)調(diào)度配置里進(jìn)程管理器這一項(xiàng)也要選擇本機(jī)直接執(zhí)行方式而不是默認(rèn)的遠(yuǎn)程 shell 方式。如果配置成需要 SSH 免密登錄每次任務(wù)啟動(dòng)都要多一步 SSH 握手還容易因?yàn)槊饷軟](méi)配好導(dǎo)致任務(wù)在啟動(dòng)階段就卡死。5.3 并行實(shí)測(cè)4核、8核、16核的加速比與判斷環(huán)境配好了但怎么確認(rèn)并行真的生效我用過(guò)一個(gè)非常土的辦法跑一個(gè)相同的小體系單點(diǎn)能任務(wù)分別設(shè)置 1、4、8、16 核記錄每一輪的耗時(shí)。實(shí)測(cè)下來(lái)的數(shù)據(jù)大致長(zhǎng)這樣核數(shù)耗時(shí)(秒)相對(duì)單核加速比1520141603.38955.516707.4從這組數(shù)據(jù)能看出兩件事一是有加速說(shuō)明并行確實(shí)在起作用二是從 8 核到 16 核加速比提升很小說(shuō)明這個(gè)體系太小已經(jīng)出現(xiàn)并行通信開(kāi)銷(xiāo)大于計(jì)算收益的情況。如果你提交 8 核任務(wù)但耗時(shí)和單核一模一樣那就要懷疑并行沒(méi)生效。用top看一下運(yùn)行時(shí)進(jìn)程數(shù)量如果只有一個(gè)主進(jìn)程在跑說(shuō)明 MPI 配置有問(wèn)題回到 5.2 檢查運(yùn)行時(shí)的選擇。體系規(guī)模決定核數(shù)這是個(gè)特別重要的經(jīng)驗(yàn)原子數(shù)不到一百的體系4 核基本就到頭了幾百個(gè)原子的體系8 核比較劃算上千個(gè)原子的體系才值得上 16 核或更多。無(wú)腦加核只會(huì)讓任務(wù)排隊(duì)排得更久算得反而更慢。5.4 磁盤(pán)與內(nèi)存規(guī)劃靜默失敗的常見(jiàn)原因并行計(jì)算對(duì)內(nèi)存和磁盤(pán)的要求比想象的更高。MS 子程序在計(jì)算過(guò)程中會(huì)在臨時(shí)目錄產(chǎn)生大量中間文件/tmp如果空間太小任務(wù)會(huì)在沒(méi)有任何明確報(bào)錯(cuò)的情況下消失只在日志尾部留一行不明不白的錯(cuò)誤。這一步我吃過(guò)虧當(dāng)時(shí)一個(gè) 32 核任務(wù)跑了一個(gè)小時(shí)后突然退出查了半天最后發(fā)現(xiàn)/tmp只剩幾百兆。解決辦法是把臨時(shí)目錄指到大分區(qū)。在 MS 環(huán)境里設(shè)置export TMPDIR/scratch/ms8_tmp mkdir -p /scratch/ms8_tmp chown msi:msi /scratch/ms8_tmp如果/scratch是本地盤(pán)還能順便減少 NFS 網(wǎng)絡(luò)文件系統(tǒng)帶來(lái)的 IO 瓶頸。并行任務(wù)如果工作目錄掛在 NFS 上多個(gè)進(jìn)程同時(shí)讀寫(xiě)同一個(gè)網(wǎng)絡(luò)目錄非常容易出現(xiàn)鎖沖突和文件同步問(wèn)題。有條件的話把任務(wù)的本地工作目錄放到計(jì)算節(jié)點(diǎn)的本地盤(pán)跑完再同步回共享存儲(chǔ)這是老 HPC 管理員的基本素養(yǎng)。6. 高頻問(wèn)題排查從錯(cuò)誤日志到解決方案的完整鏈路6.1 缺動(dòng)態(tài)庫(kù)用ldd定位而不是瞎猜啟動(dòng) MS 子程序時(shí)最常聽(tīng)到的一句話是“報(bào)錯(cuò)說(shuō)找不到一個(gè) .so 文件”。報(bào)錯(cuò)信息五花八門(mén)有缺libXp.so.6的有缺libstdc.so.5的有缺libGL.so.1的。面對(duì)這類(lèi)問(wèn)題我的排查方式是先找到具體是哪個(gè)可執(zhí)行文件起不來(lái)然后用ldd看它到底缺什么ldd /opt/msi/MaterialsStudio8.0/modules/CASTEP/bin/castepexe | grep not found絕大多數(shù)情況缺什么就用包管理器去找它屬于哪個(gè)包而不是一次性裝一堆包碰運(yùn)氣yum provides */libXp.so.6找到包名后yum install對(duì)應(yīng)包的 i686 版本。這一套下來(lái)通常三五分鐘就能解決。不要圖省事直接把所有 32 位庫(kù)裝一遍萬(wàn)一裝錯(cuò)版本或者引入了庫(kù)沖突后面的排查才是真正的無(wú)底洞。6.2 圖形界面顯示異常字體與X環(huán)境的處理MS 安裝器或者客戶端連接后界面出現(xiàn)黑塊、窗體空白、字體全是小方塊這一般不是程序壞了而是圖形環(huán)境和字體的問(wèn)題。安裝器黑屏?xí)r先確認(rèn)DISPLAY有沒(méi)有指向正確的 VNC 桌面再確認(rèn)字體包是否齊全xset -q如果 VNC 分辨率太低Java 渲染也會(huì)出問(wèn)題把 VNC 的分辨率調(diào)到1280x1024或更高。實(shí)在不行就退回文本模式安裝./Install -console不需要 X 也能把主程序完整裝上。裝主程序和配 License 都不依賴圖形界面圖形界面只是給安裝過(guò)程提供便利別被它卡住整個(gè)項(xiàng)目進(jìn)度。6.3 Gateway無(wú)法啟動(dòng)端口與殘留進(jìn)程Gateway 是客戶端連服務(wù)器的入口它的默認(rèn)端口是 18888。如果你改了 Gateway 配置或者服務(wù)器重啟后沒(méi)正常關(guān)閉 Gateway再啟動(dòng)時(shí)會(huì)提示端口被占用最常見(jiàn)的場(chǎng)景是安裝過(guò)程中沒(méi)有把吉隆的舊進(jìn)程清干凈。排查鏈路很直接ps -ef | grep -i gateway ss -tlnp | grep 18888看到 18888 端口被某個(gè) Java 進(jìn)程占著要么把它停掉要么找到 Gateway 自帶的啟停腳本用正常方式重啟。MS 8.0 網(wǎng)關(guān)目錄下一般有g(shù)wstop、gwstart之類(lèi)的腳本先執(zhí)行 gwstop確認(rèn)進(jìn)程退出以后再 gwstart。啟動(dòng)后等幾秒再檢查一次端口監(jiān)聽(tīng)是否正常。如果客戶端連接時(shí)經(jīng)常自動(dòng)斷開(kāi)還要檢查客戶端到服務(wù)器的 18888 端口是否被防火墻攔了。6.4 License報(bào)錯(cuò)從日志往上游看License 相關(guān)的報(bào)錯(cuò)是安裝后期的大頭。常見(jiàn)的表象有任務(wù)一提交就提示 license 錯(cuò)誤、客戶端顯示無(wú)法獲得授權(quán)、Gateway 日志里寫(xiě)著 license server down。這些表面問(wèn)題背后可能是完全不同的原因我的排查套路是從日志出發(fā)一層層往上游看先看 lmgrd 的日志tail -50 /var/log/lmgrd.log如果日志顯示License server started說(shuō)明服務(wù)正常問(wèn)題可能出在客戶端環(huán)境變量寫(xiě)的端口或主機(jī)名不對(duì)。如果日志根本沒(méi)有啟動(dòng)記錄那 lmgrd 進(jìn)程可能沒(méi)起來(lái)檢查進(jìn)程和端口。如果日志里有Invalid host字樣那問(wèn)題在授權(quán)文件綁定信息上去跟授權(quán)文件里的 HOSTNAME 逐一比對(duì)。如果日志里有EXPIRED字樣查系統(tǒng)當(dāng)前時(shí)間和日期FlexNet 對(duì)時(shí)鐘漂移非常敏感節(jié)點(diǎn)時(shí)間被自動(dòng)校時(shí)撥亂的時(shí)候授權(quán)服務(wù)會(huì)間歇性地報(bào)告過(guò)期。還有一個(gè)很容易忽略的坑修改了/etc/hosts的 hostname 映射后沒(méi)有重啟 lmgrd。lmgrd 在啟動(dòng)時(shí)會(huì)把主機(jī)名緩存下來(lái)你改了 hosts 但不重啟它它用的還是老名字自然對(duì)不上授權(quán)。6.5 子程序中途消失內(nèi)存、磁盤(pán)和權(quán)限的賬任務(wù)提交后進(jìn)程起來(lái)但跑著跑著就沒(méi)了連個(gè)報(bào)錯(cuò)窗口都不彈這是最讓人頭疼的情況。這類(lèi)問(wèn)題的排查必須看系統(tǒng)層證據(jù)而不是反復(fù)重新提交任務(wù)。先看作業(yè)目錄下的日志和輸出文件尾部有沒(méi)有異常。接著看系統(tǒng)日志里有沒(méi)有內(nèi)核殺進(jìn)程的記錄dmesg -T | tail -50如果看到Out of memory: Kill process那就是典型的內(nèi)存不足子程序申請(qǐng)的內(nèi)存超過(guò)了節(jié)點(diǎn)可用內(nèi)存被內(nèi)核 OOM 殺掉。解決辦法是減少并行核數(shù)、換大內(nèi)存節(jié)點(diǎn)或者優(yōu)化計(jì)算的基組復(fù)雜度。如果內(nèi)存沒(méi)問(wèn)題再檢查磁盤(pán)df -h /tmp df -h /opt臨時(shí)目錄或安裝目錄滿了程序?qū)懼虚g文件失敗也會(huì)靜默退出。磁盤(pán)沒(méi)問(wèn)題的話接下來(lái)檢查權(quán)限。MS 子程序能不能在工作目錄和臨時(shí)目錄寫(xiě)入取決于 MS 運(yùn)行用戶對(duì)這兩個(gè)目錄的權(quán)限。用ls -ld看目錄屬主用運(yùn)行 MS 的用戶實(shí)際去新建一個(gè)測(cè)試文件試試就知道。這套排查走完90% 的靜默消失都能定位到原因。說(shuō)實(shí)話MS 8.0 裝好一次以后非常穩(wěn)定我見(jiàn)過(guò)服務(wù)器上跑了好幾年都不需要再動(dòng)的。真正麻煩的從來(lái)不是安裝本身而是安裝前那些看著不起眼、關(guān)鍵時(shí)刻掉鏈子的前置檢查。希望這篇記錄能幫你少走幾個(gè)我走過(guò)的彎路。