深度學習入門:投身深度學習你需要哪些準備?

我想回答一些我經常被問到的問題:我需要什麼樣的電腦來進行深度學習?為什麼fast.ai推薦Nvidia GPU?你為初學者推薦什麼深度學習庫?你如何把深度學習引入生產?我認為這些問題都屬於一個總的主題:你需要什麼(硬體、軟體、背景和數據)來進行深入學習? 這篇文章是針對那些新進入這個領域的,並且對入門感興趣的人。

你需要的硬體

我們感謝遊戲業

電子遊戲行業(收入方面)大於電影和音樂行業的總和。 在過去的20年里,視頻遊戲產業推動了GPU(圖形處理單元)的巨大進步,其用於繪製圖形所需的矩陣數學。幸運的是,這些正是深度學習所需的計算類型。GPU技術的這些進步是為什麼現在的神經網路比幾十年前更強大的一個關鍵部分。在沒有GPU的情況下訓練深度學習模型在大多數情況下將會非常緩慢。

並非所有的GPU都是一樣的

大多數深度學習從業者不是直接編程GPU; 我們使用處理這個問題的軟體庫(如PyTorch或TensorFlow)。但是,要有效使用這些庫,你需要訪問正確類型的GPU。在幾乎所有情況下,這意味著可以從Nvidia公司獲得GPU。

CUDA和OpenCL是GPU編程的兩種主要方式。CUDA是迄今為止最發達,擁有最廣泛的生態系統,也是深度學習庫最有力的支持。CUDA是由Nvidia創建的專有語言,因此它不能被其他公司的GPU使用。當fast.ai推薦使用Nvidia GPU時,我們並不是對Nvidia有特別的親近或信任,而是這是迄今為止深度學習的最佳選擇。

Nvidia在GPU市場佔據主導地位,其次是競爭對手AMD公司。 今年夏天,AMD宣布發布一個名為ROCm的平台,為深度學習提供更多的支持。 PyTorch,TensorFlow,MxNet和CNTK等主要深度學習庫的ROCm狀態仍在開發中。雖然我希望看到一個開源的替代方案取得成功,但我不得不承認,我發現ROCm的文檔很難理解。我剛剛閱讀了ROCm網站的Overview,Getting Started和Deep Learning頁面,但仍然不能用我自己的話來解釋ROCm,儘管我想在這裡把它包括在內以便完整。(我承認沒有硬體背景,但我認為像我這樣的數據科學家應該成為這個項目的目標受眾之一。)

如果你沒有GPU ...

如果你的電腦沒有GPU或者沒有Nvidia GPU,那麼你有幾個很好的選擇:

  • 使用Crestle,通過你的瀏覽器:Crestle是一項服務(由fast.ai學生Anurag Goel開發),為你提供在雲上的已經預先安裝並配置為在GPU上運行的所有流行的科學和深度學習框架的雲服務。它很容易通過你的瀏覽器訪問。新用戶可免費獲得10小時和1 GB的存儲空間。之後,GPU使用率是每小時59美分。我向那些剛接觸AWS或新手的人推薦使用這個選擇來使用控制台。
  • 通過你的控制台設置AWS雲實例:你可以按照這個fast.ai設置課程中的步驟創建一個AWS實例(遠程為你提供Nvidia GPU)。AWS每小時收取90美分。儘管我們的設置材料都是關於AWS(並且你會發現對AWS最多的論壇支持),但是一位fast.ai學生創建了一個設置Azure虛擬機進行深度學習的指南。如果有人寫關於Google雲端引擎的博客文章,我很樂意分享和添加一個鏈接。
  • 建立你自己的框架。這是我們的fast.ai論壇中的一個冗長的話題,在論壇里人們可以提出問題,分享他們正在使用的組件,並發布其他有用的鏈接和提示。最便宜的新型Nvidia GPU是300美元左右,一些學生在eBay或Craigslist上發現了更便宜的舊版GPU,而另外一些則是為了更強大的GPU支付更多的費用。我們幾個學生寫博客文章記錄他們如何建立他們的機器:
    • 深度困惑:建立深度學習機的不幸事件(Mariya Yao)
    • 建立一個便捷的深度學習機器(Sravya Tirukkovalur)
    • 建立你自己的深度學習框(Brendan Fortuner)

你需要的軟體

深度學習是一個相對年輕的領域,庫和工具正在迅速改變。 例如,Theano,在2016年我們選擇使用在我們的課程的第1部分,它剛剛退休。目前我們正在使用的PyTorch僅在今年(2017年)發布。 就像Jeremy之前寫的那樣,你應該假定你今天學到的任何特定的庫和軟體都會在一兩年內被淘汰。最重要的是理解底層概念,為此,我們在Pytorch上創建了自己的庫,我們相信深度學習概念更清晰,並將最佳實踐編碼為默認值。

Python是深度學習中最常用的語言。有許多深度學習庫可供選擇,幾乎所有主要科技公司都支持不同的庫,儘管這些公司的員工經常使用各種工具。深度學習庫包括TensorFlow(谷歌),PyTorch(Facebook),MxNet(華盛頓大學,由亞馬遜改編),CNTK(微軟),DeepLearning4j(Skymind),Caffe2(也是Facebook),Nnabla(索尼),PaddlePaddle(百度),以及Keras(在此列表中的其他幾個庫之上運行的高級API)。所有這些都有可用的Python選項。

動態與靜態圖計算

在fast.ai,我們優先考慮程序員可以進行實驗和迭代(通過更容易的調試和更直觀的設計)比理論性能提速更重要的速度。這就是我們使用PyTorch的原因,PyTorch是一個具有動態計算功能的靈活的深度學習庫。

深度學習庫之間的一個區別是它們是使用動態還是靜態計算(一些庫,如MxNet和現在的TensorFlow,兩個都允許)。動態計算意味著程序按照你編寫的順序執行。這通常使得調試更容易,並且更容易將你的想法轉換成代碼。靜態計算意味著你預先為你的神經網路構建一個結構,然後對其執行操作。從理論上講,這允許編譯器進行更大的優化,儘管這也意味著在你的程序和編譯器執行的程序之間可能存在更多的斷開。這也意味著,錯誤可能會更多地從導致錯誤的代碼中移除(例如,如果你在構建圖形時存在錯誤,那麼直到你稍後執行操作時,你才可能意識到)。儘管理論上有靜態計算圖的語言比具有動態計算的語言具有更好的性能,但我們常常發現,在實際中,這種情況並非如此。

谷歌的TensorFlow大多使用靜態計算圖,而Facebook的PyTorch使用動態計算。(註:TensorFlow在兩周前宣布了一個動態計算選項Eager Execution,然而它還很早,大多數TensorFlow文檔和項目都使用靜態選項)。今年9月,fast.ai宣布,我們選擇了PyTorch而不是TensorFlow來在今年的課程中使用,並用於開發我們自己的庫(PyTorch的高級包裝器,用於編碼最佳實踐)。簡單地說,下面是我們選擇PyTorch的幾個原因(在這裡更詳細地解釋):

  • 更容易調試
  • 動態計算更適合於自然語言處理
  • 傳統的面向對象的編程風格(這對我們來說更自然)
  • TensorFlow使用如範圍和會話等不尋常的約定可能會令人困惑,而且需要更多的學習

谷歌已經投入了比任何其他人更多的資源來營銷TensorFlow,我認為這是TensorFlow如此知名的原因之一(對於許多深度學習以外的人來說,TensorFlow是他們聽說過的唯一的DL框架)。 如上所述,TensorFlow幾周前發布了一個動態計算選項,解決了上述一些問題。 許多人都在問fast.ai我們是否要切換回TensorFlow。動態選項還是相當新的,而且還不太成熟,所以我們現在會繼續使用PyTorch。 然而,TensorFlow團隊非常樂意接受我們的想法,我們很樂意看到我們的fastai庫被移植到TensorFlow。

注意:我們更新的課程的個人版本,其使用PyTorch以及我們自己的fastai庫,目前正在進行。課程結束後將免費在線發布(預計發布時間:1月)。

你生產所需要的東西:不是GPU

許多人把生產中深度學習的想法過於複雜,認為他們需要比他們實際做的更複雜的系統。你可以在生產中使用CPU和你選擇的網路伺服器進行深入學習,事實上,這是我們推薦的大多數使用情況。 這裡有幾個關鍵點:

  • 生產中進行訓練是非常罕見的。即使你想每天更新你的模型權重,你也不需要在生產中進行訓練。這意味著你只是在生產過程中進行推理(通過你的模型向前傳遞),比培訓更快更容易。
  • 你可以使用任何你喜歡的Web伺服器(例如Flask),並將其設置為簡單的API調用。
  • 如果你能夠有效地批量處理數據,GPU只會提供更快的速度。 即使你每秒獲得32個請求,使用GPU也可能會使你減慢速度,因為從第一次到達收集全部32個時,你必須等待一秒鐘,然後執行計算,然後返回結果。 我們建議在生產中使用CPU,並且可以根據需要添加更多的CPU(比使用多個GPU更容易)。

對於大公司來說,在生產中使用GPU可能是有意義的——然而,當你達到這個規模的時候,這將會是明確的。過早地嘗試在需要之前進行擴展只會增加不必要的複雜性,並會使你放慢速度。

你需要的背景:1年的編碼

激勵我和Jeremy為程序員創建用於編碼的實踐深度學習的一個挫折是,大多數深度學習材料分為兩類:

  • 如此膚淺和高水平,以至於不能提供實際在工作場所深度學習所需的信息或技能,或創造出最先進的模型。如果你只是想要一個高層次的概述,這是好的,但如果你想成為一個有工作的從業者,那就太令人失望了。
  • 高度理論化並承擔研究生水平的數學背景。對於許多人來說,這是一個阻擋的障礙,即使是有數學博士學位的人,我也發現這個理論在學習如何編寫實用的解決方案方面並不是特別有用。許多材料都有這個傾向並不奇怪。直到最近,深度學習幾乎完全是一門學科,很大程度上是由在頂級學術刊物上發表的內容引發的。

我們免費的實踐深度學習課程的獨特之處在於,唯一的先決條件是1年的編程經驗,但它仍然教你如何創造最先進的模型。你的背景可以是任何語言,但在開始課程之前你可能需要學習一些Python,因為這是我們所使用的。我們根據需要介紹數學概念,我們不建議你嘗試提前學習數學理論。

如果你不知道如何編寫代碼,我強烈建議學習,如果你對數據科學感興趣的話,Python是一個很好的語言。

你需要的數據:遠遠低於你的想像

雖然很多人聲稱你需要Google大小的數據集來深入學習,但這是錯誤的。遷移學習的力量(結合數據增強等技術)使得人們可以將預先訓練的模型應用於更小的數據集。 正如我們在別處談到的那樣,在醫療初創企業Enlitic,Jeremy Howard領導的一個團隊只使用了1000例肺癌CT掃描與癌症相比,建立了一個比一組4位專家放射科醫師更準確的診斷肺癌的演算法。C ++庫Dlib有一個例子,其中一個人臉檢測器只使用4個圖像進行精確訓練,只包含18個人臉!

關於入門的說明

對於絕大多數與我交談的人來說,進入深度學習的門檻遠遠低於他們的預期,成本也在預算之內。但是,我意識到事實並非如此。我定期聯繫想要參加我們的在線課程,但無法承擔AWS成本的學生。不幸的是,我沒有辦法。同時還有其他的障礙。BrunoSánchez-Nu?o撰寫了關於在沒有可靠互聯網接入的地方進行數據科學的挑戰,而且國際學者Tahsin Mayeesha在孟加拉國等國家描述了MOOC訪問的隱藏障礙。我關心這些入門的問題,然而這是無解的。

本文由北郵@愛可可-愛生活老師推薦,阿里云云棲社區組織翻譯。

文章原標題《What you need to do deep learning》,作者:Rachel Thomas,譯者:董昭男,審校:李烽

文章為簡譯,更為詳細的內容,請查看原文

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎


推薦閱讀:

Golang 學習筆記一
備忘131228
極光日報 第 207-208 期 | 2017 / 7 / 5 - 6
matlab 降低演算法時間複雜度的方法?

TAG:编程 | 图形处理器GPU |