- 原文地址:Getting started with TensorFlow —— IBM
- 原文做者:Vinay Rao
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:JohnJiangLA
- 校對者:CACppuccino & atuooo
在機器學習的世界中, tensor 是指數學模型中用來描述神經網絡的多維數組。換句話說,一個 tensor 一般是一個廣義上的高維矩陣或者向量。html
經過使用矩陣的秩來顯示維數的簡單方法,tensor 可以將複雜的 n 維向量和超形狀表示成 n 維數組。Tensor 有兩個屬性:數據類型和形狀。前端
TensorFlow 是一個開源的深度學習框架,它基於 Apache 2.0 許可發佈於 2015年末。從那時起,它就成爲世界上最普遍採用的深度學習框架之一(由 Github 上基於它的項目數量得出)。java
TensorFlow 源自 Google DistBelief,它是由 Google Brain 項目組開發並全部的深度學習系統。Google 從零開始設計它,用於分佈式處理,並在 Google 產品數據中心中以最佳模式運行在定製的應用專用集成電路(ASIC)上,這種集成電路一般也被叫作 Tensor Processing Unit(TPU)。這種設計可以開發出有效的深度學習應用。python
這個框架可以運行在 CPU、 GPU 或者 TPU 上,能夠在服務器、臺式機或者移動設備上使用。開發者能夠在不一樣的操做系統和平臺上部署 TensorFlow,並且不管是在本地環境仍是雲上。許多開發者會認爲,相比相似的深度學習框架(好比 Torch 和 Theano,它們也支持硬件加速技術並被學術界普遍使用),TensorFlow 可以更好地支持分佈式處理,而且在商業應用中擁有更高靈活性和性能表現。react
深度學習神經網絡一般是由多個層組成。它們使用多維數組在層之間傳遞數據或執行操做。一個 tensor 在神經網絡的各層之間「流動」(Flow)。所以,命名爲 TensorFlow。linux
TensorFlow 使用的主要編程語言是 Python。爲 C
++、 Java® 語言和 Go 提供了可用但不保證穩定性的的應用程序接口(API),一樣也有不少爲 C
#,Haskell, Julia,Rust,Ruby,Scala,R 甚至是 PHP 設計的第三方的綁定。Google 近來發布了一個爲移動設備優化的 TensorFlow-Lite 庫,以使 TensorFlow 應用程序能在 Android 上運行。android
這個教程提供了 TensorFlow 系統的概述,包括框架的優勢,支持的平臺,安裝的注意事項以及支持的語言和綁定。ios
TensorFlow 爲開發者提供了不少的好處:git
本節將介紹 TensorFlow 擅長的應用程序。顯然,因爲 Google 使用其專有版本的 TensorFlow 開發文本和語音搜索,語言翻譯,和圖像搜索的應用程序,所以 TensorFlow 的的主要優點在於分類和推測。例如,Google 在 TensorFlow 中應用 RankBrain(Google 的搜索結果排名引擎)。github
TensorFlow 可用於優化語音識別和語音合成,好比區分多重聲音或者在高噪背景下過濾噪聲提取語音,在文本生成語音過程當中模擬語音模式以得到更天然的語音。另外,它可以處理不一樣語言中的句型結構以生成更好的翻譯效果。它也一樣能被用於圖像和視頻識別以及對象、地標、人物、情緒、或活動的分類。這帶來了圖像和視頻搜索的重大改進。
由於其靈活,可擴展和模塊化的設計,TensorFlow 不會限制開發人員使用特定的模型或者應用。開發者使用 TensorFlow 不只實現了機器學習和深度學習算法,還實現了統計和通用計算模型。有關應用程序和社區模型的更多信息請查看使用 TensorFlow。
各類只要支持 Python 開發環境的平臺就能支持 TensorFlow。可是,要接入一個受支持的 GPU,TensorFlow 須要依賴其餘的軟件,好比 NVIDIA CUDA 工具包和 cuDNN。爲 TensorFlow(1.3 版本)預構建的 Python 二進制文件(當前發佈)可用於下表中列出的操做系統。
注意: 在 Ubuntu 或 Windows 上得到 GPU 加速支持須要 CUDA 工具包 8.0 和 cuDNN 6 或更高版本,以及一塊可以兼容這個版本的工具包和 CUDA Computer Capability 3.0 或更高版本的 GPU 卡。macOS 上 1.2 版本以上的 TensorFlow 再也不支持 GPU 加速。
詳情請參考安裝 TensorFlow。
官方使用 Bazel 在 Ubuntu 和 macOS 構建 TensorFlow。在 Windows 系統下使用 Windows 版本 Bazel 或者 Windows 版 CMake 構建如今還在試驗過程當中,查看 從源代碼構建 TensorFlow 。
IBM 在 S822LC 高性能計算系統上使用 NVIDIA NVLink 鏈接線鏈接兩塊 POWER8 處理器和四塊 NVIDIA Tesla P100 GPU 以使 PowerAI 適合進行深度學習。開發者可以在運行 OpenPOWER Linux 的 IBM Power System 上構建 TensorFlow。要了解更多信息能夠查看深度學習在 OpenPOWER 上: 在 OpenPOWER Linux 系統上構建 TensorFlow 。
不少社區或供應商支持的構建程序也可用。
爲了支持在更普遍的處理器和非處理器架構上使用 TensorFlow,Google 爲供應商提供了一個新的抽象接口,實現用於加速線性代數(XLA)的新硬件後端,XLA 是一個專爲線性代數計算的特定領域編譯器,它能夠用於優化 TensorFlow 計算過程。
當前,因爲 XLA 仍是實驗性的,TensorFlow 仍是在 X64 和 ARM64 CPU 架構上受支持,被測試和構建。在 CPU 架構上,TensorFlow 經過使用矢量處理擴展來實現加速線性代數計算。
以 Intel CPU 爲中心的 HPC 體系結構(如 Intel Xeon 和 Xeon Phi 系列)經過使用 Intel 數學核心函數庫來實現深度神經網絡基元,從而得到加速線性代數計算。Intel 也提供了擁有優化線性代數庫的預構建的 Python 優化發行版。
其餘供應商,例如 Synopsys 和 CEVA,使用映射和分析器程序轉換 TensorFlow 流圖和生成優化代碼在他們的平臺上運行。開發者在使用這種途徑時須要移植,分析並調整結果代碼。
TensorFlow 支持特定的 NVIDIA GPU ,這些 GPU 可以兼容相關版本的 CUDA 工具包並符合相關的性能標準。儘管一些社區努力在 OpenCL 1.2 兼容的 GPU (好比 AMD 的)上運行 TensorFlow,OpenCL 支持還是一個正在計劃建設的項目,
據 Google 稱,基於 TPU 的流圖比 CPU 或 GPU 上執行性能好 15-30 倍,而且很是節能。Google 將 TPU 設計成一個外部加速器,能夠插入串行 ATA 硬盤插槽,並經過 PCI Express Gen3 x16 接口鏈接主機,從而實現高帶寬吞吐。
Google TPU 是矩陣處理器而不是矢量處理器,而且神經網絡不須要高精度的數學運算,而是使用大規模並行的低精度整數運算。絕不奇怪,矩陣處理器(MXU)結構具備 65,536 8-bit 乘法器,並經過脈動陣列結構波動推進數據,就像經過心臟的血液同樣。
這種設計是一種複雜的指令集計算(CISC)結構,雖然是單線程的,但容許單個高級指令觸發 MXU 上的多個低級操做,每次循環可能會執行 128,000 條指令,而不用訪問內存。
所以,與 GPU 陣列或者多指令集、多數據 CPU HPC 集羣相比,TPU 能夠得到巨大的性能提高和能效比率。經過評估每一個週期中 TensorFlow 流圖中每一個預備執行節點,TPU 相比其餘架構,大大減小了深度學習神經網絡訓練時間,
通常來講,TensorFlow 能夠在任何支持 64 位 Python 開發環境的平臺上運行。這個環境足以訓練和測試大多數簡單的例子和教程。然而,大多數專家認爲,對於研究或專業開發,強烈推薦使用 HPC 平臺。
因爲深度學習計算量很是大,所以具備向量擴展的高速多核 CPU 以及一個或多個具備高端 CUDA 支持的 GPU 是深度學習的普通標準。大多數專家還建議要注意 CPU 和 GPU 緩存,由於內存傳輸操做的能源消耗大,對性能不利。
深度學習的性能表現有兩種模式須要考慮:
用於深度學習的虛擬機(VMS)如今最適用於 CPU 爲中心多核心可用的硬件體系。由於主機操做系統控制了 CPU, GPU 這些物理設備,因此在虛擬機上實現加速很複雜。有兩種已知方法:
在 Docker 容器或者 Kubernetes 容器集羣系統上運行 TensorFlow 有不少優點。TensorFlow 能夠將流圖做爲執行任務分發給 TensorFlow 服務器集羣,而這些服務集羣實際上是映射到容器集羣的。使用 Docker 的附加優點是 TensorFlow 服務器能夠訪問物理 GPU 核心(設備)併爲其分配特定的任務。
開發者還能夠經過安裝社區構建的 Docker 鏡像,在 PowerAI OpenPOWER 服務器上的 Kubernetes 容器集羣系統中部署 TensorFlow,如「在 OpenPOWER 服務器上使用 PowerAI 的 Kubernetes 系統進行 TensorFlow 訓練 」。
TensorFlow 雲安裝有幾種選項:
儘管 Google 在 C
++ 中實現了 TensorFlow 核心代碼,可是它的主要編程語言是 Python,並且這個 API 是最完整的,最強大的,最易用的。更多有關信息,請參閱 Python API 文檔。Python API 還具備最普遍的文檔和可擴展性選項以及普遍的社區支持。
除了 Python 以外,TensorFlow還支持如下語言的 API,但不保證穩定性:
C
++。TensorFlow C
++ API 是下一個最強大的 API,可用於構建和執行數據流圖以及 TensorFlow 服務。更多有關 C
++ API 的信息,請參閱C++ API。有關 C
++ 服務 API 的更多信息,請參閱 TensorFlow 服務 API 參考。Google 已經定義了一個外部函數接口(FFI)來支持其餘語言綁定。該接口使用 C
API 暴露了 TensorFlow C
++ 核心函數。FFI 是新的,可能不會被現有的第三方綁定使用。
一項對 GitHub 的調查顯示,有如下語言的社區或供應商開發的第三方 TensorFlow 綁定 C
#,Haskell, Julia,Node.js,PHP,R,Ruby,Rust 和 Scala。
如今有一個通過優化的新 TensorFlow-Lite Android 庫來運行 TensorFlow 應用程序。更多有關信息,請參考 What's New in Android: O Developer Preview 2 & More。
Keras 的層和模型徹底兼容純粹的 TensorFlow tensor。所以,Keras 爲 TensorFlow 提供了一個很好的模型定義插件。開發者甚至能夠將 Keras 與 其餘 TensorFlow 庫一塊兒使用。有關詳細信息,請參考 使用 Keras 做爲 TensorFlow 的簡要接口: 教程。
TensorFlow 只是許多用於機器學習的開源軟件庫之一。可是,根據它的 GitHub 項目數量,它已經成爲被最普遍採用的深度學習框架之一。在本教程中,您瞭解了 TensorFlow 的概述,瞭解了哪些平臺支持它,並查看了安裝注意事項。
若是你準備使用 TensorFlow 查看一些示例,請查看 機器學習算法加快訓練過程 和 使用 PowerAI notebooks 進行圖像識別訓練中的開發者代碼模式。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、React、前端、後端、產品、設計 等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。