GPU集群配置MXNet+CUDA


準(zhǔn)備

批處理

為方便控制集群,寫了腳本cmd2all.sh

#!/bin/bash
if [ $# -lt 3 ]; then
    echo "usage: $0 [type cmds hosts]"
    echo "for example: ./cmd2all.sh \"cmds\" \"touch t1.txt\" \"gpu1 gpu2\""
    echo "for example: ./cmd2all.sh \"path\" \"/home/gbxu/CUDA/" \"gpu1 gpu2\""
    exit -1;
fi
type=$1 # "cmds"
cmds_or_path=$2 # "touch test.txt"
#hosts=$3
hosts=(gpu10 gpu11 gpu12 gpu13 gpu14 gpu15 gpu16 gpu17 gpu18)
if [$type == "cmds"]
then
  for host in ${hosts[@]}
    do
      ssh $host nohup $cmds_or_path  &
  done
fi

if [$type == "path"]
then
  for host in ${hosts[@]}
    do
      nohup scp -r $cmds_or_path $host:~/ &
    done
fi

使用virtualenv

如果是python3的環(huán)境,需要virtualenv -p /usr/bin/python3 mxnetGPU
使用virtualenv,創(chuàng)建新的virtualenv,并修改.bashrc,使得在每次進(jìn)入終端時(shí)activate虛擬環(huán)境(方便后期分布式運(yùn)行)

hosts="gpu10 gpu11 gpu12 gpu13 gpu14 gpu15 gpu16 gpu17 gpu18 "
./cmd2all.sh "cmds" "sudo yum -y install epel-release && sudo yum -y install python-pip && sudo pip install virtualenv && virtualenv mxnetGPU" $hosts
./cmd2all.sh "cmds"  "echo \"## gbxu MXnet-GPU\" >> .bashrc" $hosts
./cmd2all.sh "cmds"  "echo \"source mxnetGPU/bin/activate\" >> .bashrc" $hosts

嘗試在gpu10安裝

Install NVIDIA Driver

本身已有驅(qū)動(dòng)則該操作不必要。

lspci | grep -i nvidia #查看設(shè)備
modinfo nvidia #查看驅(qū)動(dòng)
sudo yum -y remove nvidia-*
sudo sh  NVIDIA-Linux-x86_64-390.25.run #安裝驅(qū)動(dòng)

Install CUDA:

see documents:

  • offline安裝笑诅,online版本可能出現(xiàn)依賴缺失。
  • 所有版本
    CUDA是NVIDIA推出的用于自家GPU的并行計(jì)算框架疮鲫,只有當(dāng)要解決的計(jì)算問題是可以大量并行計(jì)算的時(shí)候才能發(fā)揮CUDA的作用吆你。
    下載: 見offline安裝
#copy installer && run

# 若安裝錯(cuò)誤需要先卸載
sudo yum -y remove "cuda-*"
sudo rm -rf /usr/local/cuda*
sudo rpm -i cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64.rpm
sudo yum clean all
sudo yum -y install cuda

gpu10利用yum local的安裝出現(xiàn)問題,后來下載cuda_9.2.148_396.37_linux.run
sudo sh cuda_9.2.148_396.37_linux.run安裝
并且在安裝(or not, just try)時(shí)同意nvidia驅(qū)動(dòng)棚点,并且一路yes和default早处。
or, add /usr/local/cuda-9.2/lib64 to /etc/ld.so.conf and run ldconfig as root

添加CUDA環(huán)境變量

# export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:$LD_LIBRARY_PATH
echo -e "export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:\$LD_LIBRARY_PATH" >> .bashrc 
# export PATH=$PATH:/usr/local/cuda/bin
echo -e "export PATH=\$PATH:/usr/local/cuda/bin" >> .bashrc

測(cè)試CUDA

nvcc -V
nvidia-smi
cd /home/gbxu/NVIDIA_CUDA-9.2_Samples/1_Utilities/deviceQuery
make
./deviceQuery # 結(jié)果pass則安裝成功

Install cuDNN:

see documents
cuDNN(CUDA Deep Neural Network library):是NVIDIA打造的針對(duì)深度神經(jīng)網(wǎng)絡(luò)的加速庫(kù),是一個(gè)用于深層神經(jīng)網(wǎng)絡(luò)的GPU加速庫(kù)瘫析。如果你要用GPU訓(xùn)練模型砌梆,cuDNN不是必須的,但是一般會(huì)采用這個(gè)加速庫(kù)贬循。

tar -xzvf cudnn-9.2-linux-x64-v7.1.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h

安裝Prerequisites

see documents

sudo yum -y install build-essential git lapack-devel openblas-devel opencv-devel atlas-devel

complie MXNet

see:documents

git clone --recursive https://github.com/apache/incubator-mxnet.git
cd incubator-mxnet
make clean_all
make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 USE_DIST_KVSTORE=1  USE_PROFILER=1 

install MXNet in python

cd python
pip uninstall -y mxnet
pip install -e .

test MXNet in python

python
>>> import mxnet as mx                                                                                                                                                      
>>> a = mx.nd.zeros((2,3), mx.gpu())

install python lib

請(qǐng)根據(jù)最后運(yùn)行MXNet任務(wù)時(shí)查缺補(bǔ)漏

pip install numpy requests 

預(yù)設(shè)編譯參數(shù)

cd到源代碼主目錄咸包,在makefile文件中預(yù)設(shè)編譯參數(shù),

# vim incubator-mxnet/Makefile
cmpl:
    make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_DIST_KVSTORE=1

cmplgpu:
    make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_DIST_KVSTORE=1 USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 

之后使用make指令編譯更為便捷杖虾。

make cmplgpu

批量安裝環(huán)境

在gpu11-gpu18批量安裝環(huán)境

先用1.sh將數(shù)據(jù)傳到nodes烂瘫,

  • 1.sh
hosts=(gpu11 gpu12 gpu13 gpu14 gpu15 gpu16 gpu17 gpu18)
for host in ${hosts[@]}
do
  echo run 1.sh at $host
  scp -r process_data gbxu@$host:~/
done

再用2.sh在各nodes運(yùn)行scripts_in_nodes.sh腳本即可。

  • 2.sh
hosts=(gpu12 gpu13 gpu14 gpu15 gpu16 gpu17 gpu18)
for host in ${hosts[@]}
do
  echo run 2.sh at $host
  scp process_data/scripts_in_nodes.sh gbxu@$host:~/process_data/
  ssh gbxu@$host "cd process_data && nohup ./scripts_in_nodes.sh &"
done
  • scripts_in_nodes.sh
sudo yum -y remove "cuda-*" 
sudo rpm -i cuda-repo-rhel7-9-2-local-9.2.148-1.x86_64.rpm
sudo yum clean all
sudo yum -y install cuda
echo -e "export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:\$LD_LIBRARY_PATH" >> ~/.bashrc
echo -e "export PATH=\$PATH:/usr/local/cuda/bin" >> ~/.bashrc

tar -xzvf cudnn-9.2-linux-x64-v7.1.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h

sudo yum -y install build-essential git lapack-devel openblas-devel opencv-devel atlas-devel

pip install numpy requests # 請(qǐng)根據(jù)最后運(yùn)行MXNet任務(wù)時(shí)查缺補(bǔ)漏

編譯奇适、安裝MXNet

之后只需在一臺(tái)host上編譯mxnet即可坟比,余下用MXNet的同步機(jī)制即可。
在gpu10上啟動(dòng)訓(xùn)練

  • 需要加庫(kù)文件放到同步的文件夾下:
cd incubator-mxnet/example/image-classification
echo -e "gpu11\ngpu12\ngpu13\ngpu14\ngpu15\ngpu16\ngpu17\ngpu18\n" > hosts
rm -rf mxnet
cp -r ../../python/mxnet .
cp -r ../../lib/libmxnet.so mxnet
  • 然后執(zhí)行命令嚷往,該命令會(huì)同步文件夾cluster上啟動(dòng)8個(gè)worker葛账,1個(gè)server
# export DMLC_INTERFACE='ib0'; # ib尚未配置好
python ../../tools/launch.py -n 8 -s 1 --launcher ssh -H hosts --sync-dst-dir /home/gbxu/image-classification_test/  python train_mnist.py --network lenet --kv-store dist_sync --num-epochs 1 --gpus 0

ENJOY

  • multiple machines each containing multiple GPUs 的訓(xùn)練見docs
  • 其中 dist_sync_device 替代 dist_sync。因?yàn)閏luster為多GPU皮仁,見docs
  • mxnet-make-install-test.sh
cd incubator-mxnet
make clean_all
make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 USE_DIST_KVSTORE=1  USE_PROFILER=1 
cd python
pip uninstall -y  mxnet
pip install -e .
cd ../example/image-classification
echo -e "gpu11\ngpu12\ngpu13\ngpu14\ngpu15\ngpu16\ngpu17\n" > hosts
rm -rf mxnet # example/image-classification下的
cp -r ../../python/mxnet .
cp -r ../../lib/libmxnet.so mxnet
export DMLC_INTERFACE='ib0';
python ../../tools/launch.py -n 8 -s 1 --launcher ssh -H hosts --sync-dst-dir /home/gbxu/image-classification_test/  python train_mnist.py --network lenet --kv-store dist_sync --num-epochs 1 --gpus 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末籍琳,一起剝皮案震驚了整個(gè)濱河市菲宴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趋急,老刑警劉巖喝峦,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呜达,居然都是意外死亡谣蠢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門查近,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漩怎,“玉大人,你說我怎么就攤上這事嗦嗡。” “怎么了饭玲?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵侥祭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我茄厘,道長(zhǎng)矮冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任次哈,我火速辦了婚禮胎署,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窑滞。我一直安慰自己琼牧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布哀卫。 她就那樣靜靜地躺著巨坊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪此改。 梳的紋絲不亂的頭發(fā)上趾撵,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音共啃,去河邊找鬼占调。 笑死,一個(gè)胖子當(dāng)著我的面吹牛移剪,可吹牛的內(nèi)容都是我干的究珊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼挂滓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼苦银!你這毒婦竟也來了啸胧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤幔虏,失蹤者是張志新(化名)和其女友劉穎纺念,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體想括,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陷谱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑟蜈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烟逊。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铺根,靈堂內(nèi)的尸體忽然破棺而出宪躯,到底是詐尸還是另有隱情,我是刑警寧澤位迂,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布访雪,位于F島的核電站,受9級(jí)特大地震影響掂林,放射性物質(zhì)發(fā)生泄漏臣缀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一泻帮、第九天 我趴在偏房一處隱蔽的房頂上張望精置。 院中可真熱鬧,春花似錦锣杂、人聲如沸脂倦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狼讨。三九已至,卻和暖如春柒竞,著一層夾襖步出監(jiān)牢的瞬間政供,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工朽基, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留布隔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓稼虎,卻偏偏與公主長(zhǎng)得像衅檀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霎俩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348