--- tags: Guide, TWNIA2, ZH title: Module 概觀 | zh GA: UA-155999456-1 --- {%hackmd @docsharedstyle/default %} {%hackmd @docsharedstyle/twccheader-zh %} # Module 概觀 ## 環境變數管理工具 在 HPC 使用情境中,當編譯 (compile) 或是執行應用程式時,常會有複雜的工具或函式庫 (library) 之間的相依性,因此常使用 Module 作為管理環境變數 (environment variable) 的工具,方便您在不同的工具間轉換環境變數。 使用 Module 後,您可輕鬆切換,無需再使用 `export` 指令切換環境變數以使用特定軟體套件、工具函式庫,且不需要再透過 `unset` 移除環境變數,只要使用 `module purge` 以一個指令即可完全清除。 :::info {%hackmd @docsharedstyle/note-zh %} HPC 管理環境變數的工具,最常見是使用 `modules` 的方式管理,傳統如台灣杉一號使用的 [<ins>Environment Modules</ins>](http://modules.sourceforge.net)。而在台灣杉二號使用 [<ins>Lmod</ins>](https://lmod.readthedocs.io)。兩者的使用方法雷同,僅背後實踐的程式語言有差異。 ::: ## Module 基本指令 - 列出可使用的 modules `module avail` - 列出已套用的 modules `module list` - 查看 modules 的說明 `module whatis package1 package2 ...` - 套用指定的 `module load package1 package2 ...` - 移除指定的 modules `module unload package1 package2 ...` - 移除全部的 modules `module purge` :::warning {%hackmd @docsharedstyle/tip-zh %} 您可以使用 **`ml`** 取代上述 `module` 的指令,以下列舉幾項簡短的使用方式: - 列出可使用的 modules `ml av` - 套用指定的 modules `ml package1 package2 ...` - 移除指定的 modules `ml -package1 -package2 ...` ::: ## Module 基本觀念 - 採用階層式的設計,要先 load 一個 module 後,才能看到下一層相依的 module,避免搭配錯相依套件 - 舉例來說,要先 `ml cuda/11.3` 後,才能看到和 `cuda/11.3` 編譯相依的 `openmpi4/4.1.1`;載入 `openmpi4/4.1.1`後,才能看到和 `openmpi4/4.1.1` 編譯相依的 `fftw3/3.3.9` - 上述例子可以如下使用: ```bash # 卸載全部 module ml purge # 載入指定 module ml cuda/11.3 openmpi4/4.1.1 fftw3/3.3.9 ```