Quantum Espresso GPU版本安裝
目次
1.
介紹
甲、Quantum
Espresso
乙、Nvidia Cuda
丙、Nvidia HPC
toolkit
丁、OpenMP
戊、OpenMPI
2.
硬體
甲、CPU
乙、Memory
丙、GPU
3.
軟體
4.
安裝教學
甲、Nvidia
Drivers
乙、Nvidia HPC SDK,
Cuda toolkit
丙、Cuda-aware
MPI - OpenMPI
丁、Quantum
Espresso
i.
CPU版本
ii.
GPU版本
介紹
1.
Quantum Espresso
隨著人類科技的進步,積體電路的微縮技術、積體電路的運算性能有了快速的突破,電腦運算性能的提升,讓許多電腦軟體得到實際的應用,量子力學計算在物理領域己經發展許久,其理論可以計算結晶結構的電帶結構、拉曼光譜、聲子模式等物理性質,對材料研究有重大幫助,但因為量子力學計算所需要的運算資源太過於龐大,因此一直無法得到廣泛的應用。Quantum Espresso是一個由義大利團隊所開發的量子力學計算軟體,其善加利用了現代電腦強大的平行計算能力,包括多核心CPU、GPU等,來大幅縮短量子力學計算所需要的時間,讓量子力學計算可以在材料研究領域可以得到廣泛的應用。
不過因為Quantum Espresso的應用端大多集中在學術界,詳細的系統建置說明完整公佈在網路上的學習資源並不多,而且HPC的技術細節太過散亂,為了敝人日後建置系統的方便,特別整理出建置Quantum Espresso的技術梗概及細節,希望對需要建置Quantum Espresso計算中心的人有幫助。
本文章使用的方式有二種,對於High Performance Computing(HPC)有興趣的人可以依序把整個文章讀完,你可以得到深厚的背景知識及完整運作的Quantum
Espresso。若只是想要快速地把Quantum Espresso計算中心建置完成的人,只需依次在Linux系統鍵入每段的指令即可。
2.
Nvidia CUDA
一般的程式碼皆在CPU上執行,若要使用GPU的加速功能,則要將程式及資料藉由PCIe介面運送至GPU,待其執行完後再運算結果回傳至CPU。在這個運程中牽連到很多部件的運作,包括GPU編譯器、GPU驅動程式(Driver)、GPU硬體控制等等,為了加速軟體的開發並讓Nvidia GPU可以廣泛運用各個領域,Nvidia研發了Compute Unified Device Architecture (CUDA),在CUDA架構下,程式開發人員只需對程式碼做微幅的修改,便可以讓程式碼得到GPU加速的支援,而不需去理會GPU編譯器、GPU驅動程式、GPU硬體等底層細節,可以節省程式開發人員很多的時間,加速軟體開發的速度。
3.
Nvidia HPC toolkit
在解決大規模的問題如天氣預報、量子計算、大數據分析時,需要使用非常大的記憶體空間及很多個處理器,此用途中的電腦稱為超級電腦(super computer),通常是以企業或是國家力量支持建立,超級電腦為了降低建置成本,通常使用叢集式電腦架構,也就是把很多台電腦利用網路的方式,組合成一台電腦。而超級電腦的造價通常很高昂,為了讓成本可以快點回收,會讓超級電腦身兼多職,也因此會需要支援多平台的運算。Nvidia HPC toolkit內含了Fortran、C++等語言的編譯器,且都是相容CUDA架構,因此在電腦上安裝了HPC toolkit便可以省下安裝各式各樣語言的編譯器的時間及精力。
4.
OpenMP
對於平行化處理的程式而言,要如何平行化是很重要的事,軟體工程式應該將精力放在平行化程式上,而不是處理和硬體對接的問題,如執行緒的建立、初始化、開始、停止或消毀上,OpenMP為一個應用程式編程介面(Application Programming Interface,API),可以讓與硬體對接的平行化處理工作更簡單。
5.
OpenMPI
OpenMP可以幫忙處理複雜的執行緒管理工作,但執行緒之間的溝通仍需要使用執行緒間通訊(Inter Process Communication,IPC)的技術來完成,OpenMPI使用訊息傳遞的方式來達到IPC。
硬體
1.
CPU
中央處理器(Central Processing
Unit,CPU)是現代電腦系統人最核心的元件,負責處理、計算資料,隨著半導體製程技術的進展,CPU的核心數、時脈、功耗都快速上升,代表計算速度快速上升,並且發熱量也快速上升。
2.
Memory
記憶體是現代電腦系統內儲放執行程式的地方,程式及資料平時被放在硬碟中,要被執行時則被傳輸到記憶體中存放,記憶體和CPU之間的數據傳輸速度也會影響程式的執行速度,時脈愈高的記憶體可以達到的最快執行速度也愈高,另外記憶體的大小也決定了可以執行的程式的規模,記憶體空間愈多,可以執行的程式和數據的量也愈多。
3.
GPU
圖形處理器(Graphic Processing
Unit,GPU)是來自於遊戲的產物,要畫出遊戲中的畫面時需要對螢幕上的每一個像素進行渲染(Rendering),計算量非常龐大,若是使用CPU計算的話將會耗上非常多時間,因此有公司發明了專為平行化運算優化的GPU,在GPU內設計了上千個核心,而這些核心可以在同一時間做著相同的運算,可以大幅縮短渲染遊戲畫面所需要的時間。隨著機器學習(Machine Learning)研究的盛行,開始有公司注意到若是對GPU的運算模式稍加修改,即可以用來加速機器學習的程式,在這種模式下運作的GPU被稱為通用目的圖形處理器(General Purpose Graphic Processing Unit,GPGPGU)。之後又被用在科學計算上的用途,在HPC的用途上得到很多的應用。
其中Nvidia製作的GPU又是HPC中軟硬體支援最好的,Nvidia的產品線基本上可以分為桌面主機、筆電、工作站、行動工作站、資料中心。資料中心GPU的主要架構依年代來分依次為Tesla、Fermi、Kepler、Maxwell、Pascal、Volta、Turing、Ampere、Hopper、Ada Lovelace等架構,
GPU記憶體的使用量在QE中是如何放大的?
GPU記憶體的總量對計算加速是最重要的,因為QE裡的計算需要提高pool的情況下才能明顯加速,但增加pool同時也會增加記憶體使用量。P40具有24GB記憶體是同級中最高,但價格也最貴。
軟體
根據QE的期刊論文表示,目前手QE中的PW、PHonon己經可以使用GPU加速來執行,得力於OpenACC及CUDA技術的支援,在Selene超級電腦中執行Quantum
Espresso可以達到8倍速,並且隨著pool的數量增加還可以再將運算所需時間縮短。不過在筆者的測試環境中使用CPU使用Intel i7 6700,記憶體為16GB,GPU為Nvidia GTX1660 Super,其執行速度甚至比另一台使用CPU執行的機器還要慢,在同一篇QE的論文中其實也提到,GPU記憶體大小決定了可以加速的上限。另一個方法就是使用叢集電腦來增加總體的記憶體空間,但數據在電腦間的傳遞也會限制叢集電腦的速度。
有沒有辦法在較低預算情況下達到同樣的性能?叢集電腦(Cluster)
安裝教學
因為筆者的環境是一台筆電對二台伺服器主機,在伺服器主機安裝完Linux作業系統後,就要來安裝SSH以方便日後的遠端操控。
安裝SSH伺服器
1.
更新系統軟體庫
# sudo apt update
# sudo apt upgrade
2.
找到伺服器的IP位址
# ip a
3.
安裝openssh-server
# sudo apt install openssh-server
4.
對openssh伺服器進行設定
# vi /etc/ssh/sshd_config
將伺服器的port設定成22,並設定要用密碼登入
--Port 22
--PasswordAuthenticaltion yes
5.
重新啓動SSH伺服器
# /etc/init.d/ssh restart
6.
如果想要從遠端連線時不用每次都輸入密碼,可以啓動公私鑰認證
# Ssh-keygen
# Ssh-copy-id -I key_path username@server_ip
環境安裝 -- GPU版本
GPU版本和CPU版本的差異,GPU版本會多出Nvidia驅動程式和HPC SDK的安裝,以及QE安裝時需要對CUDA環境的設計。
安裝Nvidia的GPU驅動程式
# ubuntu-drivers devices
這裡會列出適用電腦上的GPU的驅動程式,安裝寫有Recommend的比較保險,曾經發生安裝別的驅動程式,導致網路卡的驅動程式失效的情況。
# ubuntu-drivers install {driver-version}
安裝Nvidia HPC SDK
首先搜尋Nvidia HPC SDK並找到其下載網址
# Wget https://developer.download.nvidia.com/hpc-$
sdk/23.3/nvhpc_2023_233_Linux_x86_64_cuda_12.0.tar.gz
對下載好的檔案解壓縮
$ tar xpzf
nvhpc_2023_233_Linux_x86_64_cuda_12.0.tar.gz
進到資料夾內並執行安裝指令
$
nvhpc_2023_233_Linux_x86_64_cuda_12.0/install
在安裝完後,程式會提示需要把編譯器的位置加入到環境變數(environmental variable)中,這樣之後才能正常使用編譯器及其相關功能。
把以下指令加入到 bashrc,這樣每次啓動終端機時就會自動執行一次,建議全部使用export 指令來做,HPC SDK建議的指令會失效。
$
MANPATH=$MANPATH:/usr/local/Linux_x86_64/23.3/compilers/man; export MANPATH
$
PATH=/usr/local/Linux_x86_64/23.3/compilers/bin:$PATH; export PATH
$ export PATH=/usr/local/Linux_x86_64/23.3/comm_libs/mpi/bin:$PATH
$ export MANPATH= $MANPATH:/ usr/ local/ Linux_x86_64/
23.3/ comm_libs/ mpi/ man
接著安裝 make, git, red, gawk
# sudo apt install make ,git, red, gawk
接著安裝openMPI,由於在GPU版本中CPU中的執行緒要和GPU的執行緒通訊,因此要安裝cuda-aware的OpenMPI。首先安裝UCX:
$ git clone
https://github.com/openucx/ucx.git ucx
$ cd ucx
$ ./autogen.sh
$ mkdir build
$ cd build
$sudo ../contrib/configure-release --prefix=/usr/local
--with-cuda=/usr/local/Linux_x86_64/23.3/cuda > config_out
$ sudo make -j4
$ sudo make install
$ export LD_LIBRARY_PATH=/usr/local/lib/ucx
– write to the ~/.bashrc
接著安裝OpenMPI
# Wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.5.tar.gz2
# tar -xf openmpi-5.0.5.tar.gz2
# cd openmpi-5.0.5
# Mkdir build-ucx
# cd build-ucx
# ../configure --prefix=/usr/local
--with-cuda=/usr/local/Linux_x86_64/23.3/cuda
# sudo make -j4
# sudo make install
最後安裝QE
# wget https://www.quantum-espresso.org/rdm-download/488/v7-3-1/e7a7fa75f7bce8bec62816aab96ac325/qe-7.3.1-ReleasePack.tar.gz
# tar -xzvf qe-7.3.1-ReleasePack.tar.gz
# cd qe-7.3.1
在安裝之前要先確認CUDA版本及驅動程式版本
# Nvaccelinfo: get driver version, and ccXX
Driver version = runtime version,
# ./configure --enable-openmp
--with-cuda-mpi=true --with-cuda=/usr/local/Linux_x86_64/2023/cuda --with-cuda-cc=75
--with-cuda-runtime=12.0.
# make all
接著進行測試
# cd test-suites/
# make run-test-pw
為了確認QE真的在GPU上運行,要觀察在GPU上的執行緒
# nvidia-smi -l
如果真的有成功運行的話就會像下面的畫面
留言
張貼留言