MPI slot Error: when make check install for hdf5

在 ./configure NetCDF4-c-4.7.3 時跳出這段訊息

image.png

於是安裝了zlib-1.2.11在$APPROOT/opt/zlib-1.2.11中,

有照網路的方法把路徑加入LD_LIBRARY_PATH和PKG_CONFIG_PATH

image.png

還有load看看modules裡的跟zlib有關的module (是不是我在亂搞…)

也有參考INSTALL.md裡的步驟,重新./configure hdf5 加上–with-zlib=$APPROOT/opt/zlib-1.2.11-t 在後面,不過make check install的時候就報錯了

image.png

以下是INSTALL.md的內容:

image.png

此外,他也有提到一些requirements的版本,但我發現好像都高於hackmd要我們安裝的版本耶…

image.png

做了以上這些,但問題還是沒有改善

還是其實我的方向根本就是錯的呢…?

麻煩助教解答了,謝謝助教!

同學好,

你的方向是正確的!

我們也對 hdf5 做了 make check,你遇到的錯誤應該為 mpirun 說 slots 不足:

(下次貼出錯誤訊息時請貼出關鍵的部分,或是貼出完整的錯誤訊息,我們才能了解你遇到了什麼狀況)

在 make check 時,會在你的環境對剛剛編譯好的程式執行一些預先寫好的測試,而其中的測試就包含使用 MPI 做平行的操作,而這個測試預設使用 6 個 process (rank), 但由於我們的虛擬機只有 4 個 core, 所以 OpenMPI 回報了錯誤訊息說可用的 slots 不足,而讓此測試失敗。

你可以選擇:

  1. 忽略此問題

由於程式已經編譯成功了,而且經過了解之後,發現此測試的錯誤並不是程式本身造成的問題。
我們可以選擇相信程式本身是能正常運作的。

  1. 讓 OpenMPI oversubscribe

可以使用 OMPI_MCA_rmaps_base_oversubscribe=1 這個環境變數讓 OpenMPI 忽略 slots 數量不足的問題。

  1. 修改 Makefile

從錯誤訊息可知,發生錯誤的 Makefile 為 /home/taro/wrf-hw/build/hdf5-1.8.21/testpar/Makefile

可以發現在 564 行,執行 MPI 的指令為 mpiexec -n $${NPROCS:=6}, 但環境變數 $(NPROCS) 是空的,所以使用預設的 6 作為 process 數量。
我們可以設定 NPROCS=4 或是直接將指令改為 mpiexec -n 4 來解決這個問題。

此外,還有幾點可以留意:

  • 在設定環境變數時,需要使用 export,環境變數才會被傳入執行的程式中。(export LD_LIBRARY_PATH=xxx)

  • 我們提供的 modulefiles 裡面有 zlib-1.2.11-t,可以看到裡面的 prefix 是設定在 ~/wrf-hw/opt/zlib-1.2.11,因此你將 zlib 裝在這個路徑的做法是正確的!但是你可能想得太複雜了,應該只需要做以下步驟就能使用 zlib:

      1. 下載 zlib-1.2.11, 設定 prefix 為 $APPROOT/opt/zlib-1.2.11 並編譯、安裝
      1. module load zlib-1.2.11-t
      • module 就會幫你設定 LD_LIBRARY_PATH 等環境變數了
  • 關於版本,通常會遵循 SemVer, 主要的版本格式為 主版號.次版號.修訂號,數值越大版本越新(如:1.11.0 新於 1.10.0 新於 1.9.1),並不是看第一位數字!

    • 我們的 HDF-5 使用的版本為 1.8.21, 新於 1.8.9, 因此符合要求
    • Zlib 使用 1.2.11, 新於 1.2.5, 因此也符合要求
    • 系統的 curl 為 7.81.0, 新於 7.18.0, 因此可以使用

所以基本上你一直都是沒有問題的!只是 HDF-5 的測試腳本寫壞,讓 process 數量大於 CPU core 的數量,被 OpenMPI 阻止了。
你可以繼續編譯 pNetCDF 和 NetCDF!