並行 雲架構 深度框架 sbatch slurm 深度學習 tensorflow環境從搭建到使用 conda

有一定的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

參考:

https://devtalk.nvidia.com/default/topic/1038115/jetson-tx2/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即可看

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章