從硬體配置到框架選擇,請以這種姿勢入坑深度學習

2021-08-10 22:58:20 字數 2860 閱讀 4125

搭建深度學習系統需要哪些硬體、軟體、環境、課程和資料?本文將為我們一次解答這些問題。
深度學習初學者經常會問到這些問題:開發深度學習系統,我們需要什麼樣的計算機?為什麼絕大多數人會推薦英偉達 gpu?對於初學者而言哪種深度學習框架是最好的?如何將深度學習應用到生產環境中去?所有這些問題都可以歸結為乙個——搭建深度學習系統都需要些什麼?(其中包含硬體、軟體、環境與資料)在本文中,讓我們將這些問題一併解決。

我們要感謝遊戲行業

並非所有 gpu 都是一樣的

大部分深度學習從業者不直接編寫 gpu cuda **,我們通常會使用軟體庫(如 pytorch 或 tensorflow)。但是,要想高效使用軟體庫,你需要選擇合適的 gpu。在幾乎所有情況下,這意味著你需要使用英偉達的產品。

cuda 和 opencl 是進行 gpu 程式設計的兩種主要方式。cuda 目前是開發最好、具備最廣泛生態系統、深度學習庫最支援的方式。cuda 是英偉達建立的專用語言,因此其他公司的 gpu 無法使用它。幾乎可以肯定,英偉達 gpu 是目前執行深度學習任務最好的選擇。

英偉達主導 gpu 市場,它最大的競爭對手是 amd。今年夏天,amd 發布了 rocm 平台提供深度學習支援。該工具適用於主流深度學習庫(如 pytorch、tensorflow、mxnet 和 cntk)。目前,rocm 仍然在不斷開發中。雖然對於使用者而言我們都希望看到另乙個開源的替代方案崛起,但是我必須得承認目前的 rocm 文件難以理解。我在閱讀 rocm **上「概述、快速上手和深度學習」的頁面之後仍然無法用自己的語言複述出其中的內容——儘管我很希望把 amd 的這部分內容包含進本文中(雖然我對於硬體的理解不深,但像我這樣的資料科學家應該是這一項目的使用者)。

如果你的電腦沒有 gpu 或者不是英偉達的 gpu,那麼你有以下幾個選擇:

深度學習是乙個新興領域,軟體庫和工具包每天都在快速地提公升。例如我們常在課程和研究中使用的 theano 剛剛退休,而現如今非常流行的 pytorch 也只不過是今年才發布。可能正如 jeremy 所說的那樣,我們必須相信現在具體使用的函式庫或深度學習框架在一兩年後會有很大的變更,甚至有可能不復存在。因此更重要的是對深度學習底層概念的理解,所以我們在 pytorch 上構建了自己的庫,我們相信它能令深度學習概念更加清晰,並通過編寫標準模型進一步在實踐中理解這些概念。

在很多教學和研究中,我們優先考慮開發者是否能快速進行實驗與迭代,而不是考慮具體的理論效能或計算效率。這就要求深度學習框架具有更簡潔的除錯和更直觀的設計等屬性,而現如今流行的 pytorch 正好符合這一點,它的動態計算圖令深度學習模型的構建變得更加明了與簡潔。

各深度學習庫之間乙個重要的區別就是它到底是使用動態計算圖還是靜態計算圖,當然目前的 tensorflow 和 mxnet 兩者都支援。動態計算圖表示程式將按照我們編寫的順序執行,這通常令模型或**的除錯更加方便,也使我們將創意從頭到尾按貫序的方式更直觀地實現。而對於靜態計算圖來說,我們首先要宣告或構建乙個計算圖,並確定每乙個結點和邊的內容與定**然後再執行該靜態計算圖以訓練模型。從理論上來說,靜態計算圖允許編譯器執行更多的優化,這也就導致我們宣告的**內容和編譯器確切執行內容可能會有一些差別。不過即使理論上證明靜態計算圖要比動態計算圖擁有更好的效能,但實際上很可能恰恰相反。

谷歌的 tensorflow 可能是最常用的靜態計算圖框架,當然它也是我們最常用的深度學習框架。而 facebook 的 pytorch 是現在最常用的動態計算圖框架。雖然 tensorflow 目前也表明它能支援動態計算圖(eager execution),但 eager execution 畢竟只是新生的庫,tensorflow 的文件也還是以靜態計算圖為主。在今年九月,fast.ai 就表明它們的課程會使用 pytorch 而不是 tensorflow,並且還會使用包裝的高階 pytorch 庫來實現更好的實踐體驗。一般來說選擇 pytorch 有以下幾個原因:

fast.ai 認為谷歌在 tensorflow 上做了大量的推廣與營銷,這也是 tensorflow 如此出名的原因。對於很多深度學習門外漢來說,tensorflow 可能是他們聽過唯一的深度學習框架。不過雖然 tensorflow 前幾周發布了動態計算圖,但對於很多人來說這一擴充套件庫還是非常新的概念,它還遠遠不夠完善與成熟。此外,tensorflow 團隊對於 fast.ai 的想法十分歡迎,因此我們也期待著把 fast.ai 庫遷移到 tensorflow 中。

很多人過分複雜化在生產中使用深度學習的想法,並且認為他們需要比平時更複雜的系統才行。在生產中使用深度學習一塊 cpu 就可以,伺服器可任選。大多數使用案例我們都推薦這麼做。以下是幾個要點:

大公司在生產過程中使用 gpu 可能有意義,等你到那個規模時就知道了。過早嘗試擴大規模只會增加不必要的複雜性,降低速度。

以上這四部分的資源又可以從兩個方面理解,即實踐和理論。對於實踐來說,我們只需要理解深度學習的基本概念,然後再詳細了解各深度學習框架的庫函式就能學著實現簡單的深度學習模型。而對於理論來說,數學基礎是十分重要的,先不說基本的概率論、微積分、線性代數,那些深度學習概念背後的數學推導我們同樣需要理解。此外,深度學習非常核心的最優化方法也是乙個大坑,需要非常多的理論知識來做出改進。

課程建議:

儘管很多文章聲稱需要谷歌級別的資料集才能做深度學習,這種說法是錯誤的。遷移學習(資料增強技術相關)使人們可以在小型資料集上使用預訓練的模型。在醫療創業公司 enlitic,jeremy howard 帶領的團隊僅使用 1000 個肺癌 ct 掃瞄樣本構建了乙個演算法,該演算法診斷肺癌的準確率超過 4 個放射科專家。c++ 庫 dlib 有乙個樣例:人臉檢測器僅使用包含 18 張人臉的 4 張影象就可以進行準確訓練! 

dlib 的人臉識別樣例

從python到PHP,再到框架的選擇使用

半年前,開始了從python程式設計轉變php開發。剛開始還是蠻難的,php跟python相比,語法比較混亂,系統變數普遍比較長,函式命名方式也不統一,很多重複的功能。使用php開發簡直不敢多想,環境配置都沒整明白,更別說它是怎麼執行的了。這樣一邊用著自己的python進行開發,一邊思考著,怎麼入門...

Go從入門到框架

目錄推薦閱讀 來自 www.liwenzhou.com 001 為什麼你應該學習go語言?002 從零開始搭建go語言開發環境 003 vs code配置go語言開發環境 004 go語言基礎之變數和常量 005 go語言基礎之基本資料型別 006 go語言基礎之運算子 007 go語言基礎之流程控...

bottle微框架從註冊到應用(一) 基礎配置

現在很多寫bottle微框架的博主都是糊弄事,簡單寫乙個路由入口就不了了事,而談不到bottle如何解決具體專案,因此想通過一次小的練習來讓大家進一步了解bottle微框架的魅力,並可以通過自己的努力寫出乙個小的專案。這裡將使用官方推薦實用的gevent模組,突破執行緒池的限制,建議直接複製。usr...