《麵向機器智能的TensorFlow實踐》安裝TensorFlow10
安裝TensorFlow
在開始使用TensorFlow之前,需要先將其安裝到計算機中。幸運的是,TensorFlow官網提供了一份在Linux和Mac OS X係統中安裝TensorFlow的完整分步指南。本章對安裝中將會出現的不同選項如何選擇給出了一些建議,並提供了一些關於能夠與TensorFlow很好地集成的其他第三方軟件的信息。此外,本章還給出一份從源代碼構建和安裝TensorFlow的參考,以幫助用戶安裝帶有GPU支持的TensorFlow。
如果用戶對Pip/Conda、虛擬環境,或從源碼安裝程序已經非常熟悉,則可放心地參考如下官方指南:
https://www.tensorflow.org/versions/master/get_started/os_setup.html
2.1 選擇安裝環境
許多軟件都會使用一些庫和獨立維護的軟件包。對於開發者而言,這是一件好事,因為這種做法有利於代碼複用,而且他們可專注於創建新的功能,而無需重複造輪。然而,這種做法也會付出一定的代價。如果某個程序的正常運行必須依賴於另一個庫,則用戶或這款軟件必須確保任何運行該程序代碼的機器都已安裝了依賴庫。乍看上去,這幾乎不算一個問題—隻需隨這款軟件一起安裝所需的依賴庫不就行了?不幸的是,這種方法會帶來一些意想不到的後果,而且常常如此。
設想如下場景:你找到一款出色的軟件—軟件A,下載後開始安裝。在執行其安裝腳本時,軟件A需要另外一款依賴軟件。如果你的計算機中缺少這個依賴軟件,則需進行安裝。我們稱之為軟件依賴項(software dependency)。假設該依賴項的當前版本號為1.0。軟件A先安裝1.0版的依賴項,然後再對自身進行安裝,一切都進行得很順利。再假設將來的某個時候,你偶然發現了另一款希望安裝的軟件—軟件B。軟件B需要使用2.0版的依賴項,相對於1.0版,這個版本做出了重大改進,且不具備向下兼容性。鑒於這個依賴項的發行方式,無法做到1.0和2.0兩個版本同時運行,因為這將導致使用它時產生二義性(這兩個版本的都會作為依賴項被導入,應使用哪個版本?)。最終,軟件B將用2.0版的依賴項覆蓋1.0版,並完成自身的安裝。經曆一番艱辛後,你才發現軟件A與2.0版依賴項不兼容,因此完全被破壞,情況頓時變得很糟。如何才能在同一台機器上既可運行軟件A,也可運行軟件B?這個問題非常重要,因為TensorFlow也依賴於若幹開源軟件。利用Python(用於將TensorFlow打包的編程語言),可采取多種方式避免上述依賴衝突問題。
代碼庫內部的軟件包依賴。無需依賴於係統級的軟件包或庫,開發者可將所需版本的依賴庫放在自己的代碼中,並在局部引用。按照這種方式,軟件所需的所有代碼都是可直接操控的,不會受到外部變動的影響。然而,這種方式並非無懈可擊。首先,它增加了安裝該軟件所需的磁盤空間,這意味著安裝時間更長、使用成本更高。其次,用戶可能已經以全局方式安裝了依賴庫,這意味著局部版本完全是多餘的,會占用不必要的空間。最後,依賴庫在將來可能會推出修複若幹嚴重安全漏洞的關鍵的、保持向下兼容性的更新。這時,對代碼庫中依賴庫的更新將無法借助軟件包管理器,而隻能由軟件開發者手工完成。不幸的是,最終用戶對此無從插手,因為何時直接包含依賴庫完全是由開發者決定的。有一些依賴庫由於沒有被包含進TensorFlow,因此必須單獨安裝。
使用依賴環境。一些軟件包管理器中包含可創建虛擬環境的相關軟件。在一個環境中可完全獨立地維護特定版本的軟件而不受其他環境的影響。借助Python,有多種選擇。對於Python的標準發行版,Virtualenv是直接可用的。如果使用的是Anaconda,它會包含一個內置的虛擬環境係統及其軟件包管理器—Conda。稍後,筆者將會介紹如何使用這兩種工具安裝TensorFlow。
使用容器。容器(如Docker)是將軟件與完整的文件係統,包括其運行時和依賴庫打包的輕量級方案。因此,任何可運行一個容器的機器(包括虛擬機在內)都能夠與任何運行該容器的其他機器對其中所包含的軟件獲得完全相同的運行效果。與簡單地激活Virtualenv環境或Conda環境相比,雖然從Docker中啟動TensorFlow需要略多一點的步驟,但當需要將代碼在不同實例(無論是虛擬機還是物理的服務器)上進行部署時,它在不同運行時環境中的一致性使其成為無價之寶。下文將介紹如何安裝Docker,並創建你自己的TensorFlow容器(以及如何使用官方的TensorFlow鏡像)。
一般而言,如果準備在單機上安裝和使用TensorFlow,筆者建議采用Virtualenv或Conda的虛擬環境。它們能夠以較小的代價解決依賴衝突問題,且易於設置。一旦創建完畢,便幾乎一勞永逸。如果準備將TensorFlow代碼部署到一台或多台服務器中,則值得創建一個Docker容器鏡像。雖然所需的步驟略多,但卻會大大降低在多服務器上部署的成本。筆者不推薦既不使用虛擬環境,也不使用容器的TensorFlow安裝方法。
2.2 Jupyter Notebook與matplotlib
在數據科學工作流中頻繁使用的兩款出色的軟件是Jupyter Notebook和matplotlib。它們與NumPy協同使用已有多年,TensorFlow與NumPy的緊密集成使得用戶可采用他們熟悉的工作模式。兩者均為開源軟件,且采用的許可協議均為BSD。
利用Jupyter Notebook(前身為iPython Notebook),可交互式地編寫包含代碼、文本、輸出、LaTeX及其他可視化結果的文檔。這使得它在依據探索分析創建報告時極為有用,因為可將創建可視化圖表的代碼直接在圖表的旁邊展示出來,也可利用Markdown單元以格式豐富的文本分享你對於某個特定方法的見解。此外,對於設計原型的想法,Jupyter Notebook也極為出色,因為你可回顧和編輯部分代碼,然後從筆記本中直接運行。與許多其他要求逐行執行代碼的交互式Python環境不同,Jupyter Notebook允許將代碼寫入邏輯塊中,這使得調試腳本中特定部分相對容易。在TensorFlow中,這個特性是極有價值的,因為典型的TensorFlow程序已經被劃分為“計算圖的定義”和“運行計算圖”兩部分。
matplotlib是一個繪圖庫,它允許用戶使用Python創建動態的、自定義的可視化結果。它與NumPy無縫集成,其繪圖結果可直接顯示在Jupyter Notebook中。matplotlib也可將數值數據以圖像的形式可視化,這個功能可用於驗證圖像識別任務的輸出,並將神經網絡的內部單元可視化。構建在Matplotlib之上的其他層,如Seaborn,可用於增強其功能。
2.3 創建Virtualenv環境
為保持依賴項的幹淨整潔,下麵介紹如何利用Virtualenv創建虛擬的Python環境。首先需要確保Virtualenv與pip(Python的包管理器)均被安裝。運行下列命令(根據操作係統的不同,選擇相應的命令):
1. 64位Linux係統
2. Mac OS X
至此,準備工作已完成,接下來創建一個包含該虛擬環境的目錄,以及將來可能會創建的任意虛擬環境:
接下來,利用Virtualevn命令創建虛擬環境。在本例中,它位於~/env/tensorflow下。
一旦創建完畢,便可利用source命令激活該虛擬環境:
我們希望當使用pip安裝任何軟件時都確保該虛擬環境處於活動狀態,從而使Virtualenv能夠對各依賴庫進行追蹤。
虛擬環境使用完畢後,需用下列deactivate命令將其關閉:
由於將頻繁使用虛擬環境,創建一個激活虛擬環境的快捷方式而非每次鍵入完整的source...命令便很有價值。接下來的命令將向~/.bashrc文件添加一個bash別名,使在需要啟動虛擬環境時隻需鍵入tensorflow:
要測試該快捷方式是否生效,可重啟bash終端,並鍵入tensorflow:
2.4 TensorFlow的簡易安裝
如果隻是希望盡快上手實踐一些入門的例子,而不關心是否有GPU支持,則可從TensorFlow官方預製的二進製安裝程序中擇一。請確保你的Virtualenv環境處於活動狀態,並運行下列與你的操作係統和Python版本對應的命令:
1. Linux 64位安裝
2. Mac OS X安裝
從技術角度,可以使用帶有GPU支持的預製TensorFlow二進製安裝程序,但它需要特定版本的NVIDIA軟件,且與未來版本不兼容。
2.5 源碼構建及安裝實例:在64位Ubuntu Linux上安裝GPU版TensorFlow
如果希望使用帶有GPU支持的TensorFlow,那麼最可能的選擇是從源碼構建和安裝。本節給出了一個完整的安裝參考實例,詳細介紹了安裝和運行TensorFlow所需的每一具體步驟。請注意,本示例中的操作係統為64位Ubuntu Linux發行版,因此如果你使用的是其他Linux發行版,則可能需要對某些命令進行修改(如apt-get)。如果希望在Mac OS X上從源碼構建TensorFlow,筆者推薦TensorFlow官網的安裝指南:
https://www.tensorflow.org/versions/master/get_started/
os_setup.html#installation-for-mac-os-x
2.5.1 安裝依賴庫
這裏假定你已安裝了python-pip、python-dev和python-virtualenv。
構建TensorFlow需要事先安裝少量依賴庫。按照所安裝的Python版本,執行下列命令:
1. Python 2.7
2. Python 3
2.5.2 安裝Bazel
Bazel是一款基於穀歌內部軟件的開源構建工具。在本書寫作之時,為從源碼構建TensorFlow,需要Bazel,因此我們必須自行安裝該軟件。Bazel官網中有一份非常完整的安裝指南,本節隻介紹一些最基本的步驟。
第一件事是確保係統中已安裝Java Development Kit 8(JDK 8)。下列命令會將Oracle JDK 8代碼庫添加到apt源中,然後進行安裝:
對於Ubuntu 15.10版及後續版本,也可安裝Oracle JDK的替代軟件OpenJDK 8。安裝後者更為容易,也是筆者所推薦的,可使用下列命令在係統中安裝OpenJDK:
在繼續下一步之前,請驗證Java已被正確安裝:
Java安裝完畢後,還需要安裝少量其他依賴庫:
接下來,需要下載Bazel安裝腳本。為此,既可前往GitHub上的Bazel發行頁麵,也可使用下列wget命令。請注意,對於Ubuntu係統,需要下載“bazel-xxx-installer-linux-x86_64.sh”:
# 下載Bazel 0.3.0
最後,將所下載的安裝腳本的權限修改為可執行的,並運行它:
通過使用--user選項,Bazel將被安裝到$HOME/bin目錄。為確保該路徑被添加到環境變量PATH中,可通過下列命令對~/.bashrc進行更新:
重啟bash終端,並運行bazel,以確保一切可正常工作:
非常棒!接下來,需要安裝一些能夠支持GPU運算的依賴軟件。
2.5.3 安裝CUDA軟件(僅限NVIDIA GPU)
如果擁有一款支持CUDA的NVIDIA GPU,則可安裝帶有GPU支持的TensorFlow。支持CUDA的顯卡清單可從下列網址獲取:
https://developer.nvidia.com/cuda-gpus
除了確保你的GPU榜上有名,還需注意與顯卡“計算能力(compute capability)”有關的量化數字。例如,GeForce GTX 1080的計算能力為6.1,而GeForce GTX TITAN X的計算能力為5.2。在編譯TensorFlow時需要用到這個數字。在確定可利用CUDA後,要做的第一件事便是注冊NVIDIA的“Accelerated Computer Developer Program”。為了下載安裝CUDA和cuDNN所需的所有文件,這個步驟是必需的。注冊鏈接如下:
https://developer.nvidia.com/accelerated-computing-developer
當注冊完成後,你會希望下載CUDA。前往下列鏈接,並使用如下操作指南:
https://developer.nvidia.com/cuda-downloads
1)在“Select Target Platform(選擇目標平台)”下方,選擇下列選項:
Linux
x86_64
Ubuntu
14.04/15.04
deb(本地)
2)單擊“Download(下載)”按鈕,將安裝文件保存在你的計算機中。該文件體積較大,因此完成下載可能需要一段較長的時間。
3)導航至包含所下載的安裝文件的目錄,並運行下列命令:
上述命令執行完畢後, CUDA將被安裝到/usr/local/cuda目錄下。
接下來,需要下載cuDNN,它是一款專為深度神經網絡設計的基於CUDA的加速庫。單擊如下頁麵的“Download”按鈕:
https://developer.nvidia.com/cudnn
用在前麵創建的賬號登錄後,將看到一份簡短的調查問卷。完成問卷後,可通過單擊問卷下方的按鈕進入下載頁麵。單擊“I Agree to the Terms...”以接受下載許可協議。由於前麵安裝的是CUDA 7.5,所以需要下載cuDNN for CUDA 7.5(本書寫作之時,筆者使用的是cuDNN v5.0)。
單擊“Download cuDNN v5 for CUDA 7.5”,將下載選項展開。
單擊“cuDNN v5 Library for Linux”,下載經過壓縮的cuDNN文件。
導航至下載好的.tgz文件,運行下列命令,將必要的文件複製到/usr/local/cuda目錄下:
以上便是安裝CUDA所需的所有步驟。由於所有依賴庫都已細心安裝,接下來便可安裝TensorFlow了。
2.5.4 從源碼構建和安裝TensorFlow
首先需要克隆GitHub上的TensorFlow代碼庫,然後進入其所在目錄:
進入上述目錄後,運行./configure腳本,將所使用的編譯器、CUDA版本等信息通知給Bazel。請確保已記錄顯卡的“計算能力”數字(上文中已介紹過):
# 注意:若使用Python 3,需要指定為/usr/bin/python3
Google Cloud Platform支持目前正處於封閉alpha測試階段。如果能夠訪問該程序,可在回答Google Cloud Platform支持問題時選擇y(Yes)。
配置完成後,便可利用Bazel創建一個用於創建Python二進製文件的可執行程序:
執行上述命令需要相當長的一段時間,具體時長取決於你的計算機性能。待Bazel完成上述任務後,運行輸出的可執行程序,並傳入一個表示Python wheel文件存儲路徑的參數:
上述命令將在~/tensorflow/bin下創建一個Python.whl文件。請確保你的“tensor-flow”Virtualenv環境處於活動狀態,然後用pip安裝該wheel文件(請注意該二進製文件的具體名稱會依所安裝的TensorFlow版本、所使用的操作係統和Python版本而不同):
如果你擁有多台硬件配置類似的機器,則可使用該wheel文件在這些機器上實現TensorFlow的快速安裝。
至此,TensorFlow便安裝完畢!最後介紹如何安裝Jupyter Notebook和matplotlib。
2.6 安裝Jupyter Notebook
首先,運行下列命令安裝ipython—一個極為有用的交互式Python內核,它也是Jupyter Notebook的核心。筆者強烈推薦同時安裝Python 2和Python 3內核,以便獲得更多的選擇(即執行下列所有命令):
此後,通過兩個命令便可讓你馬上體驗Jupyter Notebook。首先安裝依賴項build-essential:
然後,用pip安裝Jupyter Notebook(若使用的是Python 3,則使用pip3):
官方的安裝指南可從Jupyter網站的下列頁麵獲取:
https://jupyter.readthedocs.io/en/latest/install.html
2.7 安裝matplotlib
在Linux/Ubuntu上安裝matplotlib的方法非常簡單,隻需運行下列命令:
就是這樣簡單!
2.8 測試TensorFlow、Jupyter Notebook及matplotlib
下麵通過一些虛設代碼來複查所有軟件是否都能正常工作。創建一個名為“tf-notebooks”的目錄以便進行測試。進入該目錄,並運行Jupyter Notebook。同樣,請確保“tensorflow”環境處於活動狀態。
最後一條命令將啟動一個Jupyter Notebook服務器,並在你默認的網頁瀏覽器中打開該軟件。假設tf-notebooks目錄下沒有任何文件,那麼將看到一個空的工作空間,以及消息“Notebook list is empty”。要創建新的筆記,可單擊頁麵右上角的“New”按鈕,然後選擇“Python 2”或“Python 3”,具體選擇哪個取決於安裝TensorFlow時使用的是哪個版本的Python。
新筆記將自動打開,呈現在眼前的將是一塊用於工作的白板。下麵為這個筆記設置一個新名稱。在頁麵的頂端單擊“Untitled”。
之後會彈出一個用於對筆記本重命名的窗口,也可用於修改筆記本文件的名稱(擴展名為.ipynb)。你可使用任何自己喜歡的名稱,在本例中筆者將其命名為“My First Notebook”:
下麵來看實際的界麵。我們注意到旁邊有一個“In [ ]:”方塊的空單元格,你可在該單元格內直接鍵入代碼,而且它可容納多行代碼。下麵將TensorFlow、NumPy以及matplotlib的pyplot模塊導入該筆記本:
要運行該單元格,隻需同時按下shift鍵和回車鍵。該單元格中的代碼執行完成後,其下方會自動創建一個新的單元格。我們注意到左邊方框中的提示符變成了“In [1]:”,這意味著該單元格是在內核中運行的第一個代碼塊。在該筆記本中鍵入下列代碼,使用單元格的數量取決於你的需求。你可利用單元格中的分隔符將相關代碼很自然地組織在一起。
下麵這行代碼非常特殊,值得專門介紹:
這是一條專門的命令,用於通知筆記本將matplotlib圖表直接顯示在瀏覽器中。
下麵逐行分析其餘代碼,如果你不理解某些術語,請不必擔心,後麵章節還會一一進行講解:
1)用TensorFlow定義一個由隨機數構成的2×20的矩陣,並將其賦給變量a。
2)啟動TensorFlow Session,並將其賦予一個sess對象。
3)用sess.run()方法執行對象a,並將輸出(NumPy數組)賦給out。
4)將這個2×20的矩陣劃分為兩個1×10的向量x和y。
5)利用pyplot模塊繪製散點圖,x對應橫軸,y對應縱軸。
如果所有軟件均已正確安裝,你將得到與上圖類似的輸出結果。這雖然隻是向前邁出的小小一步,但我們畢竟已經開始上手嚐試TensorFlow,但願這能給你帶來一個良好的體驗。
要想通過更多、更全麵的教程了解Jupyter Notebook的細節,請參考如下頁麵中的示例:
https://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/examples_index.htm
2.9 本章小結
至此,你應當已經擁有了一個可工作的TensorFlow版本。下一章將介紹若幹TensorFlow的基礎概念,並用這個庫構建自己的模型。如果在安裝TensorFlow中遇到任何問題,建議首先參考如下的官方指南:
https://www.tensorflow.org/versions/master/get_started/os_setup.html
PART 2
TensorFlow
最後更新:2017-05-19 15:32:31