深度學習好處多多,但構建起來卻有些令人痛苦。為此,本文提供了一份詳盡的教程來教你快速構建自己的深度學習環境。不僅教你利用現有資源快速搭建深度學習模型,還一步步列出瞭如何通過雲平臺搭建自己的深度學習環境。
引言
多虧了更快更好的計算,我們終於能利用神經網路和深度學習真正的力量了,這都得益於更快更好的 CPU 和 GPU。無論我們喜不喜歡,傳統的統計學和機器學習模型在處理高維的、非結構化資料、更復雜和大量資料的問題上存在很大的侷限性。
深度學習的好處在於,在構建解決方案時,我們有更好的計算力、更多資料和各種易於使用的開源框架,比如 keras、TensorFlow 以及 PyTorch。
深度學習的壞處是什麼呢?從頭開始構建你自己的深度學習環境是很痛苦的事,尤其是當你迫不及待要開始寫程式碼和實現自己的深度學習模型的時候。
這個痛苦的過程我經歷了好幾次,也在這個過程中發現了更易於使用的服務,本文旨在教你改進自己設定的深度學習模型中不那麼令人滿意的部分,以便你可以更快更好地建立自己的深度學習模型並解決問題。本文涵蓋了以下幾個方面:
最小化配置基於雲的深度學習環境
建立你自己的基於雲的深度學習環境
本地部署提示
最小化配置基於雲的深度學習環境
如果你不想用專用硬體搭建深度學習模型,或者你想跳過那些煩人的配置和設定命令,這裡有一些選擇!使用預配置的基於雲的深度學習環境是最好的選擇。通常,有一些常用的基於雲端的深度學習伺服器供應商。下面的幾個只需要很少的設定和配置,就可以讓你馬上開始工作。不過,這個列表並不全面,基本都是我用過或者從別人那聽過的:
Google Colaboratory:https://colab.research.google.com/
Paperspace Gradient°:https://www.paperspace.com/gradient
FloydHub Workspace:https://www.floydhub.com/product/build
Lambda GPU Cloud:https://lambdalabs.com/service/gpu-cloud
AWS Deep Learning AMIs:https://aws.amazon.com/machine-learning/amis/
GCP Deep Learning VM Images:https://cloud.google.com/deep-learning-vm
Google Colaboratory
也許谷歌是最好的選擇之一,而且它(仍然)免費,它可以讓你在 GPU 甚至是 TPU 支援的深度學習環境中執行互動式 Jupyter notebook。谷歌一直在積極使用和推廣它在各個領域的應用,包括其極受歡迎的機器學習速成課程(Machine learning Crash Course)。簡言之,Colaboratory 是免費的 Jupyter notebook 環境,它不需要任何設定,甚至能夠讓你免費用 GPU 執行深度學習模型。
現在,對於工作負載和資料量較小的相對簡單的模型來說,使用 CPU 就可以了,但在解決更復雜的問題時你肯定需要使用 GPU。在 Google Colab 中改變執行時來使用 GPU 只需要幾秒,如下圖所示:
然後 Google Colab 會給你分配一個新的GPU用於深度學習,你可以通過以下程式碼檢視 GPU 型別:
你可以免費使用有 12 GB 記憶體的 Tesla K80 GPU了!同樣的配置,AWS 的 p2.xlarge 每小時收費 0.9 美元。太棒了!
這應該可以幫你在 Google Colab 上嘗試執行自己的深度學習模型。你在用 Colab 時,可以隨意用我的 colab notebook來測試CPU 和 GPU支援的深度學習環境。
Paperspace Gradient°
Gradient° 是 Paperspace 的產品,該公司重點關注的是機器學習和資料科學的基礎設施。它為開發人員提供了一套用於在 GPU 上探索資料、訓練深度學習模型以及執行計算工作的完整工具。Gradient° 包括1-click jupyter notebook,該notebook支援 Paperspace GPU 雲端所有功能。
如果你用 GPU 的話確實需要按小時付費,但其價格與其他伺服器供應商相比極具競爭力——Quadro P4000 每小時收費 0.5$,Tesla K80 每小時收費 0.59$。而這些和 AWS 的同類產品相比也更便宜一些。
FloydHub Workspace
FloydHub 有一個有趣的產品——FloydHub Workspace,它為基於雲端的深度學習提供了完全配置的開發環境。優勢?雖然它不是免費的,但你可以從 CPU 後端無縫切換到 GPU 後端,而且你可以根據所使用的處理器按秒付費。
他們的價格也很值得考慮。12 GB 記憶體、61 GB RAM 和 200 GB SSD 的 Tesla K80,使用 10 小時的費用為 12$,這是最便宜的選擇。
Lambda GPU Cloud
Lambda Labs(Lambda) 是一家 AI 基礎設施公司,他們提供了可以加速人類進步的計算力。他們關注的重點是深度學習工作站,最近推出了 Lambda GPU Cloud,但它尚處於封閉測試階段。每個 Lambda GPU Cloud 都有 4 個 GPU,比 AWS 的 p2.8xlarge 快 2 倍。他們聲稱,你只需要簡單地按一下按鈕,就可以立即通過 SSH 遠端訪問該雲GPU。每個 GPU 每小時收費 0.9$。
AWS Deep Learning AMIS
AMS(Amazon Web Services)是亞馬遜的子公司,他們根據使用者需要提供付費訂閱的雲端計算平臺。近期,他們推出了深度學習 AMI(Amazon Machine Images),專門用於構建深度學習模型的GPU 密集型工作負載。AWS Deep Learning AMI 給我們提供了必要的基礎架構和預配置的工具與框架,可以大規模加速雲端的深度學習。它預先配置了所有最新和最好的深度學習框架。
如果選擇用 AWS 那你要謹慎一點,因為它是按小時收費的。最便宜的選擇是 p2.xlarge,它提供了 12 GB 的GPU,每小時收費為 0.9$。
GCP Deep Learning VM Images
GCP(Google Cloud Platform)提供了一整套雲端計算服務,包括執行深度學習模型和工作負載的基礎設施。最棒的是,它是在谷歌內部用於終端使用者產品的相同基礎設施上執行的。你註冊的話,GCP會在第一年給你提供價值 300$ 的免費積分,這簡直太酷了!
Google Cloud Deep Learning VM Images 可以讓開發人員在谷歌計算引擎(Google Compute Engine)上例項化包含流行深度學習和機器學習框架的 VM 影像。你可以使用預先安裝了流行 ML 框架(如 TensorFlow、PyTorch 或 scikit-learn 等)的計算引擎。最棒的是,你可以一鍵新增雲端 TPU 和 GPU 支援。和 AWS 相比,它的價格也非常有競爭優勢。用 GCP VM 的話,每小時僅需 0.45$就可以使用 12 GB 的 Tesla K80 GPU。
上述內容可以讓你充分了解潛在選項,以最少的配置和設定開啟深度學習之旅。
建立基於雲端的深度學習環境
儘管在雲端預配置的設定很好用,但有時候你可能會想構建自定義的基於雲端或者是本地的深度學習環境。在本節中,我們將研究該如何通過常用的雲平臺服務供應商在雲端搭建自己的深度學習環境。主要包括以下幾步:
選擇雲供應商
建立虛擬伺服器
配置虛擬伺服器
設定深度學習環境
使用深度學習環境
驗證 GPU 的使用
現在我們來介紹如何設定基於雲的深度學習環境。
選擇雲供應商
現在有很多配置不錯且價格低廉的雲供應商。我們可以利用 PaaS(Platform as a Service,平臺即服務)能力,做一些管理資料、應用程式以及基本配置的工作,還可以用 GPU 計算來進行深度學習。常用的供應商包括亞馬遜的 AWS、微軟的 Azure 和谷歌的 GCP。
建立虛擬伺服器
選擇雲服務供應商之後,就要建立自己的虛擬機器了,它基本上就是託管程式碼、資料以及配置設定的伺服器。建立虛擬機器的步驟取決於你所選擇的雲供應商。
在我寫的《Hands-on Transfer Learning with Python》第二章中詳細介紹瞭如何在 AWS 上建立和例項化自己的虛擬機器。完整的程式碼庫是開源的,如果你感興趣的話,可以在 GitHub 庫中檢視更多細節:https://github.com/dipanjanS/hands-on-transfer-learning-with-python。
配置虛擬伺服器
建立虛擬機器後,你就可以在雲供應商的平臺上啟動例項了。在 AWS 上一般是 EC2 使用者介面,在 GCP 中一般是虛擬機器的頁面。現在你需要個人祕鑰才能從本地終端使用 SSH 登入伺服器。一般而言,AWS 在建立虛擬機器的最後一步才讓你設定密碼,並給你提供可下載的個人祕鑰。GCP 允許你用 SSH 通過 GCP 頁面直接登入系統。如果需要的話,你可以根據這篇指南建立SSH 密碼:https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys。
將你的 SSH 密碼儲存在安全的地方,用下列命令從終端登入伺服器:
恭喜!你現在已經成功登入了自己的深度學習伺服器。以下是關於深度學習設定方面的內容,前提是你在用 Linux 伺服器。我們的 Linux 發行版是 Ubuntu 18.10。你可以根據自己的喜好自由選擇作業系統。
由於我們在原型設計和開發時廣泛地使用了 Jupyter notebook,因此要為筆記本伺服器設定密碼,這樣即便有人以某種方式得到了你的公共 IP 地址,他也無法使用你的 Jupyter notebook。如果你不想設定密碼,你可以先跳過本節中密碼設定的步驟。這裡首先要用 Open SSL 建立新的 SSL 證照。
如果系統中沒有安裝 Python,我們建議你使用 Anaconda 發行版,它的package管理系統很強大,而且還有一整套預安裝的庫。我們建議按照官方指南安裝 Anaconda 的 Python 發行版:https://docs.anaconda.com/anaconda/install/linux/。
為了防止配置檔案不存在,要為 Jupyter notebook 伺服器生成配置檔案。一般而言,檔案在你的主目錄中:~/.jupyter/jupyter_notebook_config.py,如果該檔案不存在,你可以用下列命令建立一個:
為了確保筆記本基於密碼的安全性,我們首先要生成密碼及其雜湊碼。可以在 Ipython.lib 中用 passwd() 函式實現,如下所示:
輸入密碼並驗證後,函式會返回一個雜湊值,這是你密碼的雜湊值(本例中,我輸入的密碼實際上就是單詞「password」,你絕對不要用!)。將這個雜湊值複製並儲存下來,我們很快就會用到。接下來,啟動你常用的文字編輯器來編輯 Jupyter 的配置檔案,如下圖所示:
我們現在準備設定自己的深度學習環境了。
設定深度學習環境
我們現在要開始設定深度學習環境所需的必要配置,以便開始使用 GPU。如果你的例項中已經配置了 CUDA 和 cuDNN,可以根據需要跳過下面的步驟。
1. 安裝圖形驅動
首先要確定你已經為 GPU 安裝了圖形驅動。假設你用的是英偉達的 GPU。測試你是否安裝了驅動的最好方法是在終端執行 nvidia-smi 命令。如果命令不起作用,我們就要安裝 GPU 驅動。
2. 安裝 CUDA
NVIDIA® CUDA® Toolkit 基本上就是一個建立能最大程度利用英偉達 GPU 的應用和程式的開發環境。GPU 加速的 CUDA 庫支援跨多個域的嵌入式加速,包括線性代數、影像和視訊處理、深度學習以及圖形分析。假設我們用的是基於 Ubuntu 的系統,你可以查閱英偉達 CUDA 的官方文件並下載必要的安裝檔案。在撰寫本文時,CUDA 10 已經發布了,但是它還太新。因此我們用的是舊版的 CUDA 9.0,你可以從歷史版本的釋出頁面獲取該版本。如果你在伺服器上,最好用終端直接下載安裝檔案,並用下面的命令配置 CUDA:
3. 安裝 cuDNN
英偉達 CUDA® 深度神經網路庫(cuDNN)是用於深度神經網路GPU 加速的原語庫。cuDNN 庫為神經網路中的標準例程提供了高度優化的實現,包括正向和反向卷積、池化、歸一化和啟用層。深度學習從業者可以依賴 cuDNN 加速在 GPU 上廣泛使用的深度學習框架。你可以從官方網站下載 cuDNN,但你先要註冊一個英偉達的賬號。之後你會得到下載 cuDNN 的連結,然後你可以在伺服器上通過這個連結直接在終端上下載:
一般而言,這能解決 GPU 設定所需的大部分依賴。
4. 安裝深度學習框架
如果還沒有安裝深度學習框架,我們可以安裝和設定 Python 深度學習框架。我們用得比較多的是 keras 和 tensorflow,下面的命令可以幫助我們在自己的深度學習環境上安裝它們:
訪問深度學習雲端環境
我們並不想一直在伺服器的終端上寫程式碼。因此我們想用 Jupyter Notebook 進行互動式開發,所以我們要通過本地系統訪問在雲伺服器上的 Notebook。首先,要啟動遠端例項上的 Jupyter Notebook:
現在,如果你給例項分配了公共 IP,而且公開了 8888 埠,你可以直接輸入 http://:8888,然後就可以通過本地瀏覽器訪問在雲端虛擬機器中的 Jupyter 伺服器了!
還有另一個選擇,尤其是對 AWS 例項來說,那就是在本地例項上用埠轉發,通過本地機器的瀏覽器來訪問雲端伺服器的筆記本。這也稱為 SSH 隧道(tunneling)。
如果用的是埠轉發,轉到本地瀏覽器並導航到本地主機地址,例如 https://localhost:8890,我們將轉到虛擬伺服器的遠端筆記本伺服器。確保地址中用的是 https,否則會觸發 SSL 錯誤。
驗證 GPU 的使用
最後一步是確保一切都在正常執行,確保我們的深度學習框架在使用 GPU(我們是按小時付費的!)。下面的程式碼可以幫助我們驗證這一點。
本地部署的安裝提示
有些使用者或組織可能不想用雲端服務,特別是在他們的資料比較敏感的情況下,因此他們關注更多的是搭建本地部署的深度學習環境。這裡主要介紹如何投資適當的硬體和軟體,以實現效能最大化,並利用合適的 GPU 搭建深度學習模型。關於硬體,特別需要注意的是:
處理器:你可以用 i5 或 i7 的 Intel CPU,如果你想奢侈一下那也可以買 Intel Xeon!
RAM:就記憶體而言,你至少要用 32 GB 的 DDR4或 DDR5,更好的 RAM 也可以。
硬碟:1 TB 的硬碟就很好了,如果想快速訪問資料的話,至少也要 128 GB 或者 256 GB!
GPU:這可能是深度學習中最重要的元件了。建議你買英偉達的 GPU,至少要是 8 GB 的 GTX 1070。
當然,其他元件你也不應該忽視,包括主機板、電源、堅固的外殼以及冷卻器等。配好硬體設施後,對於軟體配置,你可以重複上面的所有步驟,除了雲端設定。現在,你應該可以開始了!
總結
本文旨在幫助開發人員、工程師以及深度學習從業者從零開始快速部署深度學習環境。希望本文可以幫你節省精力,不必絞盡腦汁花數小時閱讀論壇和 Stack Overflow中無數關於設定深度學習環境的文章,就能建立自己的深度學習環境。現在走出去,開始「深度學習」吧!