使用 Conda 管理套件與執行 Job
本文是關於 TWSC 台灣杉二號 (命令列介面) 安裝的套件管理工具 Miniconda 說明,以及教學如何使用 Conda 創立虛擬環境,安裝套件,並提交 Job。
Minoconda 簡介
Miniconda 為 Python 環境管理平台,囊括多種 Python 套件,並使用 Conda 作為軟體套件管理器。
使用 Miniconda 可省去一一下載 Python 套件的麻煩,使用簡單的 Conda 指令即可將套件安裝完成,並能切換至指定的虛擬環境,使用不同版本的 Python,解決多版本的相容問題。
更新規劃說明
由於套件管理工具 Conda 修正 bugs 頻繁,近期修正皆已大幅提升使用體驗。
為了加速讓 TWSC 用戶使用新版工具,經多方測試後,TWSC 將會持續更新 Miniconda (Conda 最小化版本),並已移除 Anaconda。
用戶仍可自行安裝 Anaconda 在自己的 /home/$USER
或/work/$USER
目錄之下)。
重新設計 modulefile
一般使用 Aanaconda / Miniconda 皆會使用 conda init
設定環境,此時 Conda 將會更動使用者的 ~/.bashrc
新增如下面內容。
# >>> conda initialize >>>
...
...
# <<< conda initialize <<<
對於初接觸 Linux 系統或 Conda 的用戶,並非友善之設計。當不再使用 Conda 時,有可能因忘記移除在 ~/.bashrc
的 Conda 參數,造成 Conda 環境影響其他操作。
因此,TWSC 將透過重新撰寫新版 modulefile 的方式,使用 module load miniconda2
或 module load miniconda3
時,將會自動啟動上述參數;當 module purge
時,則將會自動移除這些環境變數。如此一來,可避免讓 Conda 更動用戶的~/.bashrc
,也能正確使用 Conda,還給使用者單純的環境。
如何使用 Miniconda ?
- 透過
module load miniconda2
/module load miniconda3
載入 conda 環境。 - 透過
module purge
即可卸載 conda 環境。 - 由於上述原因,使用前建議移除之前使用 Conda 產生的 conda initialize 內容 (移除指令
conda init --reverse
)。
- miniconda2:預設使用 Python 2 環境
- miniconda3:預設使用 Python 3 環境
請參考以下操作範例。
Conda 操作範例
以下範例將在使用 Conda 創立一個虛擬環境,並安裝支援 GPU 運算的 TensorFlow,再透過 Slurm 資源調度管理系統,撰寫 job script 依需求索取資源、Queue 排程,並提交計算工作。
Step 1. 載入 Conda 並建立虛擬環境
# 清除 module 確保環境乾淨
module purge
# 載入 Conda 環境,以預設 python3 的 miniconda3 為範例
module load miniconda3
# 由於 TWSC 設計的 miniconda module,會自動初始化環境變數,不需要再 conda init。
# 建議移除之前 conda init 產生的內容
conda init --reverse
# 創立 Conda 虛擬環境 (範例名稱為 mytf_gpu),並安裝 Anaconda 公司已打包好的 tensorflow-gpu。
# 該環境已經包含 CUDA 和 cuDNN,無須再自行安裝
conda create --name mytf_gpu tensorflow-gpu
# 進入此虛擬環境
conda activate mytf_gpu
tensorflow-gpu,目前預設安裝 2.2 版。
- 可指定安裝版本 1 或 2,例如 1.15.0 版本的 tensorflow-gpu 則使用
conda create --name mytf_gpu tensorflow-gpu=1.15.0
- 其他版本可以參考 版本列表。
離開以及刪除虛擬環境
# 離開 mytf_gpu 虛擬環境
conda deactivate
# 刪除 mytf_gpu 虛擬環境檔案
conda remove --name mytf_gpu --all
離開 Conda
# 卸載所有已載入的 module
module purge
# 或者,僅卸載 miniconda
module unload miniconda3
刪除 Conda 殘留檔案
# 當不再使用 Conda,刪除殘留 Conda 安裝檔/設定檔 (請小心使用,請確定此路徑無需要檔案再使用)
# 先檢查此路徑檔案內容 (通常只有 ~/.conda)
ls ~/.condarc ~/.conda ~/.continuum
# 再刪除檔案
rm -rf ~/.condarc ~/.conda ~/.continuum
Step 2. Slurm job script with Conda
當您準備好 Conda 環境與計算程式後,請按照以下步驟,透過 Slurm 資源調度管理系統,撰寫 job script 依需求索取資源、Queue 排程,並提交計算工作。
.sh
檔案為 Slurm 將提交運算的 Job script,內容分為「兩大部分」:
- Job、計畫、資源資訊:job 名稱、節點數量、每節點運行的任務數、每節點的 GPU 數量、job 最長的運行時間、計畫 ID、Queue 名稱。
- Job 執行的內容
撰寫以下內容,並使用上述步驟創立的 mytf_gpu
虛擬環境。
執行以下編輯指令 > 按下i > 將範例內容複製並貼上 > 按下ESC > 輸入:wq!
存檔離開,即完成 Job script!
vim <FILE_NAME>.sh
您可使用習慣的編輯器撰寫 .sh
檔案,範例採用 vim 操作。
- TensorFlow 2 with 1 node / 8GPUs
#!/bin/bash
#SBATCH --job-name=Hello_TWCC ## job name
#SBATCH --nodes=1 ## 索取 1 節點
#SBATCH --cpus-per-task=32 ## 該 task 索取 32 CPUs
#SBATCH --gres=gpu:8 ## 每個節點索取 8 GPUs
#SBATCH --time=00:10:00 ## 最長跑 10 分鐘 (測試完這邊記得改掉,或是直接刪除該行)
#SBATCH --account=PROJECT_ID ## PROJECT_ID 請填入計畫ID(ex: MST108XXX),扣款也會根據此計畫ID
#SBATCH --partition=gtest ## gtest 為測試用 queue,後續測試完可改 gp1d(最長跑1天)、gp2d(最長跑2天)、p4d(最長跑4天)
module purge
module load miniconda3
conda activate mytf_gpu
# 大部分使用 conda 用戶,程式並沒有透過 MPI 溝通
# 應不需要再添加 srun/mpirun,直接加上需要運行的指令即可
python $(your command)
- 於腳本檔頭增加以下內容,可以增設 email 取得 Job 狀態的通知:
#SBATCH --mail-type=ALL
#SBATCH --mail-user=$Your_email - 索取資源的比例,將依您指定的 GPU 數量,並依 1 GPU: 4 CPU: 90 GB Memory 比例分配。
例:
索取 1 GPU,會自動配置 4 CPU cores、90 GB Memory 索取 8 GPU,會自動配置 32 CPU cores、720 GB Memory
- 請勿指定使用特定運算節點,系統將會自動分配運算資源。
- 更多 Queue 資訊,請參考 Queue 與計算資源使用說明。
提交 Job
sbatch <FILE_NAME>.sh
提交完成後,將顯示系統派發的 Job ID。
查看和取消
- 開始計算後,可使用以下指令查看 log
tail -f slurm_<JOB_ID>.out
其他常用指令如下,更多指令請參考 Slurm指令:
- 使用
squeue -u $USER
:查看正在運行的 job - 使用
sacct -X
:查看今日運行的 job 及狀態,確認是否還在運行或已結束。
- 取消正在運行的 Job。若想停止正在執行的 job,請執行此指令:
scancel <JOB_ID>