1. 程式人生 > >如何在AWS上安裝使用分散式TensorFlow

如何在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