有一定的GPU雲時常可用,一個節點4個GPU,我本人決定使用anaconda搭建tensorflow1.13並且使用。
anaconda是乙方提供的,使用bash命令可以加載
module load anaconda/3.7
加載後正常使用create命令建立環境
詳情見我所有conda標誌的博客,其實就是下面一句代碼,看明白就不用翻了。
下面這句代碼就從零開始建立了一個tensorflow gpu的環境,版本是1.13,這一句代碼,所有的依賴包括cuda,cudnn都保證安裝好了。並且不會和任何人包括自己的環境衝突,虛擬環境這個技能真的超級有用且簡單。不明白爲什麼很多人非要看十多篇長達5頁的博客,折騰半個月環境,偏偏不願意花五分鐘試試我下面的代碼。
conda create --name tenf13 tensorflow-gpu=1.13
上面建立的虛擬環境名字叫做tenf13,名字就是你叫他他就答應的。所以需要點名激活他,你不激活用不了,用完了,你再讓他走。虛擬環境就是隨叫隨到這種的方便,所以可以建立10多種,隨便是pytorch,tf,keras,還有各種版本,比如tf1,tf2。
激活環境
注意,必須使用source激活該環境。
source activate tenf13
這個環境就搭建完成了。使用時是這麼使用的。
在你的bash代碼中。我的實驗配置都是用bash代碼寫得,因爲方便。
#!/bin/bash
#SBATCH -N 2
#SBATCH --ntasks-per-node=20
#SBATCH -A para
#SBATCH -p gpu
#SBATCH --gres=gpu:4
export HOME=/home/tom/project
module load anaconda/3.7
source activate tenf13
實際上就最後兩句有用的激活了環境。export HOME這句我覺着可能是定位anaconda的。這兩句激活了環境,下面就可以寫自己的代碼了。比如
#!/bin/bash
#SBATCH -N 2
#SBATCH --ntasks-per-node=20
#SBATCH -A para
#SBATCH -p gpu
#SBATCH --gres=gpu:4
export HOME=/home/tom/project
module load anaconda/3.7
source activate tenf13
python test.py
bash 代碼也沒什麼神祕的,就是平時輸入命令行的現在輸入在一個文件裏面而已。
tensorflow代碼
之所以寫這個是因爲,在配置session的config時,需要特別注意一個參數。
否則會出錯:CUB segmented reduce errortoo many resources requested for launch
參考:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)
所以在我的實際代碼中我是這麼寫的:
# Soft placement allows placing on CPU ops without GPU implementation.
session_config = tf.ConfigProto(
allow_soft_placement=True, log_device_placement=False)
#LT add on cloud env
session_config.gpu_options.allow_growth = True
運行與監控
使用sbatch命令可以運行.sh文件。提交的進程會有一個唯一的id,比如會這麼回覆:
Submitted batch job 6712625
使用squeue可以查看正在運行的id
輸出的內容在
slurm-6712625.out
使用vim即可看