天天看點

《面向機器智能的TensorFlow實踐》一2.1 選擇安裝環境

本節書摘來自華章出版社《面向機器智能的tensorflow實踐》一書中的第2章,第2.1節,作者 山姆·亞伯拉罕(sam abrahams)丹尼亞爾·哈夫納(danijar hafner)[美] 埃裡克·厄威特(erik erwitt)阿裡爾·斯卡爾皮内裡(ariel scarpinelli),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

第2章

安裝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安裝方法。