TensorFlow 學習小結(3) - 開發環境【在虛擬機裏安裝】

TensorFlow API支持Python 2.7和Python 3.3+,共支持4種安裝方式。
• Pip install
• Virtualenv install
• Anaconda install
• Docker install
其中大部分支持Linux和Mac OS,由於主要開發環境是Windows,我選擇了最爲靈活的docker方式安裝TensorFlow。TensorFlow還有GPU支持版本,本文僅探索CPU-Only版本。

Docker

其安裝步驟可詳見 《Docker的安裝與基礎開發》.

概念

借用Docker官網最大的一行字。
Docker allows you to package an application with all of its dependencies into a standardized unit for software development.
從功能上講,Docker也可以理解爲一種虛擬化的方案,可以通過構建包含不同軟件的鏡像,來達到快速部署開發環境的目的。
再借用官網的一張圖,左邊藍色的部分從kernel開始一層層加了debian, emacs, apache形成了一個Image,每一層都是隻讀的,運行這個Image的時候,上面蓋上了一層可讀寫的Container,做一些編輯和修改,一個簡單的服務器就可以用了;又如右邊橘紅色的部分,Kernel的上面加上了BusyBox就形成了Image,運行起來之後就可以以非常輕量級的方式運行起busybox中支持的命令。再有接下來要學習的TensorFlow鏡像,就包含了運行它所需要的全部依賴,簡單操作就可以完成TensorFlow開發環境的搭建。
在這裏插入圖片描述

安裝

第一步:確認系統版本

首先確認自己的系統是WIN 7或更新的64位系統,且需要支持硬件虛擬化技術。
Win 8及以上查看方法:
在這裏插入圖片描述
Win 7查看方法:
Win 7 運行Microsoft® Hardware-Assisted Virtualization Detection Tool這一工具執行檢查。
注:如果查看到未啓用硬件虛擬化技術,需要進入BIOS進行設置。
在這裏插入圖片描述
在虛擬機VM裏的設置方式如下:
在這裏插入圖片描述
完成之後就可以繼續下一步了。

第二步:安裝Docker Toolbox
安裝過程會安裝Docker的各個組件和Oracle VirtualBox,因爲Docker需要依賴Linux內核的一些特性,因此Mac和Windows都需要在機器上運行一個小型的Linux系統作爲Host系統。如果已經安裝過VirtualBox的最新版本,則無需重新安裝。
在這裏插入圖片描述
自行選擇安裝路徑,如果已經安裝過Git也可以去掉該工具的勾選,VirtualBox也是一樣,其它可一路Next。

第三步:測試Docker Toolbox是否安裝成功
命令>cmd>鍵入docker-machine。如果出現想的介紹版本、路徑等的信息即可。
在這裏插入圖片描述

配置

安裝完成後,建議先配置一個環境變量MACHINE_STORAGE_PATH。
在這裏插入圖片描述
設置完成之後,WIN+R鍵輸入cmd,打開一個windows命令行窗口。
輸入此命令:docker-machine create default -d virtualbox

新建一個虛擬機default,使用virtualbox作爲driver,這個虛擬機會自動創建在你的MACHINE_STORAGE_PATH配置的目錄中,安裝過程會從github上拉取boot2docker.iso,可能會比較慢,可以手動下載,也可以直接將toolbox安裝目錄下的boot2docker.iso複製到%MACHINE_STORAGE_PATH%/cache中。
在這裏插入圖片描述
還要注意過程中可能會出現一些要求Windows執行權限的窗口,有些會最小化在任務欄上,請一一賦予權限。
建立完成之後鍵入 docker-machine ls 查看剛剛新建的虛擬機。
在這裏插入圖片描述
這時候如果使用的CMD還不能與Docker Engine建立連接,可以通過命令
docker-machine env default 查看如何設置。
在這裏插入圖片描述
鍵入下面的命令完成環境變量配置
FOR /F "tokens=*" %i IN ('docker-machine env default') DO %i
在這裏插入圖片描述

TensorFlow鏡像

下載鏡像

命令:
docker pull gcr.io/tensorflow/tensorflow
Tensorflow 是Google的一個開源機器學習框架,中國大陸的用戶在使用的時候往往需要爬過GFW牆,藉助VPN。
也可以不用從Tensorflow給出的庫(Google Cloud Platform)進行pull,而是用docker的庫(docker hub)。
命令:
docker pull tensorflow/tensorflow

啓動鏡像

命令:
docker run –it 8888:8888 tensorflow/tensorflow bash
也可以使用下面的命令將下載和啓動鏡像結合在一塊進行:
docker run -it -p 8888:8888 tensorflow/tensorflow
在這裏插入圖片描述

因爲這個鏡像比較大,所以會需要一定的時間pull,耐心等待就好。等待完成後便進入了該容器root用戶下了。
在這裏插入圖片描述
注意到/目錄下的run_jupyter.sh,這事實上是當前版本tensorflow啓動的默認命令,也就是說,如果在啓動鏡像時沒有指定bash,就會默認運行這個腳本,這與一些稍早一些版本的tensorflow不同,許多教程中也還沒有提到,可能會造成困惑,嘗試了一下docker run -it tensorflow/tensorflow,它會啓動一個notebook的服務,運行在本地的8888端口上,但這樣就想從windows的瀏覽器上打開notebook是不行的,這與docker本身的機制和運行在虛擬上兩個原因有關,如果就想看到notebook,得完成更多必要配置的端口轉發部分,本文不做敘述。
接下來,就可以使用TensorFlow工具編寫了一個Hello world應用,並輸出字符串和進行簡單的運算。
在這裏插入圖片描述
在這裏插入圖片描述
從這段簡單的代碼可以瞭解到TensorFlow的使用非常方便,通過Python標準庫的形式導入,不需要啓動額外的服務。第一次接觸TensorFlow可能比較疑惑,這段邏輯Python也可以實現,爲什麼要使用tf.constant()和tf.Session()呢?其實TensorFlow通過Graph和Session來定義運行的模型和訓練,這在複雜的模型和分佈式訓練上有非常大好處。

注:會話Session結束的時候一定要關閉

TF目錄

在這裏插入圖片描述
(1)、目錄core
該目錄爲tensorflow的C++源碼的核心存放地點。
以下是對該目錄下的幾個主要模塊(目錄)的功能介紹

  • 目錄common_runtime 該目錄下包含了tensorflow中session執行的通用邏輯流程。
  • 目錄distributed_runtime tensorflow 與分佈式相關的執行邏輯。
  • 目錄graph tensorflow圖相關操作的邏輯。由於tensorflow中的數據計算本質上是一個圖狀結構的計算流程,該過程中存在將圖進行切分並且並行化執行的可能性。該目錄下的代碼邏輯即爲對圖數據進行結構化定義並進行拆分的相關內容。
  • 目錄framework 該目錄下對tensorflow進行計算過程中的通用組件進行了定義和實現。
  • 目錄kernels 對tensorflow中各個單步操作的具體實現。 該目錄中共有約470個文件,其中414個文件和op相關,該目錄下包含了大量的tensorflow中單步操作的實現方式。(如Variable())
  • 目錄ops 對kernel/ 下的op進行註冊和對外聲明。
  • 目錄models 實現了幾個tensorflow支持的計算模型,該部分代碼由python實現。
  • 目錄client/public tensorflow對外api的定義和實現
  • 目錄util/lib 一些公用的調用方法。
  • 目錄protobuf tensorflow下各個模塊間進行數據傳輸的數據結構定義,通過proto進行配置實現。
  • 目錄user_ops 用戶可進行編寫自己的op並添加到該目錄。

(2)、目錄python
該目錄下存放了tensorflow使用python編寫的相關代碼,個人感覺該部分代碼主要是使用python封裝了相關的機器學習算法,但最終的計算操作是通過調用目錄core 中的C++邏輯實現的。這樣做的好處是利用了python較方便的編程特性和C++較高效的執行效率。

(3)、目錄tensorboard tensorborad
tensorflow中非常有特色的一個模塊,該模塊可以用於生成模型訓練中實時生成圖表,用於監控模型的訓練程度。

(4)、目錄models
該目錄下存放這多個使用pyton實現的模型實例。

(5)、目錄contrib
該目錄下存放有其他項目貢獻者添加的相關貢獻代碼,由於tensorflow受關注程度較高,目前該目錄正急劇膨脹。
其他等等。

相應命令

docker run -i -t (image id/name),以交互模式啓動一個容器,會創建一個新的容器。
docker exec [參數] (container id/name) [命令],進入容器執行命令。
docker ps/docker ps –a,查看運行的容器/查看全部的容器。
docker rm (container id/name),刪除容器,需要停止容器(或者強制刪除)。
docker start/restart (container id/name),啓動/重啓容器。
docker stop (container id/name)/docker kill (container id/name),停止/殺掉容器。
docker attach (container id/name),進入已啓動的容器,而不是每次run image。ctrl+d 退出容器且關閉,ctrl+p+q 退出容器但不關閉。
在這裏插入圖片描述

磁盤映射

磁盤映射是非常有用的一步配置,可以將Windows上的磁盤直接映射到容器中,這樣在Windows上開發代碼,直接在容器中運行,避免了寫完複製的大麻煩。磁盤映射的處理方法與端口轉發類似,磁盤的映射關係需要完成Windwos到虛擬機,虛擬機到容器的兩步配置,請跟隨下面4個步驟:

Windows和虛擬機間的磁盤映射

打開虛擬機的設置頁面後,在共享文件夾中設置你想要共享的文件夾和它的名稱,如圖,重啓虛擬機。
在這裏插入圖片描述

Visual BOX 共享文件映射

這一步要用到剛纔設置的名稱,這裏就是docker。
mkdir -p /home/docker/data
mount -t vboxsf -o uid=1000,gid=50 ShareName /home/docker/data

虛擬機和容器間的磁盤映射

使用-v選項,建立兩個目錄的映射關係
docker run -it -v /home/docker/data:/data tensorflow/tensorflow /bin/bash
好了,試試在Windows的共享文件夾中添加一個python的hello world,然後在docker中python /data/hello.py試試吧在這裏插入圖片描述

配置啓動腳本

用docker-machine創建的虛擬機,它的大部分目錄在重啓之後都會復原,除了/mnt/sda1,這個目錄也就是虛擬機的虛擬磁盤文件disk.vmdk所掛載的位置,可以修改裏面的/mnt/sda1/var/lib/boot2docker/profile文件,在文件最後添加自定義的啓動命令,比如說添加前面的磁盤映射,就是在profile文件最後加上下面這兩句。
mkdir -p /home/docker/data
mount -t vboxsf -o uid=1000,gid=50 ShaneName /home/docker/data
這樣每次虛擬機啓動就會完成磁盤的掛載了。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章