一般的超算的拓撲結構是若干個登陸節點+若干個交換機+大量計算CPU節點+大量GPU計算節點+一個(或若干個)存儲節點+管理節點。
其中存儲節點的共享存儲可以被所有節點訪問。
一般運作方式是,如果我的計算依賴非常共性的軟體,我可以找超算管理員安裝,使用的時候可以通過module load來初始化自己所需軟體。
已有共性軟體如下:
Vasp和Gaussian是算力消耗的大頭,但是超算用戶覆蓋幾十個學院的幾百個方向,不可能面面俱到,把所有人需要的軟體都裝在/opt 也是不現實的。
所以如果我的計算依賴的是比較小眾的軟體,那麼我可以把軟體安裝在共享存儲上,在程序運行的時候可以訪問共享存儲調用相關文件運行。
這裡就會出問題了,安裝軟體的時候我是在登陸節點訪問存儲節點,一般來說登陸節點無需強算力沒有GPU,但是軟體在安裝過程中會通過獲取當前設備的硬體信息來來決定安裝版本,比如PyTorch,在運行
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
官方安裝命令的時候,如果本機沒有英偉達GPU,則會默認安裝CPU-only版本的pytorch。
在官方repo下也有一個issue是請求安裝cuda版本但是只裝上了CPU-only版本
雖然已經closed,但是我仍然遇到了類似的問題:
猜測是安裝過程中通過硬體來決定版本,而且在安裝命令中無法強制聲明安裝cuda版本的pytorch而非CPU-only版本。
思來想去,想出一個辦法,重新開個新的env,提交一個「計算」任務,申請一個cpu線程,一張顯卡,來運行安裝程序。
以下是slurm提交「算例」的腳本:
#!/bin/sh
# script for software install
#SBATCH -J torch_install
#SBATCH -o job-%j.log
#SBATCH -e job-%j.err
#SBATCH -N 1 --ntasks-per-node=1 -p GPU-V100 --gres=gpu:v100:1
echo Time is `date`
echo Directory is $PWD
echo This job runs on the following nodes:
echo $SLURM_JOB_NODELIST
echo This job has allocated $SLURM_JOB_CPUS_PER_NODE cpu cores.
source /home/ess/pjzhang/conda_start.sh
conda create --name torch15gpu
conda activate torch15gpu
# activate the enviroment
module load cuda/10.2.89
# load cuda env
conda install pytorch==1.5.0 cudatoolkit=10.2 -c pytorch
# install GPU-based dependency
echo End at `date`
# for the measure of the running time of the
安裝花不了多長時間,而且只用一核,所以機時費可以忽略不計。
這樣conda install pytorch的時候就可以檢測到GPU就可以安裝正常版本了。
然後就可以運行真正的算例了,提交之後隨便找個節點login進去看看狀態:
還行。
能自己搞定就不麻煩管理員了。
#職人請回答##硬核新知派##有意思博士#