---
# System prepended metadata

title: HPL叢集測試

---

# HPL叢集測試
我們在2023年8月參加了國網中心的HiPAC競賽，為了下次比賽及後輩的培養，就有了這個筆記。我們會使用國網中心的虛擬運算資源進行HPL的安裝，並在之後利用叢集進行Wien2k的計算。
## 我們會用的硬體及系統
- Ubuntu 22.04
- CPU: Intel Xeon 61系列 vCPU
- GPU: NVIDIA V100

## 會裝的程式
依據我們的經驗，只要牽扯到GPU的東西，全部自己編譯比較好
- Nvidia CUDA 11.2 with GPU driver 460 
- OpenMPI 4.0.7
- Intel MKL 2023.2.0
- CUDA Accelerated Linpack

## 申請TWCC帳號
進到 twcc.ai 按右上角"註冊"
\
![](https://hackmd.io/_uploads/SJFBG_N2n.png)
\
按"同意"
\
![](https://hackmd.io/_uploads/r1MDzONn3.png)
\
輸入email帳號，建議用Google的
\
![](https://hackmd.io/_uploads/r11YGOE33.png)
\
在下一個頁面，按"連結Google帳號登入"
\
![](https://hackmd.io/_uploads/B1T9zON32.png)
\
選擇剛剛填入的gmail帳號
\
![](https://hackmd.io/_uploads/r1S0GO433.png)
\
接下來可以看到他已連結google帳號，填完這些基本資料後就可以按下一頁
\
![](https://hackmd.io/_uploads/BJ6Z7dN33.png)
\
接下來是主機帳號資料，這個帳號密碼會是你連入台灣衫主機的帳號密碼和容器的帳號密碼(虛擬運算不是)。
\
![](https://hackmd.io/_uploads/r15_mOE23.png)

## 使用虛擬運算
我們使用國網中心的虛擬運算服務當作我們模擬HPC競賽的環境，虛擬運算就是一個空的系統給你操作。要注意的是使用這個服務需要計畫的管理員開啟"虛擬網路"。
在首頁，按"服務列表"，選擇"虛擬運算"
\
![](https://hackmd.io/_uploads/HkOlV_Eh3.png)
\
接著按下"建立"或是"建立虛擬運算個體"
\
![](https://hackmd.io/_uploads/Skj84_Nh3.png)
\
為了模擬比賽環境，我們選擇Ubuntu系統
\
![](https://hackmd.io/_uploads/S1AuVdV32.png)
\
接下來選擇容器規格，可以改"名稱"，然後要選擇需要多少CPU及GPU，我們這裡選vgx.2xsuper。
\
![](https://hackmd.io/_uploads/SyslLOVnh.png)
\
接著要配網路，這裡如果管理員沒開虛擬網路就會卡住，建議如果有多台主機，可以只開一台有浮動公共ip，其他台用這台有公共ip的連進去。
\
![](https://hackmd.io/_uploads/HJhVUdNhn.png)
\
接著檢查環境是否有問題，沒問題就可以按"建立"了
\
![](https://hackmd.io/_uploads/r1UlvOVh2.png)
\
如果要模擬叢集計算的話，需要至少兩台主機，就照著剛剛的方法重複就行了。建立完會看到這個畫面。
\
![](https://hackmd.io/_uploads/SJx_P_4n2.png)
\
接著要來看怎麼連入機器，點進去那個虛擬運算資源，等到他變ready之後，往下滑在網路與連線區塊的Console會有一個"連線"可以按
\
![](https://hackmd.io/_uploads/SJjz_uVn3.png)
\
按下去會看到一個console跳出來叫你登入，登入名稱叫做`ubuntu`。
![](https://hackmd.io/_uploads/SyJlY_4h2.png)

接著你要建立一個夠安全的密碼，建立完之後就可以開始使用終端機了

![](https://hackmd.io/_uploads/ryzBY_422.png)

## SSH連入設定
為了之後的方便，我們會修改主機名稱，這裡自動生成的主機名稱都落落長，像這裡就是`1691725176393-3834967-iaas`，根本記不起來，所以我們把有公共網路的叫做pca1，如果還有剩下的就叫做pca2, pca3,...
```bash
sudo hostnamectl set-hostname pca1
```
第一次在一個登入階段使用sudo權限都會叫你輸入密碼，輸入完之後就可以執行下一個指令。只是輸入完之後名字還是很長，這是因為要重新登入。
```bash
exit 
```
這樣重新登入回去應該就會看到主機名稱變成pca1了

接下來我們要用自己電腦上的ssh登入pca1和pca2，只是ssh預設不會給別人用密碼登入，所以要先改它的設定，這裡是使用nano編輯器，用其他編輯器也可以。
```bash
sudo nano /etc/ssh/sshd_config
```
接著找到有一行寫著
```
PasswordAuthentication no
```
把它改成
```
PasswordAuthentication yes
```
接著按`ctrl+s`再按`ctrl+x`就可以保存並退出編輯器。
弄完之後輸入重啟SSH的指令。
```bash
sudo service ssh restart
```
這樣就可以用自己的電腦終端機連入國網的主機了。不過我們還有一些東西要知道，就是這些主機的ip。要找公共ip，要去國網中心的個體詳細資料找。

![](https://hackmd.io/_uploads/HJVxZFN32.png)

接著要知道兩台主機的內網ip
```bash
hostname -I
```
所以這裡可以整理出以下ip表:
- pca1 公共ip: `203.145.220.93`
- pca1 內網ip: `192.168.211.8`
- pca2 內網ip: `192.168.211.9`

這樣就可以透過電腦上的ssh連入pca1
```bash
ssh ubuntu@203.145.220.93
```
輸入密碼之後就可以操控pca1了，要操控pca2也是一樣先連進去pca1，再用內網連到pca2
```bash
ssh ubuntu@203.145.220.93
<輸入密碼>
ssh ubuntu@192.168.211.9
<輸入密碼>
```
第一次連入他會跳出說"你沒有連過這台機器，你要不要繼續連入，填入yes"

![](https://hackmd.io/_uploads/S1ZLDvp4h2.png)

接著要在兩台主機中，建立ssh登入金鑰，要設定兩主機的無密碼登入
```bash
ssh-keygen
```
接著他叫你輸入東西就一直按"Enter"就行了。按完應該會出現這樣的畫面

![](https://hackmd.io/_uploads/r1HYcO4nh.png)

這個會產生一對公鑰與私鑰配對，接著把他的公鑰直接輸出來看
```bash
cat ~/.ssh/id_rsa.pub
```
這個應該會輸出一個很長一串的東西
```bash
ssh-rsa AAAAB3NzaC1yc2EAAAA......
```
接著將兩個主機的公鑰複製到隨便一個地方，我是放在記事本，記得兩個公鑰之間要換行。

![](https://hackmd.io/_uploads/BJkKQtNhh.png)

接著編輯兩台主機上的authorized_keys

![](https://hackmd.io/_uploads/SJfRQF43n.png)

然後把記事本上的東西貼到檔案後面，如果前面有東西記得換到下一行

![](https://hackmd.io/_uploads/HktxNFEnh.png)

按`ctrl+s`再按`ctrl+x`保存並退出編輯器。
接下來要修改ssh config檔案，這可以讓我們兩主機內部互聯更方便。
![](https://hackmd.io/_uploads/H1OhVF4h2.png)

然後修改以下內容再貼到那個編輯器上
```
Host           pca1           # 代號
Hostname       192.168.211.8  # IP
Port           22             # ssh連入port
User           ubuntu         # 使用者名稱
identityfile   ~/.ssh/id_rsa  # 指定金鑰
```
![](https://hackmd.io/_uploads/BkW2rK4hh.png)

一樣按`ctrl+s`再按`ctrl+x`保存並退出編輯器。
接著你就可以透過簡短的指令在兩主機間互聯。
```bash
ssh pca2
```
## 使用pdsh同步執行指令
pdsh是可以同步在兩台主機執行同樣指令的東西，要先安裝好
```bash
sudo apt install pdsh
```
pdsh內建會用rsh連線，我們把它改成ssh連線。
```bash
echo "export PDSH_RCMD_TYPE=ssh" >> ~/.bashrc
source ~/.bashrc
```
接著就可以透過pdsh進行同步指令。
```bash
pdsh -w pca[1-2] "echo hello"
```
會出現
```
pca1: hello
pca2: hello
```
> [name=TWTom]如果出現問題，可以試著先用`ssh pca1`和`ssh pca2`看有沒有問題

如果要做一個別名也可以
```bash
echo 'alias prr="pdsh -w pca[1-2]"' >> ~/.bashrc
source ~/.bashrc
```
這樣就可以透過`prr`進行同步指令
```bash
prr "echo hello"
```
pdsh如果要用到sudo，必須要用`sudo -S`，例如你要更新apt
```bash
prr "echo yourpassword | sudo -S apt update"
```
也可以乾脆用一個函式解決這個問題
```bash
echo 'function sudoprr () { pdsh -w pca[1-2] "echo yourpassword | sudo -S sh -c '\''$1'\''"; }' >> ~/.bashrc
source ~/.bashrc
```
之後就可以用`sudoprr "command"`來平行執行sudo指令了

## 使用sftp傳檔案
sftp可以在兩個節點間傳輸檔案，要連線到另一個地方，可以這樣
```
sftp pca2
```
如果要在pca1拿到pca2的資料，可以用以下指令
```
sftp> get thing.txt
```
如果要傳資料過去，可以這樣
```
sftp> put thing.txt
```
如果要傳輸的是一個資料夾，只要在`get`或`put`後面加一個`-r`就行了
```
sftp> put things/
sftp> get things/
```
如果要傳/拿的東西不在`~`，可以用`cd`和`lcd`改變位置
```
sftp> cd /home/remote/place
sftp> lcd /home/local/place
```

## NFS檔案共用系統
NFS是共用檔案很方便的工具，裝了NFS，就相當於有了一個共用資料夾，可以在各節點間分享編好的程式碼。我們會把以下資料夾做共用：
- /opt
- /work

然後我們要先在pca1裝NFS server，代表pca1是server，其他是client。
```bash
sudo apt install nfs-kernel-server
```

在共用之前，先在pca1把這些資料夾設定權限，並建立資料夾(每台都要有那個資料夾)
```bash
sudoprr "mkdir /work"
sudo chmod -R 777 /opt
sudo chmod -R 777 /work
```
接著要指定那些人可以使用你的NFS，修改/etc/exports
```bash
sudo nano /etc/exports
```
在最後加上你的規則：
```
# allow all 192.168.x.x
/work              192.168.0.0/16
/opt               192.168.0.0/16
```
這樣會允許所有ip是192.168開頭的裝置存取檔案系統。
然後要將nfs讀到更改並重啟NFS
```bash
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
```
接下來在除了pca1的機器裝NFS client
```bash
sudoprr "apt -y install nfs-common"
```
然後要設定要讀哪些東西，修改`/etc/fstab`
```bash
sudo nano /etc/fstab
```
接著在後面加規則(改掉{NFS SERVER IP})
```bash
{NFS SERVER IP}:/work /work nfs defaults 0 0
{NFS SERVER IP}:/opt /opt nfs defaults 0 0
```
如果不想一台機器一台機器慢慢修改，可以用printf指令輸出多行到一檔案(如果要排除某機器，就不能用sudoprr了，因為有-x引數)
```bash
prr -x pca1 "echo yourpassword | sudo -S sh -c \"printf '{NFS SERVER IP}:/work /work nfs defaults 0 0\n{NFS SERVER IP}:/opt /opt nfs defaults 0 0' >> /etc/fstab\""
```
接下來要mount client和remote位置
```bash
prr -x pca1 "echo yourpassword | sudo -S mount -t /work"
prr -x pca1 "echo yourpassword | sudo -S mount -t {NFS_SERVER_IP}/work"
prr -x pca1 "echo yourpassword | sudo -S mount -t /opt"
prr -x pca1 "echo yourpassword | sudo -S mount -t {NFS_SERVER_IP}/opt"
```
這樣裝程式在/opt裡面就可以自動裝在每台主機上了，然後要平行執行的程式可以放在/work就不用一直複製來複製去了


## 裝NVIDIA driver and CUDA
進到 https://www.nvidia.com/Download/index.aspx 這個網站，裡面選擇需要的驅動程式

![](https://hackmd.io/_uploads/BJufCTVh3.png)

接著按下Download之後對Agree&Download按複製連結網址

![](https://hackmd.io/_uploads/HyAQy0N33.png)


然後到pca1上下載
```bash
wget https://us.download.nvidia.com/tesla/460.106.00/NVIDIA-Linux-x86_64-460.106.00.run
```

記得要先裝他的dependency
```bash
sudo apt-get install build-essential gcc-multilib dkms
```
接著要把Nouveau Driver列入黑名單
```bash
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
```
輸入以下文字
```text
blacklist nouveau
options nouveau modeset=0
```
再更新kernel並重啟主機
```bash
sudo update-initramfs -u
sudo reboot
```
等他重開完連回去，再使用安裝指令。
```bash
sudo apt-get install linux-headers-$(uname -r)
sudo sh NVIDIA-Linux-x86_64-460.106.00.run --no-cc-version-check
```
裡面會問一些問題，遇到按鈕就按OK/Yes之類的就行了。

接著要裝CUDA，進到 https://developer.nvidia.com/cuda-toolkit-archive 這個網站，可以選擇需要的CUDA版本。這裡選擇CUDA Toolkit 11.2.0。

![CUDA Toolkit Archive](https://hackmd.io/_uploads/r1aF0DNn2.png)

接著要選擇系統環境，在HiPAC競賽我們使用的是x86_64架構、Ubuntu 22.04，但是這樣選下來發現奇怪，沒有22.04。這沒關係，選擇20.04(其實哪個版本應該都沒差)的`runfile(local)`照樣能跑。

![選擇runfile](https://hackmd.io/_uploads/r1yV-dNn2.png)
最下面會出現安裝需要的指令
```bash
wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
sudo sh cuda_11.2.0_460.27.04_linux.run
```
如果要平行執行指令可以先用sftp把`.run`檔案拉過去另一台主機或放到`/work`，再用另一台主機執行`sudo sh cuda_11.2.0_460.27.04_linux.run`
> [name=TWTom]如果出現`Failed to verify gcc version.`，試試看改變指令變成`sudo sh cuda_11.2.0_460.27.04_linux.run --override`

過程中會問你要不要接受EULA條款，就accept就行了，記得不要裝這裡的driver

![](https://hackmd.io/_uploads/r1HDQAN3h.png)

接著他會秀出summary

![](https://hackmd.io/_uploads/Hy0-NRVn3.png)

他說要更新一些環境變數
```bash
echo "PATH=/usr/local/cuda-11.2/bin:$PATH" >> ~/.bashrc
echo "LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
sudo sh -c 'echo "/usr/local/cuda-11.2/lib64" >> /etc/ld.so.conf'
sudo ldconfig
```
接著測試有沒有裝好
```bash
nvidia-smi
nvcc -V
```
![](https://hackmd.io/_uploads/S1xnrRV32.png)

## 裝Intel MKL
進入 https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-download.html 裡面，選擇Linux的Offline Installer

![](https://hackmd.io/_uploads/rJiBF2Vnh.png)

往下滑會看到一個Command Line Download

![](https://hackmd.io/_uploads/SyhmY3Eh3.png)

```bash
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/adb8a02c-4ee7-4882-97d6-a524150da358/l_onemkl_p_2023.2.0.49497_offline.sh
sudo sh ./l_onemkl_p_2023.2.0.49497_offline.sh
```
它過程中會問一些問題，就同意就好，如果那個個資不同意送出也可以。
安裝後要把intel MKL的動態連結庫連結好(每台都要)。
```bash
sudo sh -c "echo '/opt/intel/oneapi/mkl/2023.2.0/lib/intel64' >> /etc/ld.so.conf"
sudo ldconfig
```
接著把oneAPI的變數設定好
```bash
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bashrc
source ~/.bashrc
```

## 裝OpenMPI
進入 https://www.open-mpi.org/software/ompi/ 找到4.0.7版本，然後複製連結網址。
![](https://hackmd.io/_uploads/BkpMJTVhh.png)

接著連到pca1，把剛剛那個網址的東西抓到國網主機上並解壓縮:
```bash
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.7.tar.gz
tar zxf openmpi-4.0.7.tar.gz
```
接著可以直接安裝，因為是裝在opt內，所以只要裝一次，每台都會裝好。
```bash
cd openmpi-4.0.7
./configure --prefix=/opt/openmpi
make
sudo make install
```
接著把環境變數設好(每台都要設)，測試看看mpirun有沒有裝好
```bash
echo "PATH=/opt/openmpi/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
mpirun --version
```
![](https://hackmd.io/_uploads/rJFRreBh2.png)

接著要設定`/etc/profile`(每台都要)
```bash
sudo sh -c "echo 'source /home/ubuntu/.bashrc' >> /etc/profile"
```

接著設定hostfile
```bash
nano ~/hostfile
```
在裡面新增每個節點的資訊，slots代表有多少GPU在那個節點上。
```
pca1 slots=2
pca2 slots=2
```

## 裝HPL GPU
進入 https://developer.nvidia.com/computeworks-developer-exclusive-downloads 找到CUDA Accelerated Linpack，把它下載下來。
![](https://hackmd.io/_uploads/HJxWX6V33.png)
接著用sftp連到pca1的公開ip，把檔案傳過去，再解壓縮並修改一些東西。
```bash
tar zxf hpl-2.0_FERMI_v15.tgz
cd hpl-2.0_FERMI_v15
nano Make.CUDA
```
Make.CUDA要改以下東西
```text
TOPdir = /work/hpl-2.0_FERMI_v15
LAdir = /opt/intel/oneapi/mkl/2023.2.0/lib/intel64
LAinc = -I/opt/intel/oneapi/mkl/2023.2.0/include
CC = /opt/openmpi/bin/mpicc
LINKFLAGS = $(CCFLAGS) -Wl,-rpath $(TOPdir)/hpl-2.0_FERMI_v15/src/cuda:/opt/intel/oneapi/mkl/2023.2.0/lib/intel64:/opt/openmpi/lib:/opt/intel/oneapi/compiler/2023.2.0/linux/compiler/lib/intel64_lin
```
> [name=TWTom]如果遇到```crt1.o: In function `_start': - undefined reference to `main' in Linux```要重新檢查LINKFLAGS有沒有複製錯

因為這個是HPL 2.0，所以他不支援OpenMPI 3.0以上的版本，要改一些原始碼
```bash
nano src/comm/HPL_packL.c
```
第172 186 200行原本 MPI_Address要改成MPI_Get_address
第211行原本 MPI_Type_struct要改成MPI_Type_create_struct

接著要新增一個軟連結
```bash
sudo ln -s /opt/intel/oneapi/compiler/2023.2.0/linux/compiler/lib/intel64_lin/libiomp5.so /opt/intel/oneapi/mkl/2023.2.0/lib/intel64/libiomp5.so
```
最後就可以編譯了
```bash
make arch=CUDA
```
如果成功會在`bin/CUDA`產生一個叫做xhpl的檔案。
接著要修改bin/CUDA/HPL.dat檔案
```bash
nano bin/CUDA/HPL.dat
```
調整以下參數，注意這裡Ps\*Qs應該要等於GPU的數量
```
100000 Ns  # line 6
512    NB  # line 8
1      Ps  # line 11
1      Qs  # line 12
0      U   # line 29
```
最後修改bin/CUDA/run_linpack檔案
```bash
nano bin/CUDA/HPL.dat
```
修改以下東西
```text
HPL_DIR=/home/ubuntu/hpl-2.0_FERMI_v15  # line 4
/opt/openmpi/bin/mpirun -np 1 $HPL_DIR/bin/CUDA/xhpl  # line 27
```
注意這裡np的數量應該要是GPU的數量。接著要把hpl-2.0_FERMI_v15/src/cuda加入LD_LIBRARY_PATH
```
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/work/hpl-2.0_FERMI_v15/src/cuda" >> ~/.bashrc
source ~/.bashrc
```
經過此番調整，就可以開始跑了，如果要跑在叢集上，要把這整個資料夾複製到各個節點同個位置上，或是直接放在共用資料夾也可以。
> [name=TWTom] 這裡一定要在bin/CUDA裡執行，建議使用tmux或screen以防ssh斷掉
```bash
cd ./bin/CUDA/
./run_linpack
```
> [name=TWTom] 如果出現`Failed to cudaHostRegister pinned memory`，N太大了。如果出現奇怪的錯誤，可以改改看/etc/environment

最後會輸出像這樣的東西
```text
================================================================================
HPLinpack 2.0  --  High-Performance Linpack benchmark  --   September 10, 2008
Written by A. Petitet and R. Clint Whaley,  Innovative Computing Laboratory, UTK
Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK
Modified by Julien Langou, University of Colorado Denver
================================================================================

An explanation of the input/output parameters follows:
T/V    : Wall time / encoded variant.
N      : The order of the coefficient matrix A.
NB     : The partitioning blocking factor.
P      : The number of process rows.
Q      : The number of process columns.
Time   : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.

The following parameter values will be used:

N      :   12000
NB     :     512
PMAP   : Row-major process mapping
P      :       1
Q      :       1
PFACT  :    Left
NBMIN  :       2
NDIV   :       2
RFACT  :    Left
BCAST  :   1ring
DEPTH  :       1
SWAP   : Spread-roll (long)
L1     : no-transposed form
U      : transposed form
EQUIL  : yes
ALIGN  : 8 double precision words

--------------------------------------------------------------------------------

- The matrix A is randomly generated for each test.
- The following scaled residual check will be computed:
      ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
- The relative machine precision (eps) is taken to be               1.110223e-16
- Computational tests pass if scaled residuals are less than                16.0

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR10L2L2       12000   512     1     1               4.14              2.783e+02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0060443 ...... PASSED
================================================================================

Finished      1 tests with the following results:
              1 tests completed and passed residual checks,
              0 tests completed and failed residual checks,
              0 tests skipped because of illegal input values.
--------------------------------------------------------------------------------

End of Tests.
================================================================================
```
這樣就可以知道這個叢集跑HPL的速度是278.3 Gflops左右，換一個參數跑可以跑到1678Gflops
```text
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR10L2L2      100000   512     1     2             397.19              1.678e+03
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0031194 ...... PASSED
================================================================================

Finished      1 tests with the following results:
              1 tests completed and passed residual checks,
              0 tests completed and failed residual checks,
              0 tests skipped because of illegal input values.
--------------------------------------------------------------------------------

End of Tests.
================================================================================
```

## Wien2k套件安裝
首先要裝他的dependency
```bash
sudo apt -y install tcsh libfftw3-dev xpdf
```
下載Wien2k套件檔，請自行輸入帳號密碼，這裡是用23.2版本，注意下載完應該有4個檔案

![](https://hackmd.io/_uploads/rk75I8U23.png)

接下來就可以來解壓縮這些程式
```bash
tar vxf WIEN2k_23.2.tar
gunzip *.gz
./expand_lapw
```
然後要安裝intel的ifort編譯程式
```bash
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/0d65c8d4-f245-4756-80c4-6712b43cf835/l_fortran-compiler_p_2023.2.1.8_offline.sh
sudo sh l_fortran-compiler_p_2023.2.1.8_offline.sh
source ~/.bashrc  # 如果你有把setvars.sh加進.bashrc就只須執行這行
```
接著來編譯程式
```bash
./siteconfig_lapw
```
就把該設定的設定一下就行了，接下來就在主頁面按R就可以開始編譯了。只要沒有Error之類的東西出現就沒問題了。
![](https://hackmd.io/_uploads/Skb8nEw32.png)
裝一些其他必要的

## Wien2k with Singularity





