
ALAMODE 是基于第一性原理計算晶格動力學(xué)和熱導(dǎo)率的開源工具。很多做聲子、熱導(dǎo)率、非諧效應(yīng)的材料計算研究者都會在 VASP 之外配套一個力常數(shù)和聲子計算程序ALAMODE 是這類工具里比較有針對性的一套。這篇文章要解決的是在 Ubuntu 20.04 上使用 Intel oneAPI 編譯器從零編譯安裝 ALAMODE并完成環(huán)境驗證和基礎(chǔ)測試。先說結(jié)論ALAMODE 本身不依賴 GPU用 CPU 編譯和運(yùn)行。難點集中在依賴庫的拼裝上尤其是 FFTW、LAPACK 和 Eigen 三個底層庫。只要把 Intel 編譯器環(huán)境、MKL 數(shù)學(xué)庫和 Eigen 頭文件準(zhǔn)備到位剩下的configure make make install流程不算復(fù)雜。整個安裝過程適合在本地工作站或小型計算節(jié)點上完成通常不會出現(xiàn)“缺依賴導(dǎo)致無法繼續(xù)”的致命問題最多是在路徑配置上多花一點時間。本文會從 ALAMODE 的核心能力、適用場景、環(huán)境準(zhǔn)備、依賴庫編譯、源碼配置、功能測試、資源占用和常見問題幾個方面展開。每一節(jié)都會給出可復(fù)制的命令和配置示例方便你直接照著操作。如果你已經(jīng)裝過 Phonopy那么這篇文章的很多思路是相通的只是 ALAMODE 在非諧力常數(shù)和導(dǎo)熱率計算上更進(jìn)一步。1. ALAMODE 核心能力速覽能力項說明項目類型原子級材料計算開源軟件主要用于晶格動力學(xué)與熱導(dǎo)率模擬開發(fā)語言Fortran 與 C/C 混合主要功能諧波/非諧力常數(shù)擬合、聲子色散、聲子態(tài)密度、聲子壽命、晶格熱導(dǎo)率計算硬件要求不需要 GPU純 CPU 計算內(nèi)存大小與超胞規(guī)模、原子數(shù)和振動模式數(shù)相關(guān)支持操作系統(tǒng)Linux、macOS本文以 Ubuntu 20.04 為例編譯器支持Intel ifort/icc、GCC/gfortran本文采用 Intel oneAPI 編譯器關(guān)鍵依賴Intel MKL或 LAPACK/BLAS、FFTW、Eigen、MPI可選啟動方式命令行工具安裝后生成alm和anphon兩個可執(zhí)行文件是否支持批量任務(wù)支持可通過 shell/Python 腳本批量處理多個輸入結(jié)構(gòu)也可以借助 MPI 并行適合場景基于 VASP 等第一性原理計算的聲子計算和晶格熱導(dǎo)率研究從表中可以看到ALAMODE 不屬于那種“下載即用”的軟件。它需要你提前準(zhǔn)備好一套科學(xué)計算編譯鏈。對 Ubuntu 20.04 用戶來說最省心的方式是安裝 Intel oneAPI Base Toolkit 和 HPC Toolkit里面已經(jīng)包含了 ifort/icx 編譯器、Intel MPI 和 MKL。這樣 LAPACK 和 BLAS 可以直接從 MKL 獲取FFTW 也可以用 MKL 自帶的兼容接口只有 Eigen 需要單獨(dú)下載。2. 適用場景與使用邊界ALAMODE 主要適合做凝聚態(tài)物理和材料物理中與聲子相關(guān)的研究。典型使用場景包括從第一性原理計算得到的原子受力和能量出發(fā)擬合諧波力常數(shù)計算聲子色散和聲子態(tài)密度計算三階非諧力常數(shù)進(jìn)一步分析聲子-聲子散射、聲子壽命和模式群速度結(jié)合聲子玻爾茲曼輸運(yùn)方程計算材料的晶格熱導(dǎo)率模擬溫度變化對聲子頻率和色散關(guān)系的影響用于高溫相穩(wěn)定性分析。這些功能意味著 ALAMODE 通常需要和 VASP、QE 等第一性原理軟件配合使用。你需要先準(zhǔn)備好 DFPT 或有限位移法計算所需的超胞、位移構(gòu)型以及對應(yīng)的原子受力和總能數(shù)據(jù)。ALAMODE 本身不執(zhí)行電子結(jié)構(gòu)計算只負(fù)責(zé)從這些數(shù)據(jù)中提取力常數(shù)并做聲子相關(guān)的后處理。從邊界上看ALAMODE 不是萬能的。它不擅長處理強(qiáng)關(guān)聯(lián)電子體系或者包含明顯非諧局域模式的復(fù)雜體系。對于大超胞、高對稱性和更多位移構(gòu)型的任務(wù)計算量會快速增長。此外ALAMODE 的編譯安裝對 Fortran 編譯器版本和數(shù)學(xué)庫兼容性有一定要求如果你使用的編譯器是老版本 GCC 或者系統(tǒng)自帶的基礎(chǔ)庫在鏈接階段可能會遇到一些難以排查的錯誤。使用 ALAMODE 處理實驗或文獻(xiàn)數(shù)據(jù)時還要注意軟件許可和數(shù)據(jù)合規(guī)問題。ALAMODE 本身是開源許可證可以自由使用和修改但如果你用 VASP 生成輸入數(shù)據(jù)必須確保 VASP 的授權(quán)覆蓋你的研究場景。涉及未發(fā)表的結(jié)構(gòu)數(shù)據(jù)、合作方材料數(shù)據(jù)或商業(yè)項目時也要確認(rèn)數(shù)據(jù)使用邊界避免出現(xiàn)版權(quán)或保密問題。3. 環(huán)境準(zhǔn)備與前置條件在 Ubuntu 20.04 上編譯 ALAMODE建議先在干凈的系統(tǒng)環(huán)境下做一遍完整性檢查避免依賴沖突。下面是最小前置條件Ubuntu 20.04 操作系統(tǒng)內(nèi)核更新到最新補(bǔ)丁至少 8 GB 內(nèi)存磁盤剩余空間 5 GB 以上GCC、gfortran 和 make 已安裝Intel oneAPI Base Toolkit 和 HPC Toolkit 已安裝網(wǎng)絡(luò)可訪問 ALAMODE 源碼倉庫和 Eigen 官網(wǎng)。如果還沒有安裝 Intel oneAPI可以通過以下命令檢查環(huán)境source /opt/intel/oneapi/setvars.sh which ifort which icc如果沒有找到ifort說明 HPC Toolkit 沒有安裝到位。需要注意的是Intel 已經(jīng)用ifx逐步替代ifort但 ALAMODE 的編譯腳本目前對ifort的支持更成熟。如果系統(tǒng)里只有ifx可以嘗試將FCifx傳入 configure但更穩(wěn)妥的路徑是安裝完整 HPC Toolkit它通常同時包含ifort和icx。系統(tǒng)基礎(chǔ)編譯工具也建議提前裝好sudo apt update sudo apt install -y build-essential gfortran wget git cmake接下來檢查是否已經(jīng)有mkl環(huán)境變量。通常安裝 Intel oneAPI 后setvars.sh會設(shè)置MKLROOTecho $MKLROOT如果輸出為空確認(rèn)setvars.sh是否正確 source。到這里基礎(chǔ)環(huán)境已經(jīng)準(zhǔn)備好下一步開始準(zhǔn)備 ALAMODE 的依賴庫。4. 依賴庫編譯準(zhǔn)備4.1 Intel MKL 的 LAPACK 支持ALAMODE 的alm和anphon核心功能需要大量線性代數(shù)運(yùn)算例如特征值分解、矩陣求逆、最小二乘擬合等。Intel MKL 提供了完整的 LAPACK 和 BLAS 實現(xiàn)性能上比 OpenBLAS 和系統(tǒng)自帶的 LAPACK 更好也能和 Intel 編譯器無縫配合。在 configure 階段可以使用--with-lapack$MKLROOT或者通過 LDFLAGS 顯式指定鏈接庫。MKL 的典型鏈接參數(shù)如下export LDFLAGS-L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core如果你的編譯器是ifort還需要確保lmkl_blacs_intelmpi_lp64等 MPI 相關(guān)庫存在。只做串行編譯時上面三件套已經(jīng)夠用。4.2 FFTW 的獲取方式ALAMODE 依賴 FFTW 進(jìn)行快速傅里葉變換這主要是為了在倒空間插值和聲子計算時提高效率。FFTW 有兩個常見來源獨(dú)立安裝的 FFTW或者使用 Intel MKL 自帶的 FFTW 兼容接口。獨(dú)立安裝 FFTW 的方式更通用尤其當(dāng)你可能還會把 ALAMODE 和 GCC 編譯器一起使用時。FFTW 3.x 的編譯很簡單wget http://www.fftw.org/fftw-3.3.10.tar.gz tar -zxvf fftw-3.3.10.tar.gz cd fftw-3.3.10 ./configure --prefix$HOME/fftw --enable-shared --enable-single make -j$(nproc) make install這里--enable-single表示單精度 FFTW。ALAMODE 通常需要雙精度 FFTW如果你不確定可以去掉這個選項默認(rèn)就是雙精度。安裝完成后include目錄下會有fftw3.hlib目錄下會有l(wèi)ibfftw3.a或.so。如果不想額外編譯 FFTW也可以使用 MKL 的 FFTW 接口。在 configure 時可能需要配置--with-fftw$MKLROOT并確保頭文件路徑和庫文件路徑正確。不同版本的 MKL 對這個接口的封裝略有差異如果遇到找不到fftw3.h的問題建議直接安裝獨(dú)立 FFTW省時省力。4.3 Eigen 頭文件獲取Eigen 是一個純頭文件的 C 模板庫不需要編譯安裝過程只是解壓并放置到合適位置。ALAMODE 在擬合力常數(shù)時用到了 Eigen 的線性代數(shù)模板。從 Eigen 官網(wǎng)或 GitHub 下載最新穩(wěn)定版例如 3.4.0cd $HOME wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz tar -zxvf eigen-3.4.0.tar.gz mv eigen-3.4.0 eigen這樣$HOME/eigen目錄下就能看到Eigen和unsupported兩個子目錄。configure 時可用--with-eigen$HOME/eigen指定路徑。Eigen 只需頭文件不參與編譯所以后面 ALAMODE 編譯時不會產(chǎn)生額外的.o文件。4.4 可選的 MPI 環(huán)境如果你的計算任務(wù)需要處理大超胞或多位移構(gòu)型建議安裝 Intel MPI。Intel oneAPI HPC Toolkit 通常會捆綁 Intel MPI安裝后運(yùn)行source /opt/intel/oneapi/setvars.sh which mpiifort如果函數(shù)正常返回說明 MPI 環(huán)境可用。ALAMODE 的 configure 腳本會自動檢測 MPI但如果沒有檢測到也不會影響串行編譯。你可以在 configure 參數(shù)中顯式禁用 MPI--without-mpi不過多數(shù)材料計算場景還是建議保留 MPI 支持因為熱導(dǎo)率計算涉及大量聲子模式并行化能顯著縮短等待時間。5. ALAMODE 源碼下載與編譯配置5.1 下載源碼ALAMODE 的源碼托管在 GitHub 或官方網(wǎng)站上。建議下載最新 release 版本而不是直接 clone master 分支這樣能保證穩(wěn)定性和可復(fù)現(xiàn)性。以 tar.gz 包為例cd $HOME wget https://github.com/ttadano/alamode/releases/download/v1.4.0/alamode-v1.4.0.tar.gz tar -zxvf alamode-v1.4.0.tar.gz cd alamode-v1.4.0這里的版本號只是一個示例實際下載時請以官方倉庫的 release 為準(zhǔn)。如果 GitHub 訪問速度慢也可以通過官方主頁下載。解壓后目錄下會有configure、Makefile.in、examples、src等文件。5.2 設(shè)置 Intel 編譯環(huán)境進(jìn)入源碼目錄后先 source Intel oneAPI 環(huán)境再顯式設(shè)置編譯器變量source /opt/intel/oneapi/setvars.sh export CCicc export CXXicpc export FCifort export F77ifort export FCFLAGS-O2 -xHost export CFLAGS-O2 -xHost如果你的 oneAPI 版本較新icx已經(jīng)替代iccifx也已經(jīng)出現(xiàn)。此時可以嘗試export CCicx export CXXicpx export FCifort但請注意ALAMODE 的某些 Fortran 代碼可能與ifx存在兼容性差異如果編譯報錯回退到ifort是更穩(wěn)妥的方案。-xHost表示針對本機(jī) CPU 架構(gòu)優(yōu)化如果后續(xù)需要遷移到其他機(jī)器建議換成-marchcore-avx2等通用指令集。5.3 configure 生成 Makefile配置命令要根據(jù)上一節(jié)準(zhǔn)備的依賴路徑來寫。下面的示例假設(shè) FFTW 安裝到$HOME/fftwEigen 在$HOME/eigenMKL 使用系統(tǒng)默認(rèn)環(huán)境./configure --prefix$HOME/alamode \ --with-fftw$HOME/fftw \ --with-lapack$MKLROOT \ --with-eigen$HOME/eigen \ --with-mpiyes--with-mpiyes表示啟用 MPI。如果你沒有安裝 Intel MPI可以用--with-mpino關(guān)閉。configure 腳本會輸出檢查到的編譯器、庫路徑和功能狀態(tài)。關(guān)鍵看是否有checking for FFTW... yes、checking for LAPACK... yes、checking for Eigen... yes之類的結(jié)果。如果某個依賴顯示no需要回到上一步檢查路徑和頭文件。5.4 編譯與安裝configure 沒問題后直接執(zhí)行編譯make -j$(nproc) make installmake install會把可執(zhí)行文件安裝到--prefix指定的目錄下默認(rèn)產(chǎn)生$HOME/alamode/bin目錄其中包含alm和anphon兩個可執(zhí)行程序。安裝完成后將安裝目錄加入PATHexport PATH$HOME/alamode/bin:$PATH為了讓每次登錄自動生效可以寫入~/.bashrc。這一步之后ALAMODE 就算安裝完成了。6. 功能測試與效果驗證安裝完成后不要急著跑大體系先用程序自帶的幫助信息和示例數(shù)據(jù)做一次完整性驗證。6.1 檢查可執(zhí)行文件which alm which anphon如果能正常返回路徑說明bin目錄已經(jīng)生效。再執(zhí)行alm --help anphon --help如果輸出幫助信息沒有出現(xiàn)error while loading shared libraries說明動態(tài)庫鏈接正常。6.2 使用自帶示例驗證流程ALAMODE 源碼包通常帶有examples目錄。比如常見的硅模型、金剛石模型等。你可以進(jìn)入某個示例目錄查看輸入文件格式然后嘗試運(yùn)行cd examples/si alm這里不一定會輸出一個完整的計算結(jié)果因為不同版本示例的輸入文件名不同。更通用的驗證方式是用mkalmt或anphon直接執(zhí)行一個簡單任務(wù)。但為了不依賴特定示例文件你可以在自己已經(jīng)準(zhǔn)備好的第一性原理數(shù)據(jù)上測試。初次使用時建議選擇一個小超胞例如 2x2x2 的硅晶體這樣幾分鐘內(nèi)就能跑完便于快速確認(rèn)程序和依賴庫是否正常工作。6.3 判斷編譯成功的關(guān)鍵指標(biāo)編譯成功的判斷標(biāo)準(zhǔn)有幾個alm和anphon可以正常執(zhí)行沒有段錯誤程序可以讀取你的力常數(shù)或位移輸入文件并給出力常數(shù)擬合報告聲子色散計算能輸出頻率數(shù)據(jù)數(shù)值在半導(dǎo)體的合理范圍比如硅的光學(xué)聲子頻率接近 16 THz日志文件末尾沒有出現(xiàn)NaN或Inf數(shù)值。如果輸出中有大量NaN通常不是編譯問題而是輸入數(shù)據(jù)質(zhì)量問題可能是位移構(gòu)型不完整或受力數(shù)據(jù)精度不夠。這種情況需要回到第一性原理計算階段檢查 VASP 設(shè)置。6.4 MPI 并行測試如果你的 ALAMODE 啟用了 MPI可以用 MPI 方式運(yùn)行示例mpirun -np 4 anphon觀察程序是否正常啟動并利用多核計算。如果這步報錯比如找不到libmpi.so說明 MPI 庫鏈接不完整需要檢查LD_LIBRARY_PATH是否包含 Intel MPI 的 lib 目錄。7. 資源占用與性能觀察ALAMODE 是純 CPU 計算程序運(yùn)行時主要關(guān)注 CPU 使用率、內(nèi)存占用和并行效率。下面給出一些觀察方法和調(diào)優(yōu)思路。在終端用htop或top查看進(jìn)程信息。串行運(yùn)行時CPU 使用率應(yīng)該在一個核上接近 100%。并行運(yùn)行時多個核的 CPU 使用率都會升高。如果并行之后 CPU 使用率仍然只有 100%說明 MPI 沒有真正生效需要檢查命令行是否使用了mpirun以及程序啟動時有沒有加載 MPI 庫。內(nèi)存方面ALAMODE 的內(nèi)存需求主要集中在力常數(shù)矩陣求解和聲子模式對角化。超胞原子數(shù)越多矩陣規(guī)模越大內(nèi)存占用越高。以常見 2x2x2 硅超胞為例內(nèi)存占用通常不超過 2 GB。如果你的超胞超過 100 個原子建議內(nèi)存至少 16 GB 以上。要臨時降低內(nèi)存峰值可以關(guān)閉并行環(huán)境變量中的超線程或者使用更緊湊的矩陣存儲模式。性能調(diào)優(yōu)可以參考以下幾點使用OMP_NUM_THREADS控制 OpenMP 線程數(shù)配合 MPI 做混合并行編譯時使用-O2或-O3優(yōu)化但不要盲目使用最高優(yōu)化級別某些優(yōu)化可能導(dǎo)致數(shù)值誤差使用 MKL 提供的多線程版本并設(shè)置MKL_NUM_THREADS參數(shù)在超算或服務(wù)器上盡量將計算任務(wù)綁定到物理核心避免 CPU 頻繁切換。8. 常見問題與排查方法在 Ubuntu 20.04 下編譯 ALAMODE最容易遇到的問題集中在編譯器環(huán)境、數(shù)學(xué)庫路徑和鏈接參數(shù)上。下表整理了常見現(xiàn)象、可能原因和解決方案。問題現(xiàn)象可能原因排查方式解決方案configure 報No Fortran compiler found未安裝 ifort或環(huán)境變量未設(shè)置執(zhí)行which ifort安裝 Intel oneAPI HPC Toolkit并source setvars.sh找不到fftw3.hFFTW 路徑配置錯誤或未安裝 FFTW查看$HOME/fftw/include/fftw3.h是否存在重裝 FFTW或重新指定--with-fftw鏈接時報cannot find -lmkl_sequentialMKL 庫路徑未添加到 LDFLAGS檢查$MKLROOT/lib/intel64是否有對應(yīng)文件在 configure 前設(shè)置 LDFLAGSEigen 相關(guān)編譯報錯Eigen 頭文件路徑錯誤或版本過舊檢查Eigen/Core是否可訪問下載新版 Eigen并通過--with-eigen指定路徑alm啟動時報libiomp5.so找不到Intel OpenMP 運(yùn)行庫未加載執(zhí)行l(wèi)dd alm/ldd anphon重新 source oneAPI 環(huán)境并設(shè)置LD_LIBRARY_PATH編譯過程中internal compiler error編譯器版本過舊或優(yōu)化級別過高查看編譯器版本重試降低優(yōu)化級別更新 Intel oneAPI 到最新版或改用-O1編譯MPI 并行程序報錯MPI_Init失敗MPI 環(huán)境未正確加載或網(wǎng)絡(luò)接口不匹配運(yùn)行mpirun --version重新source setvars.sh或指定--mca參數(shù)計算結(jié)果全部為 NaN輸入數(shù)據(jù)或力常數(shù)擬合異常不一定是編譯問題檢查輸入文件格式和第一性原理輸出的受力精度增加 VASP 受力收斂標(biāo)準(zhǔn)重新生成輸入數(shù)據(jù)如果 configure 階段碰到LAPACK library not found可以手動用 MKL 鏈接一個簡單的 Fortran 測試程序來驗證。比如寫一個只調(diào)用zheev的小程序用ifort配合 LDFLAGS 編譯能跑通就說明 MKL 環(huán)境正常。這樣能把編譯問題快速定位到 ALAMODE 本身還是系統(tǒng)數(shù)學(xué)庫上。9. 最佳實踐與使用建議編譯安裝完成后建議把一次完整的安裝流程記錄下來包括依賴版本、configure 參數(shù)、環(huán)境變量形成一份安裝筆記。后續(xù)換機(jī)器或者給同事復(fù)現(xiàn)時可以節(jié)省大量排查時間。在項目管理上推薦把源碼、依賴庫和計算結(jié)果分目錄存放。比如$HOME/ ├── alamode_src/ # ALAMODE 源碼 ├── fftw/ # 獨(dú)立編譯的 FFTW ├── eigen/ # Eigen 頭文件 ├── alamode_install/ # ALAMODE 安裝目錄 └── calc/ # 實際計算任務(wù)每個計算任務(wù)目錄下單獨(dú)放輸入文件、腳本和輸出結(jié)果避免多個項目混用同一個工作目錄。這樣即便要重新編譯 ALAMODE也不會影響正在跑的計算任務(wù)。使用 ALAMODE 時建議先小規(guī)模測試再上大規(guī)模任務(wù)。第一性原理計算和聲子計算都是重資源任務(wù)如果直接在幾百個原子的超胞上運(yùn)行后期可能會因為輸入數(shù)據(jù)問題浪費(fèi)大量機(jī)時。先跑一個小體系確認(rèn)程序、流程和結(jié)果合理性再擴(kuò)大范圍。對于需要長期運(yùn)行的批量任務(wù)建議寫一個簡單的 shell/python 包裝腳本自動遍歷不同結(jié)構(gòu)、不同溫度或不同位移幅度并記錄每次運(yùn)行的日志。批量任務(wù)要設(shè)置超時和失敗重試機(jī)制避免某個計算任務(wù)卡住影響整個隊列。輸出文件夾也要包含清晰的命名比如結(jié)構(gòu)名、溫度、位移大小等。涉及第三方材料數(shù)據(jù)、未發(fā)表結(jié)構(gòu)或商業(yè)合作項目時務(wù)必確認(rèn)數(shù)據(jù)授權(quán)范圍。ALAMODE 的開源許可只覆蓋軟件本身不覆蓋你輸入的原子結(jié)構(gòu)和第一性原理計算結(jié)果。如果使用 VASP 等商業(yè)軟件生成數(shù)據(jù)還需要遵守對應(yīng)軟件的許可條款。10. 總結(jié)與下一步ALAMODE 在 Ubuntu 20.04 上的 Intel 版編譯安裝核心路徑是準(zhǔn)備好 Intel oneAPI 編譯環(huán)境編譯或配置好 FFTW、LAPACK/BLAS、Eigen 三個依賴庫然后運(yùn)行configure生成 Makefile最后make make install。整個過程不依賴 GPU主要考驗的是編譯環(huán)境和路徑配置。最容易踩的坑有三個一是沒有 source Intel oneAPI 環(huán)境導(dǎo)致找不到 ifort二是 FFTW 路徑錯誤導(dǎo)致 configure 檢測失敗三是 LAPACK 鏈接參數(shù)不完整導(dǎo)致編譯能通過但鏈接階段報錯。如果你第一次安裝失敗優(yōu)先檢查這三處。安裝成功后先跑一個最小示例驗證alm和anphon是否正常。如果小體系能輸出正確的聲子頻率說明整套流程已經(jīng)打通后面可以開始處理你自己的材料結(jié)構(gòu)。建議接下來的方向是先用簡單體系做一次聲子色散計算逐步熟悉 ALAMODE 的輸入文件格式再嘗試計算三階非諧力常數(shù)和聲子壽命最后再做晶格熱導(dǎo)率分析。如果計算規(guī)模比較大可以嘗試 MPI 并行并對比不同并行方案對效率的影響。