深度學習多機多卡解決方案-purine

來源:互聯網
上載者:User

標籤:

未經允許請不要轉載,原zhxfl,http://www.cnblogs.com/zhxfl/p/5287644.html

目錄:

一、簡介

二、環境配置

三、運行demo

四、硬體設定建議

五、其他

 

一、簡介

深度學習多機多卡叢集已經成為主流,相對於caffe和mxnet這兩個比較活躍的開源,purine顯得更值得在高校的學生細讀,因為purine的代碼顯得更加短小精悍,作者的C++功力也相當渾厚,其採用的思想也是非常有價值和啟發性的。但是purine已經停止維護,所以其實並不適合企業使用者,但是依然有很大的學術價值,特別適合高校研究軟體體繫結構,深度學習,甚至機器學習GPU叢集效能最佳化等方向的學生閱讀。

二、環境配置

2.1、支援C++11

由於purine使用了C++11的標準,所以在ubuntu執行安裝gcc-4.8和g++-4.8的命令,此外,為了避免多個版本衝突的問題,可以把其他版本的都卸載掉,免得要去管理和切換編譯器的版本。這裡我選的是gcc-4.8

1 sudo apt-get --yes --force-yes remove gcc-4.6 g++-4.6 gcc-4.7 g++-4.7 gcc-4.9 g++-4.92 sudo apt-get update3 sudo apt-get --yes --force-yes install gcc-4.8 g++-4.84 sudo apt-get --yes --force-yes install gfortran

2.2、安裝CUDA和CUDNN

這裡我使用的是CUDA-7.0版本,目前知道的是支援的版本有(6.5,7.0,7.5)。需要注意的是,如果安裝了其他版本的CUDA,需要先卸載原來版本的CUDA才能安裝新的,避免衝突。
卸載CUDA的方法如下:

1 sudo perl /usr/local/cuda/bin/uninstall_cuda_7.5.pl

卸載完原來版本的CUDA之後,需要卸載ubuntu內建的驅動,因為CUDA的安裝包中已經內建了相應的驅動。

1 sudo apt-get --yes --force-yes remove nvidia*

由於案頭會佔用驅動導致CUDA無法安裝顯卡驅動,所以在安裝CUDA之前,需要先關閉案頭,再執行CUDA的安裝包,cuda的安裝包可以從官方網站下載:https://developer.nvidia.com/cuda-downloads

1 sudo /etc/init.d/lightdm stop2 sudo sh ./cuda_7.5.18_linux.run

接下來需要配置cudnn,cudnn是NVIDIA官方維護的深度學習加速庫,在某種程度上將,這個庫的效能是最快的,所以purine也借用了cudnn來最佳化效能。cudnn下載前要先註冊和申請,稍微比較麻煩一點,地址如下:https://developer.nvidia.com/cudnn,我使用的是cudnn7.0的版本,直接解壓然後把對應的檔案拷貝到cuda的安裝目錄即可。

1 sudo tar -xvf ./cudnn-7.0-linux-x64-v3.0-prod.tgz2 sudo mv ./cuda/include/* /usr/local/cuda/include/3 sudo mv ./cuda/lib64/* /usr/local/cuda/lib64/4 sudo rm -rf cuda/

2.3、安裝libuv

libuv是一個非同步編程的C++庫,通過libuv可以很容易實現“事件”,“線程同步”,“線程等待”,“線程池”等邏輯。libuv是個開源庫,可以現在源碼下來編譯:https://github.com/libuv/libuv,我使用的是1.x的版本。

先安裝libuv依賴庫:

1 sudo apt-get --yes --force-yes install aptitude2 sudo apt-get --yes --force-yes install libtool automake autoconf autogen

解壓下載的安裝包進行編譯和安裝:

 1 echo "Install libuv" 2 rm -rf ./libuv-1.x.zi 3 sudo unzip libuv-1.x.zip 4 cd ./libuv-1.x/ 5 sudo sh autogen.sh 6 sudo ./configure/ 7 sudo make -j4 8 sudo make install 9 cd ../10 rm -rf ./libuv-1.x/

2.4、CMake安裝

CMake是一個跨平台組織編譯依賴的工具,可以下載源碼進行安裝編譯,建議使用3.3.2或者以上的版本,一方面是因為我驗證過了,第二方面是因為CMAKE對CUDA的支援較晚,建議不要使用3.3.2以下的版本,避免做無用功,CMAKEhttps://cmake.org/

1 echo "cmake install"2 rm -rf ./cmake-3.3.23 sudo tar -xvf ./cmake-3.3.2.tar.gz4 cd ./cmake-3.3.2/5 ./configure6 make -j 47 sudo make install8 cd ../9 rm -rf ./cmake-3.3.2

2.5、安裝opencv

opencv是一個影像處理的庫,caffe和purine依賴於這個庫,建議選擇3.0以上的版本,http://opencv.org/downloads.html,這裡我使用的是3.0版本,並且使用源碼進行編譯,此外,建議關閉WITH_CUDA 和 WITH_IPP,因為這兩個實際上在purine的項目裡面用不上,命令如下:

 1 echo "Install opencv" 2 sudo apt-get remove libopencv-dev 3 rm -rf opencv-3.0.0/ 4 sudo unzip ./opencv-3.0.0.zip 5 cd ./opencv-3.0.0/ 6 cmake -D WITH_CUDA=OFF -D WITH_IPP=OFF . 7 make -j 4 8 sudo make install 9 cd ../10 rm -rf opencv-3.0.0/

2.6、安裝MPI

MPI是一套並行編程的介面,其主要是依賴於SPMD(單個程式,多個資料流,具體到叢集就是每個節點所處理的邏輯都是一樣的,但是資料流不一樣)思想進行編程設計的,由於purine只支援mpich,所以我使用的版本是mpich-3.2b4,地址如下:https://www.mpich.org/2015/07/25/mpich-3-2b4-released/

1 echo "Install mpich"2 rm -rf ./mpich-3.2b4/3 tar -xvf ./mpich-3.2b4.tar.gz4 cd ./mpich-3.2b4/5 ./configure6 make -j 47 sudo make install8 cd ../9 rm -rf ./mpich-3.2b4/

2.7、其他依賴:

1 #sudo apt-get --yes --force-yes install libprotobuf-dev libleveldb-dev libsnappy-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler2 sudo apt-get --yes --force-yes install libprotobuf-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler libboost-dev3 sudo apt-get --yes --force-yes install libatlas-base-dev libatlas3gf-base4 sudo apt-get install libatlas-base-dev libatlas3gf-base

三、運行demo

3.1 編譯

先從git上把代碼拉下來,原作者的官網在https://github.com/purine/purine2,但是原來git上的工程不能編譯通過,其發布的CMakeList.txt有一些bug導致無法編譯。也可以使用我fork的分支https://github.com/zhxfl/purine2,我的分支將cmakelist.txt做了修改保證其能正常編譯。我後續還在上面做了不少改進的嘗試,不過都是增量維護的,並沒有曲解作者的初衷,所以可以放心使用我的分支代碼。

1 git clone https://github.com/zhxfl/purine2

代碼下載下來之後,使用下面命令進行編譯,如果這裡"cmake ."命令沒有順利通過,可以聯絡我"zhxfl##mail.ustc.edu.cn",將“##”替換為@,可能是我前面描述少了導致某些依賴出了問題。

1 cd purine2/2 cmake .3 make -j2

3.2 demo資料庫製作

這裡選用cifar-10資料集,運行

1 ~/tmp/purine2/data/cifar-10/get_cifar10.sh

到purine根目錄下執行cifar10_data產生資料庫,代碼如下,這裡強調一下,因為代碼利用的是相對目錄,所以必須在purine2/目錄下執行,執行完畢之後會在purine2/data/cifar-10目錄下會產生兩個資料庫檔案cifar-10-train-lmdb和cifar-10-test-lmdb兩個目錄。

./test/cifar10_data

3.3 單機多卡

 運行demo之前,需要先配置兩個檔案,parallel_config檔案中加入

0 0 64
0 1 64

這三個參數分別表示(機器編號,顯卡標號,迭代對應的batch_size)

接下來要配置一下HOSTFILE檔案,填入原生IP地址,一個地址一行,接下來使用如下命令啟動purine運行,該命令表示啟動兩個進程,

mpirun -n 1 -hostfile HOSTFILE ./test/nin_cifar10

3.4 多機多卡

1、在進行多機多卡之前,在不同機器之間配置一下ssh無密碼認證。

2、確認不同機器之間已經可以無密碼認證之後,先配置一下每台機器上的hosts檔案,給每個機器取一個名字,比如我們有兩個節點,分別為A,B,其中A上面有兩塊顯卡。那麼parallel_config檔案配置如下:

0 0 640 1 641 0 64

HOSTFILE

AB

將這兩個設定檔拷貝到不同機器的purine目錄下,這裡要保證每台機器都有purine目錄,並且其可執行檔都是一樣的,此外,由於我們沒有Distributed File System,所以必須保證每台機器上都有資料。

接下來執行如下命令:

mpirun -n 2 -hostfile HOSTFILE ./test/nin_cifar10

此外,所有log都儲存在系統/tmp/目錄下

四、硬體設定建議

如果是用於學術研究而不是商業化,推薦一個經濟實惠的硬體方案:

1、顯卡:titianx顯卡2個,gtx98ti也可以,

2、主板可以選可以插幾塊顯卡的,一般也就幾千塊錢,如“技嘉LGA2011-3 GA-X99”

機箱和電源什麼讓供應商配就行了,整個解決方案可以控制在2,3w之間。

五、其他

如果你不是研究叢集效能的,只是有做做實驗,甚至希望在windows上進行開發和研究,

可以考慮我們實驗室的其他開源CUDA-CNN和CUDA-MCDNN,我們大部分修改演算法的嘗試都是在這兩個項目上進行的。

如果有其他問題,可以聯絡我:zhxfl##mail.ustc.edu.cn


 

深度學習多機多卡解決方案-purine

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.