如何在AWS上安裝使用分散式TensorFlow
前言
近幾年來,深度學習得到了長足的發展,伴隨著深度學習的發展,深度學習框架也變得越來越為人們所熟知。TensorFlow是谷歌開源的深度學習框架,自開源以來得到了業界的認可和支援,特別是在TensorFlow分散式版本釋出以後,更多的深度學習專業人士開始使用TensorFlow進行分散式的深度學習研究。
深度學習框架底層需要硬體資源的支援,特別需要GPU例項的支援,而AWS雲端彈性的GPU例項無疑是深度學習從業人員手中最靈活的資源。
本文將介紹在AWS上使用GPU例項安裝配置分散式TensorFlow的過程,希望可以讓讀者快速搭建自己的深度學習環境,儘快深入到自己的生產應用中或者是研究領域中。
環境準備
首先我們需要為TensorFlow安裝準備基礎環境,其中包括AWS賬號的建立,IAM使用者的建立,VPC的劃定等工作。有關這些具體工作的細節在本文就不詳細講述了,這些方面的細節請參考相關博文或者技術文件。
準備好賬號之後就需要啟動兩臺GPU例項進行設定,考慮到啟動例項後需要進行一些軟體部署,建議先啟動一臺GPU例項,安裝設定好TensorFlow之後建立例項的AMI映象,然後通過映象啟動第二臺GPU例項,這樣比較節省時間。
本文以Ubuntu作為基礎環境,所以在啟動例項的時候選擇作業系統時選擇Ubuntu映象,本例選擇的是。
進一步需要做的是選擇例項型別,在AWS上的GPU例項有G2和P2兩種大的型別。
P2使用了NVIDIA的K80 GPU,例項的具體配置如下:
G2使用了NVIDIA的K520 GPU,例項具體配置如下:
選擇你希望使用的例項型別,然後按照EC2啟動向導啟動該例項。關於EC2啟動的不同選項請參考相關文件,這裡需要留意的是“置放組”選項,如果我們啟動多個EC2例項執行TensorFlow並進行分散式計算,把這些例項放在一個“置放組”內會有效提高例項間的網路通訊效率。
例項啟動後通過ssh工具連線到該例項上開始安裝過程。
安裝TensorFlow
準備好EC2例項後,通過ssh工具連線到例項上,開始以下安裝工作。
因為TensorFlow安裝需要較長時間,所以建議連線到EC2例項上以後通過screen命令或者tmux命令啟動session管理,這樣安裝過程中出現ssh連線中斷也可以繼續完成安裝工作。
首先需要安裝相關的依賴包,具體命令如下:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential git python-pip libfreetype6-dev libxft-dev libncurses-dev libopenblas-dev gfortran python-matplotlib libblas-dev liblapack-dev libatlas-base-dev python-dev python-pydot linux-headers-generic linux-image-extra-virtual unzip python-numpy swig python-pandas python-sklearn unzip wget pkg-config zip g++ zlib1g-dev
sudo pip install -U pip
安裝完依賴包以後接著安裝CUDA包,本例中我是直接下載了CUDA 8.0的本地deb包進行安裝,安裝命令如下,讀者在參考使用以下命令時注意修改對應的URL連結和版本號:
wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb -O cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
CUDA安裝比較簡單,主要時間消耗在下載CUDA安裝包上。安裝了CUDA包以後,可以通過nvidia-smi命令檢視本地的GPU裝置情況,一方面檢查GPU硬體情況,一方面也可以確認CUDA安裝是否成功。
在我的G2.xlarge例項上安裝CUDA並執行nvidia-smi命令後輸出如下:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.57 Driver Version: 367.57 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GRID K520 Off | 0000:00:03.0 Off | N/A |
| N/A 33C P0 1W / 125W | 0MiB / 4036MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
安裝了CUDA後接著安裝CuDNN,安裝CuDNN需要到NVIDIA網站上註冊,註冊以後才能下載。這裡略去註冊過程,讀者可以自行到以下網站註冊:
我下載的是cudnn-8.0-linux-x64-v5.1.tgz檔案,下載後的安裝命令如下:
tar -zxf ./cudnn-8.0-linux-x64-v5.1.tgz
sudo cp -R cuda/lib64/* /usr/local/cuda-8.0/lib64
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
然後我們需要設定一些環境變數,我將以下配置加入~/.bashrc檔案中,並用source ~/.bashrc命令讓配置生效。
export CUDA_HOME=/usr/local/cuda-8.0
export CUDA_ROOT=/usr/local/cuda-8.0
export PATH=$PATH:$CUDA_ROOT/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_ROOT/lib64
安裝了NVIDIA的相關元件後我們還需要安裝bazel,為了安裝bazel,我們需要先安裝java8,具體命令如下:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
安裝java8會有圖形化嚮導,按照嚮導指引安裝就好了。
安裝了java8以後執行以下命令安裝bazel:
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install bazel
sudo apt-get upgrade bazel
經過以上準備,相關的軟體都安裝配置好了,可以開始編譯TensorFlow了。
首先把TensorFlow專案克隆到本地:
git clone --recurse-submodules https://github.com/tensorflow/tensorflow
接著進入tensorflow目錄並執行configure命令為編譯做準備,注意要加上sudo,否則會出現許可權的問題。
cd tensorflow
sudo ./configure
執行./configure
會出現文字配置介面,在選擇不同選項時幾乎可以都使用預設值,當然在選擇是否有GPU支援時要選擇Y,然後就是要注意“Cuda compute capability”一項,如果你選擇的例項型別是G2,這裡需要輸入3.0,因為G2例項使用的GPU是K520,只能支援Cuda compute capability 3.0。如果你選擇的機型是P2,因為使用的GPU是K80,可以使用預設的Cuda compute capability,本例使用的TensorFlow版本預設的是3.5。
具體選項請參考以下截圖:
如果你為G2例項型別選擇了3.5或者更高版本,執行TensorFlow時會出現以下錯誤資訊:
Ignoring visible gpu device (device: 0, name: GRID K520, pci bus id: 0000:00:03.0) with Cuda compute capability 3.0. The minimum required Cuda capability is 3.5.
配置好以後通過bazel命令編譯,注意使用sudo命令:
sudo bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
編譯需要一段時間,編譯完成後使用buildpippackage命令為python構建pip包,以下命令中的/tmp/tensorflow_pkg
目錄是pip包輸出的臨時檔案,可以根據你自己的環境進行調整:
sudo bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
構建了pip包以後使用pip命令進行安裝,注意以下命令中的/tmp/tensorflow_pkg/tensorflow-0.11.0-cp27-cp27mu-linux_x86_64.whl
是上一個命令生成的whl包檔案路徑,其中包括了具體的版本號,在你自己編譯的時候需要留意這個版本號是否有變化:
sudo pip install /tmp/tensorflow_pkg/tensorflow-0.11.0-cp27-cp27mu-linux_x86_64.whl
以上命令執行完以後就成功安裝了TensorFlow了,可以開始測試了。
測試與分散式部署
神經網路的測試經常使用mnist資料集進行,TensorFlow中自帶了mnist的樣例,安裝好TensorFlow以後通過以下命令可以進行測試:
python tensorflow/tensorflow/models/image/mnist/convolutional.py
一切正常的話,很快convolutional.py命令就可以執行完成,結束後會輸出準確率。
測試結束後,進一步需要做的事情就是分散式部署。如開篇講到的,在AWS上可以使用映象(AMI)簡化新例項啟動過程中的安裝工作。
基本做法就是選中以上步驟配置的EC2例項,然後選擇“”操作執行映象建立的操作。當我們需要啟動第二臺GPU例項時,選擇剛建立的映象進行啟動就好了。
啟動第二臺例項時注意選擇第一臺例項使用的子網,減少其它因素的干擾。如果對網路效能有特別要求,還可以將兩臺例項放在同一個“置放組”中,提高兩臺GPU例項之間的網路通訊速度。
另外,如下文所示,TensorFlow不同程序啟動的時候會使用不同的埠,本例使用的是2222和2223埠。為了讓兩個GPU例項可以通過這些埠通訊,需要設定兩個GPU例項所使用的安全組,開放2222,2223,2224的入站訪問。
在tensorflow的原始碼目錄中有個分散式樣例檔案叫:./tensorflow/tools/dist_test/python/mnist_replica.py
,是已經寫好的分散式程式碼。
該python程式通過–pshosts指定引數服務的IP和埠,通過–workerhosts指定工作程序的IP地址和埠。
本例中使用的兩臺GPU例項的ip地址分佈是172.31.24.117和172.31.30.43,我在172.31.24.117上執行引數伺服器程序,命令如下:
python ./tensorflow/tools/dist_test/python/mnist_replica.py --ps_hosts=172.31.24.117:2222 --worker_hosts=172.31.24.117:2223,172.31.30.43:2223 --job_name=ps --task_index=0
注意這裡的引數–job_name=ps用於指定本程序的角色。
接著在172.31.24.117上起第一個worker程序,命令如下:
python ./tensorflow/tools/dist_test/python/mnist_replica.py --ps_hosts=172.31.24.117:2222 --worker_hosts=172.31.24.117:2223,172.31.30.43:2223 --job_name=worker --task_index=0
這個命令和第一個啟動引數伺服器的命令幾乎一樣,差別就是–job_name=worker這個引數。
接著在172.31.30.43上啟動第二個worker程序,命令如下
python ./tensorflow/tools/dist_test/python/mnist_replica.py –ps_hosts=172.31.24.117:2222 –worker_hosts=172.31.24.117:2223,172.31.30.43:2223 –job_name=worker –task_index=1
因為都是啟動worker程序,所以兩個啟動worker程序的命令都是用的 –jobname=worker 引數,關鍵在於第一個worker程序使用taskindex=0 引數,而第二個worker程序使用task_index=1 引數。
執行以上命令後稍等片刻兩個worker程序就會開始mnist資料集的訓練,從日誌輸出上可以看出兩個worker程序分別負責了部分樣本的訓練。
結語
以上就是AWS上編譯安裝TensorFlow並執行分散式訓練的過程,完成以上環境搭建以後就可以開始你自己的分別式神經網路訓練了。
作者介紹:
鄧明軒
亞馬遜AWS解決方案架構師,擁有15年IT 領域的工作經驗,先後在IBM,RIM,Apple 等企業擔任工程師、架構師等職位;目前就職於AWS,擔任解決方案架構師一職。喜歡程式設計,喜歡各種程式語言,尤其喜歡Lisp。喜歡新技術,喜歡各種技術挑戰,目前在集中精力學習分散式計算環境下的機器學習演算法。
相關推薦
如何在AWS上安裝使用分散式TensorFlow
前言 近幾年來,深度學習得到了長足的發展,伴隨著深度學習的發展,深度學習框架也變得越來越為人們所熟知。TensorFlow是谷歌開源的深度學習框架,自開源以來得到了業界的認可和支援,特別是在TensorFlow分散式版本釋出以後,更多的深度學習專業人士開始使用TensorFl
ubuntu上安裝keras + tensorflow
keras最近很火,它是一個較高層次的深度學習框架,後端可以使用tensorflow或者theano。嘗試著在ubuntu上面安裝了keras和tensorflow,過程不算麻煩,但是還是有些小問題需要注意的。 1. 安裝tensorflow。 tensorfl
【翻譯】Sklearn與TensorFlow機器學習實用指南 ——第12章 裝置和伺服器上的分散式TensorFlow(上)
在第 11 章,我們討論了幾種可以明顯加速訓練的技術:更好的權重初始化,批量標準化,複雜的優化器等等。 但是,即使採用了所有這些技術,在具有單個 CPU 的單臺機器上訓練大型神經網路可能需要幾天甚至幾周的時間。在本章中,我們將看到如何使用 TensorFlow 在多個裝置(C
TensorFlow - 在 windows 系統上安裝
conda 安裝 rsh anaconda src 最新 之前 power ins 安裝方式: 1、pip (將介紹) 2、Anaconda 我采用的是本地 pip 方式 需提前安裝 Python - Python 3.5.x > TF 只支持 Python 3
在Mac上安裝tensorflow和virtualenv
port perl source install 變量 python3 ont master path 1.安裝brew,在終端中輸入: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins
在 Ubuntu 上安裝 TensorFlow (官方文檔的翻譯)
tree com docker x86 cup 早期 guid director doc 本指南介紹了如何在 Ubuntu 上安裝 TensorFlow。這些指令也可能對其他 Linux 變體起作用, 但是我們只在Ubuntu 14.04 或更高版本上測試了(我們只支持
Ubuntu上安裝TensorFlow(python2.7版)
close red shadow googl 軟件包 -m pandas -- com 筆記內容:Ubuntu上安裝TensorFlow(python2.7版)筆記日期:2018-01-31 Ubuntu上安裝TensorFlow(python2.7版) 我的系統環境:
Windows上安裝 TensorFlow
you html pat 網址 body imp 查看 遇到 可能 1、官網及幫助文檔 官網: https://www.tensorflow.org/install/install_windows 中文幫助文檔:https://efeiefei.gitbooks.io/
ubuntu 和windows 分別在anaconda上安裝tensorflow
3.5 bsp amd rom python版本 sim tun 鏡像站 whl windows下 的anaconda安裝tensorflow: 在Anaconda Prompt中:conda install tensorflow python=3.5一直下載失敗.總結一下
win10上安裝tensorflow時報錯 ImportError: DLL load failed: 找不到指定的模組
win10上安裝tensorflow時報錯 ImportError: DLL load failed: 找不到指定的模組 https://visualstudio.microsoft.com/zh-hans/downloads/?rr=https%3A%2F%2Fsocial.msdn.mi
在Ubuntu16.04上安裝Anaconda(3.6版本)和tensorflow模型
1、下載Anaconda3-4.3.1-Linux-x86_64和(64位)tensorflow-1.0.0 在linux上:bash /home/jdmking/Anaconda3-4.3.1-Linux-x86_64.sh(/home/jdmking/為存放路徑) 2、閱讀l
TensorFlow資料彙總 在 Mac OS X 上安裝 TensorFlow
1、使用 virtualenv 安裝TensorFlow 按照以下步驟安裝 TensorFlow: 開啟終端(一個 shell),你將在這個終端中執行隨後的步驟 通過以下命令安裝 pip 和 virtualenv: $ sudo easy_install pip $ sudo pip in
使用docker在Ubuntu上安裝TensorFlow-GPU
基於docker在Ubuntu上搭建TensorFlow-GPU計算環境 由於實驗室的伺服器有多人共享使用,而不同人的程式碼對應的keras和tensorflow版本不一致,所以對應的cuda版本也不相同,因此,考慮使用docker安裝自己的容器,這樣就可以避免共享cuda版本不一致
windows上安裝tensorflow時報錯,“DLL load failed: 找不到指定的模組”的解決方式
本文轉自http://blog.csdn.net/pjl6523853/article/details/72836214 最近打算開始研究一下機器學習,今天在windows上裝tensorflow花了點功夫,其實前面的步驟不難,只要依次裝好python3.5,num
TensorFlow GPU在ubuntu 18.04上安裝的注意事項
雖然說TensorFlow到現在已經發布好幾年了,但是在ubuntu上用帶GPU的TensorFlow,我認為一直是個災難,而且這個災難仍將持續。。。 這個話題,相當簡單了,只是配置一下環境而己,但是N多人在上面痛不欲生,我還是寫出來吧。有問題儘管給我留言。 我
基於Intel Analytics Zoo上分散式TensorFlow的美的 / KUKA工業檢測平臺
背景 工業檢查(用於產品缺陷檢測)是現代製造業的重要組成部分。隨著人工智慧,計算機視覺和大資料技術的發展,我們可以建立先進的工業檢測系統以實現和人類水平媲美的準確性,並具有更高的效率和更低的成本。在本文中,我們將分享我們在美的/ KUKA,使用英特爾Analyt
window上安裝tensorflow cpu版本
https://blog.csdn.net/wust_lh/article/details/80408505 下載anaconda的時候,注意選擇python3.5對應的版本。 Anaconda版本:Anaconda3-4.3.0 Python版本:Python
在Linux上安裝Anaconda以及在Anaconda下安裝TensorFlow和Opencv
參考部落格 首先下載Anaconda,https://www.anaconda.com/download/ 安裝anaconda bash 下載的安裝包.sh 在安裝過程中確定安裝的路徑以及配置環境,全部選擇y,否則需要自己配置環境 安裝完Anaconda後安裝Te
Tensorflow_001.在macOS上安裝Tensorflow
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.12.0-cp34-cp34m-linux_x86_64.whl
Tensorflow Ubuntu16.04上安裝及CPU執行Tensorboard、CNN、RNN圖文教程
Tensorflow Ubuntu16.04上安裝及CPU執行tensorboard、CNN、RNN圖文教程 Ubuntu16.04系統安裝 Win7 U盤安裝Ubuntu16.04 雙系統詳細教程參看部落格:http://blog.csdn.net/coderjyf/article/det