摘要:它是目前最流行的容器解決方案。提供一次性的環境。端駐守在后臺,稱之為。入門指南簡介是一個使用數據流圖進行數值計算的開放源代碼軟件庫。學習資料官網中文社區官方文檔中文版極客學院什么是數據流圖數據流圖用結點和線的有向圖來描述數學計算。
轉載需經本人同意且標注本文原始地址:https://zhaomenghuan.github.i...前言
第一次聽到 Docker 這個詞,是兩年前找實習工作的時候,參與了 DaoCloud 的前端電話面試,了解到這家專注于做容器技術的公司,當時對于容器這些完全沒有概念,只是覺得 Docker 是一個很高大上的技術,后來選擇了自己相對擅長的移動開發,去了 DCloud。轉眼間已經過了兩年,現在人工智能和云計算已經不僅僅是風口,而是很多技術實現的基礎設施。
今年打算學習一下人工智能領域一些最最基礎的內容, 不至于幾年后被市場淘汰吧。這段時間先學習一下谷歌的 TensorFlow 框架,正所謂"工欲善其事,必先利其器",第一步先必須搭建好開發環境,TensorFlow 目前可支持如下幾種方式安裝:
Virtualenv
Pip
Docker
Anaconda
從源代碼安裝
因為后續可能也會深入玩一下 Docker,所以對于 TensorFlow 的安裝選用 Docker 的方式安裝。
Docker 入門指南 Docker 是什么?軟件開發最大的麻煩事之一,就是環境配置。用戶計算機的環境都不相同,你怎么知道自家的軟件,能在那些機器跑起來?Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Docker 將應用程序與該程序的依賴,打包在一個文件里面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器里運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。
Docker 通過 Docker Engine 運行在操作系統 OS 上,虛擬機運行在硬件資源上。
通俗的講 Docker 是一個“碼頭工人”,將我們需要的貨物(應用)打包成具有某種標準規格的集裝箱(鏡像)內。docker 在部署過程中,將安裝,配置等重復的部分自動化完成。只需要在第一次部署時,構建完可用的 docker 鏡像(裝好集裝箱),在以后使用中,短短的幾行命令就可以直接拉取鏡像,根據這個鏡像創建出一個容器,把服務跑起來了。所需要的僅僅是安裝了 docker 的服務器,一個 Dockerfile 文件(裝箱清單),以及比較流暢的網絡而已,真可謂『一次構建,到處部署』
Docker 的主要用途,目前有三大類。
提供一次性的環境。比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。
提供彈性的云服務。因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。
組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。
Docker 總架構圖docker 系統使用了 C/S 的架構,docker client 通過 REST API 請求 docker daemon 來管理 docker 的鏡像和容器等。Server 端駐守在后臺,稱之為 docker daemon。Client 端是一個 CLI 程序,可以在命令行中通過 docker 這個二進制文件進行交互。
安裝 DockerDocker 是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。
官方文檔:https://docs.docker.com/
MAC 環境下 Docker CE 的安裝: https://docs.docker.com/docker-for-mac/install/
安裝完成后,運行下面的命令,驗證是否安裝成功。
$ docker --version Docker version 18.03.0-ce, build 0520e24 $ docker-compose --version docker-compose version 1.20.1, build 5d8c71b $ docker-machine --version docker-machine version 0.14.0, build 89b8332Docker Registry
Docker 遠程鏡像倉庫:
DockerHub:https://hub.docker.com/
DaoCloud:https://hub.daocloud.io/
Aliyun:https://dev.aliyun.com/search...
在安裝環境的過程中,因為某個偉大的防火墻工程,我們需要的大部分資源都沒法順利的獲取到,解決辦法就是將下載的源換成國內某些廠商提供的鏡像源。
Docker ImageDocker Image(鏡像) 是用來創建 docker Container(容器) 的只讀模版,其中包含了容器啟動所需要的所有配置信息和運行程序,一次構建之后可以多次復用。
只有通過這個文件,才能生成 Docker Container(容器),Docker 根據 image 文件生成容器的實例,同一個 image 文件,可以生成多個同時運行的容器實例。實際場景下,一般我們自己創建的鏡像都會依賴于某個 Linux 操作系統的鏡像,例如 ubuntu,大多數情況下,我們可稱其為基礎鏡像,但是我們也可以查看 ubuntu 鏡像的 Dockerfile 會發現,它也是依賴于一個叫 scratch 的鏡像,scratch 是 docker 的一個空鏡像,里面只有 docker 加入的一些元數據,如果我們想要追求自己的鏡像盡可能的輕量,也可以將 scratch 鏡像作為我們的基礎鏡像來構建。
image 相關的命令:
# 將 image 文件從倉庫抓取到本地 docker image pull hello-world # 列出本機的所有 image 文件。 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ae513a47849c 3 weeks ago 109MB hello-world latest e38bc07ac18e 6 weeks ago 1.85kB # 刪除 image 文件 $ docker image rm [imageName]
在 MacOS 下,Docker images 保存在哪個路徑下?
如果你使用的是 Docker for Mac 版本,那么所有的 docker images 保存在下面這個文件里。
/Users/{YourUserName}/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2Docker Container
Docker Container(容器) 中包含了我們的應用代碼和代碼執行的環境,是用來打包分發代碼的單元。image 文件生成的容器實例,本身也是一個文件,稱為容器文件。
# 列出本機正在運行的容器,使用 docker container ls 或 docker ps $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b15f63d6e87a nginx "nginx -g "daemon of…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp webserver # 列出本機所有容器,包括終止運行的容器,加上 --all 獲取 -a $ docker container ls -a # 停止本機正在運行的容器 $ docker container stop webserver # 可以刪除某個容器 $ docker rm container_name/container_id # 啟動某個容器 $ docker start container_name/container_id # 終止某個容器 $ docker stop container_name/container_id # 在容器中執行 /bin/bash,執行該命令之后將可以以交互命令行的方式操作容器,另外 /bin/bash 可以替換成任意可執行命令 $ docker exec -it contaner_name /bin/bash
創建容器來執行應用代碼,具體用到 run 命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例如,我們要創建一個運行 nginx 的容器,可以執行:
docker run -d -p 80:80 --name webserver nginx
在 Web 瀏覽器中,轉到 http://localhost/ 查看 nginx 主頁。因為我們指定了默認的 HTTP 端口,所以不需要在 URL 的末尾追加:80。
參數的意義:
-d 參數表示后臺守護進程運行容器
--name 參數表示容器的名稱,可隨意取
-v 表示主機和容器共享文件的映射,容器的目錄就是 Dockerfile 中用 VOLUME 命令定義的目錄
-p 表器主機和容器端口映射,容器的端口就是 Dockerfile 中用 EXPOSE 命令綁定的端口
DockerfileDockerfile 是用來說明如何自動構建 docker image 的指令集文件,在 Dockerfile 中編寫好指令集之后,我們就可以通過 docker build 命令構建鏡像,Dockerfile 文件中命令的順序就是構建過程中執行的順序。
Dockerfile reference:https://docs.docker.com/engin...
以下為幾個常用的指令:
FROM:依賴鏡像,所有 Dockerfile 都必須以 FROM 命令開始,表示其依賴的鏡像。
FROM image_name
RUN:在 shell 或者 exec 的環境下執行的命令
RUN
ADD:將主機文件復制到容器中
ADD /path/to/sourcefile/in/host /path/to/targetfile/in/container
CMD:指定容器啟動默認執行的命令
CMD ["executable","param1","param2"]
EXPOSE:指定容器在運行時監聽的端口
EXPOSE
WORKDIR:指定 RUN、CMD 與 ENTRYPOINT 命令的工作目錄
WORKDIR /path/to/workdir/in/container
VOLUME:授權訪問從容器內到主機上的目錄
VOLUME ["/data"]Hello World
我們這里也來跑一個 Hello World,打開命令行終端:
$ docker run hello-world Unable to find image "hello-world:latest" locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
這里在命令行終端輸出了Hello from Docker!,至此完成了我們的第一個 Docker 實例。這里我們是直接使用了 docker run 來創建容器來執行應用代碼,如果本地沒有 hello-world 鏡像文件,則會先從服務上拉取鏡像文件。Docker 官方提供的 image 文件,都放在 library 組里面,所以它的是默認組。我們也可以先使用 docker image pull hello-world 先下載鏡像文件,然后再運行容器。這里我們也可以通過寫 Dockerfile 文件完成上述功能。我們上述的 hello-world 鏡像文件可以在這里查看:https://github.com/docker-lib...。
TensorFlow 入門指南 TensorFlow 簡介TensorFlow? 是一個使用數據流圖進行數值計算的開放源代碼軟件庫。圖中的節點代表數學運算,而圖中的邊則代表在這些節點之間傳遞的多維數組(張量)。借助這種靈活的架構,您可以通過一個 API 將計算工作部署到桌面設備、服務器或移動設備中的一個或多個 CPU 或 GPU。TensorFlow 最初是由 Google Brain 團隊(隸屬于 Google 機器智能研究部門)中的研究人員和工程師開發的,旨在用于進行機器學習和深度神經網絡研究。但該系統具有很好的通用性,還可以應用于眾多其他領域。學習資料
TensorFlow 官網
TensorFlow github
TensorFlow 中文社區
TensorFlow 官方文檔中文版-極客學院
什么是數據流圖(Data Flow Graph)?數據流圖用“結點”(nodes)和“線”(edges)的有向圖來描述數學計算?!肮濣c” 一般用來表示施加的數學操作,但也可以表示數據輸入(feed in)的起點/輸出(push out)的終點,或者是讀取/寫入持久變量(persistent variable)的終點。“線”表示“節點”之間的輸入/輸出關系。這些數據“線”可以輸運“size 可動態調整”的多維數據數組,即“張量”(tensor)。張量從圖中流過的直觀圖像是這個工具取名為“Tensorflow”的原因。一旦輸入端的所有張量準備好,節點將被分配到各種計算設備完成異步并行地執行運算。
TensorFlow 中的所有計算都會被轉化為計算圖上的節點。計算圖中的每個節點可以有任意多個輸入和任意多個輸出,每個節點描述了一種運算操作(operation, op),節點可以算作運算操作的實例化(instance)。計算圖描述了數據的計算流程,它也負責維護和更新狀態,用戶可以對計算圖的分支進行條件控制或循環操作。用戶可以使用 pyton、C++、Go、Java 等語言設計計算圖。tensorflow 通過計算圖將所有的運算操作全部運行在 python 外面,比如通過 c++運行在 cpu 或通過 cuda 運行在 gpu 上,所以實際上 python 只是一種接口,真正的核心計算過程還是在底層采用 c++或 cuda 在 cpu 或 gpu 上運行。
一個 TensorFlow圖描述了計算的過程. 為了進行計算, 圖必須在會話(session)里被啟動. 會話將圖的op分發到諸如CPU或GPU之的備上, 同時提供執行op的方法. 這些方法執行后, 將產生的tensor返回. 在Python語言中, 返回的tensor是numpy ndarray對象; 在C和C++語言中, 返回的tensor是tensorflow::Tensor實例。
從上面的描述中我們可以看到,tensorflow的幾個比較重要的概念:tensor, computation graphy, node, session。正如前面所說,整個操作就好像數據(tensor)在計算圖(computation graphy)中沿著邊(edge)流過(flow)一個個節點(node),然后通過會話(session)啟動計算。所以簡單來說,要完成這整個過程,我們需要的東西是要定義數據、計算圖和計算圖上的節點,以及啟動計算的會話。所以在實際使用中我們要做的大部分工作應該就是定義這些內容了。
使用 Docker 安裝 TensorFlow上述我們已經說明了 Docker 的基本概念,閱讀這步前確保你已經理解了創建一個容器的基本流程。本節的內容主要介紹啟動一個包含了 TensorFlow 二進制映像的 Docker 容器。
要啟動一個包含 TensorFlow 二進制映像的 Docker 容器,請輸入以下格式的命令:
$ docker run -it -p hostPort:containerPort TensorFlowImage
其中:
“-p hostPort:containerPort”為可選項。如果您想從 shell 運行 TensorFlow 程序,請省略此選項。如果您想從 Jupyter Notebook 運行 TensorFlow 程序,請將“hostPort”和“containerPort”設置為 8888。 如果您想在容器內部運行 TensorBoard,請再添加一個 -p 標志,并將“hostPort”和“containerPort”設置為 6006。
“TensorFlowImage”是必填項。它指示 Docker 容器。 您必須指定下列某一個值:
gcr.io/tensorflow/tensorflow:TensorFlow 二進制映像。
gcr.io/tensorflow/tensorflow:latest-devel:TensorFlow 二進制映像以及源代碼。
gcr.io 是 Google Container Registry。dockerhub 上也提供了一些 TensorFlow 鏡像。Docker 將在您第一次啟動 TensorFlow 二進制映像時下載該鏡像。
例如,以下命令會在一個 Docker 容器中啟動一個 TensorFlow CPU 二進制映像,您可以通過該容器在 shell 中運行 TensorFlow 程序:
$ docker run -it gcr.io/tensorflow/tensorflow bash
然后從 shell 中調用 Python,如下所示:
$ python
在 Python 交互式 shell 中輸入以下幾行簡短的程序代碼:
# Python import tensorflow as tf hello = tf.constant("Hello, TensorFlow!") sess = tf.Session() print(sess.run(hello))
如果系統輸出以下內容,則說明您可以開始編寫 TensorFlow 程序了:
Hello, TensorFlow!
實際效果圖如下:
以下命令也可在 Docker 容器中啟動一個 TensorFlow CPU 二進制映像。但是,在這個 Docker 容器里,您可以在 Jupyter Notebook 中運行 TensorFlow 程序:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
這里我通過瀏覽器在 Jupyter Notebook 中正常運行了上面的代碼。
實際效果圖如下:
參考Docker 入門教程
Docker 實踐系列文章
在 macOS 上安裝 TensorFlow
寫文章不容易,也許寫這些代碼就幾分鐘的事,寫一篇大家好接受的文章或許需要幾天的醞釀,然后加上幾天的碼字,累并快樂著。如果文章對您有幫助請我喝杯咖啡吧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27324.html
摘要:的開發環境有很多,可以在上搭建,也可以使用管理工具搭建,也可以直接在本機中安裝。例如創建開發環境點擊左下角,彈出創建開發環境框,輸入環境名和選擇類型即可。以上內容是我們需要搭建開發環境的全部內容。 tensorflow的開發環境有很多,可以在Docker上搭建,也可以使用Anaconda管理工具搭建,也可以直接在本機中安裝tensorflow。在這里為了工具包的方便管理,我選擇使用An...
摘要:最近很火,所以,也跟著未來的大趨勢學下,并將應用到項目開發中。容器是完全使用沙箱機制,相互之間不會有任何接口類似的更重要的是容器性能開銷極低。在中搜索搜索的范圍是官方鏡像和所有個人公共鏡像。的應用都是以這種格式發布到倉庫中,供大家使用。 Docker 最近很火,所以,也跟著未來的大趨勢學下docker,并將docker 應用到項目開發中。 一、什么是docker Docker 是一個開...
摘要:圖和之間的關系圖例與各版本之間的環境依賴關系的原裝驅動并不支持,因此需要禁用掉并且重裝卡官方驅動。會有很多同學在不知道的情況下安裝了,最后導致和無法使用或者無法安裝等問題。 ...
摘要:基于和容器的深度學習環境搭建云主機操作系統位安裝安裝如果沒有,需安裝安裝安裝有兩種方式安裝安裝本文選擇安裝方式。 基于Nvidia GPU和Docker容器的深度學習環境搭建 GPU云主機: 操作系統:Ubuntu 16.04 64位 GPU: 1 x Nvidia Tesla P40 1. 安裝CUDA Driver 1.1 Pre-installation Actions ...
閱讀 1435·2021-09-02 19:23
閱讀 1586·2021-08-11 11:19
閱讀 640·2019-08-30 15:55
閱讀 1651·2019-08-30 12:50
閱讀 2240·2019-08-30 11:23
閱讀 2179·2019-08-29 13:13
閱讀 1499·2019-08-28 18:13
閱讀 3343·2019-08-26 11:53