跳轉到主要內容
工程的博客

深度學習在磚

分享這篇文章

我們興奮地宣布通用圖形處理單元(GPU)的可用性和深度學習支持磚!這篇文章將幫助用戶通過教程開始有用的技巧和資源,針對數據科學家和工程師需要深入學習應用程序的規模。

有什麼新鮮事嗎?

磚現在提供了一個簡單的方法,利用gpu的圖像處理,文本分析和其他機器學習任務。用戶可以創建GPU-enabled集群EC2 P2實例類型。磚包括預裝NVIDIA驅動程序和庫,為gpu Apache火花部署配置,材料開始使用一些流行的深度學習庫。

我們之前的博文GPU加速的磚對我們的GPU提供提供更多的技術細節。它還包含示例基準顯示gpu可以為機器學習是非常劃算的,尤其是對深度學習所需的昂貴的計算。

這篇文章提供了一個教程如何開始使用gpu和深度學習在磚。我們將穿過任務集成火花的一個例子TensorFlow我們將部署一個深層神經網絡識別對象和動物圖片。

使用深度學習與Apache火花

之前在我們的教程中,我們討論如何用戶可以利用GPU實例和應用深度學習庫磚。常見的工作流程包括:

  • 大規模部署模式:部署訓練模型進行預測數據存儲在抽樣或DataFrames火花。在這篇文章中,我們將部署著名《盜夢空間》計算機視覺模型。
  • 分布式模型培訓:使用深度學習庫像TensorFlow hyperparameters每個工人來測試不同的模型,加快與火花這個耗時的任務。看看我們之前的博客文章中的示例與Apache火花和TensorFlow深度學習
  • GPU工作站:如果您的數據適合到一個機器,它可以有效的創建一個司機才集群(0工人)和增強司機使用深度學習庫。

請注意,深度學習不需要gpu。這些深度學習庫都在cpu上運行,特別是如果使用compute-optimized實例類型。

教程:大規模部署深學習模型

我們給一個簡短的介紹關於如何部署一個pre-trained深學習模型在Apache火花。

理解任務

在這個例子中,我們把工作流和修改現有的單機上運行Apache火花。我們使用“與《盜夢空間》簡單的圖像分類”的例子從TensorFlow初始模型適用於預測一組圖片的內容。

例如,給定一個形象是這樣的:

兩個潛水員的照片

初始模型的內容會告訴我們的形象,在這種情況下:

(“戴水肺的潛水員”,0.88708681),(“電鰩,電魚、電鰻、魚雷”,0.012277877),(“海蛇”,0.005639134),(“虎鯊,Galeocerdo cuvieri”,0.0051873429),(“卷”,0.0044495272)

上麵的每一行代表一個“同義詞集”,表示一個概念或一組同義術語。重量給每個同義詞集代表一個信心如何適用的同義詞集的圖像。在這種情況下,“戴水肺的潛水員”非常準確!

做出預測與Inception-v3昂貴:每個預測需要大約48億操作(Szegedy et al ., 2015)。即使有更小的數據集,可以是有價值的並行化計算。我們將使用火花分發這些昂貴的預測。

創建一個GPU-enabled集群

用戶可以創建一個GPU-enabled集群磚幾乎像其他集群。我們將指出的關鍵差異。

選擇一個GPU-enabled“Apache火花版本”。選擇一個GPU-enabled版本確保NVIDIA CUDA和cuDNN庫是預裝在集群。我們避免non-GPU集群上安裝這些庫,因為他們需要額外的資源。

創建一個GPU-accelerated Apache火花2.0集群在磚

通過選擇一個GPU-enabled火花版本,你同意英偉達EULA

截圖顯示,用戶接受英偉達EULA在創建集群GPU加速

在這個日期,GPU現貨情況下很難獲得在EC2上,所以我們建議使用隨需應變的情況下穩定。

選擇您的集群GPU實例類型工人和司機。磚目前支持所有P2實例類型:P2。超大(1 GPU) p2.8xlarge (8 GPU),和p2.16xlarge (16 GPU)。(更新:P2實例可用在三AWS區域:美國東部(n維吉尼亞),美國西部(俄勒岡州),和歐盟(愛爾蘭)。磚部署必須駐留在一個支持區域創建一個集群GPU-enabled。)目前,AWS默認限製P2實例類型實例1隻,所以你可能需要請求一個限製從AWS增加

注意:我們最初的博文討論G2實例類型,一個年長的EC2 GPU-enabled類型。我們釋放P2實例支持而不是因為P2提供更多的內存和GPU核心每一美元。

截圖顯示了各種磚AWS實例提供

最後,P2實例類型不帶有內置的SSD存儲設備,因此用戶必須添加存儲空間。

截圖展示如何將SSD存儲設備添加到您的GPU-accelerated實例

您可以運行這個小示例使用單一p2。超大的工人和一個EBS卷。對於一個較大的數據集,使用更多的工人提供近似線性加速從分配計算。創建一個集群上的更多細節,以及NVIDIA驅動程序和庫版本,被賦予的磚指南GPU集群

安裝TensorFlow

磚提供Init腳本的安裝深度學習圖書館集群。因為這些庫通常是由源和需要自定義配置,我們建議安裝這些庫通過可定製的腳本。您隻需要創建一次,Init腳本,創建可以使用任何集群(沒有gpu)。

克隆TensorFlow Init腳本筆記本](https://docs.m.eheci.com/applications/deep-learning/tensorflow.html # install-tensorflow-using-an-init-script),和修改腳本中的集群名稱以匹配您的GPU集群(或GPU集群的名稱創建未來的):

#安裝TensorFlow的集群的名稱:clusterName =“tensorflow-gpu”

筆記本安裝運行Init腳本。下次當你創建一個集群,這個名字,它將Init腳本,在火花中預裝TensorFlow司機和工人。如果你有一個集群,這個名字已經運行,然後重新啟動安裝TensorFlow。

部署一個TensorFlow模型火花

現在我們跟TensorFlow GPU-enabled集群運行安裝,我們可以部署一個深度學習模型。在這裏我們將介紹要點。

我們首先下載Inception-v3模型,它是由TensorFlow:

MODEL_URL =“https://download.tensorflow.org/models/image/imagenet/inception - 2015 - 12 - 05. - tgz”

我們廣播初始模型,它有效地傳達給工人火花集群:

model_data_bc = sc.broadcast (model_data)

如果你讀完整的筆記本,你會看到我們還播放其他有用的元數據,例如node_lookup《盜夢空間》的預測信息映射成人類可讀的結果。

然後讀取圖像文件的url的列表和列表中火花抽樣的並行化:

batched_data = read_file_index ()url = sc.parallelize (batched_data) #工作流

這給了我們一套分布式圖像處理。剩下的工作將在一個分布式的方式完成對引發工人,每個工人將處理這些圖像的一個子集。

我們定義了一個函數過程一個形象:

run_inference_on_image(稅、img_id img_url node_lookup)

這個函數如下:

  1. 下載圖片:
    image_data = urllib.request。urlopen (img_url超時= 1.0).read ()
  2. 使用TensorFlow作出預測:
    預測= sess.run (softmax_tensor {DecodeJpeg /內容:0:image_data})
  3. 將結果轉換成一個人類可讀的格式。

為了提高效率,我們有批處理計算,以便TensorFlow處理多個圖像。這個函數apply_inference_on_batch(批處理)整個批處理。

這兩個函數可以使用以外的火花。它可以幫助開發一個深度學習工作流在單個機器上為簡單起見,在實際並行之前的部分工作流程。

在這裏,我們沒有明確告訴TensorFlow使用GPU,所以TensorFlow自動選擇使用哪個設備。當我們運行這個筆記本p2。超大工人和日誌設備使用,TensorFlow使用GPU進行大量的計算。

最後,我們應用推理功能通過映射在我們分布式組圖片:

labeled_images = urls.flatMap (apply_inference_on_batch)

這是它!這個工作流程提供了一個不錯的模板,你可以建立你的自定義深度學習+ Apache火花集成。要點包括:

  • 嚐試開發深度學習邏輯在一台機器上並行的部分工作流程。
  • 知道哪些是有效的分配任務。預測(推理)和模型優化往往是優秀的候選人。
  • 有效地利用火花:廣播大對象模型數據,並行化昂貴的部分工作流程,減少火花工人之間的溝通。

開始

本教程隻覆蓋TensorFlow,但我們為其他受歡迎的深度學習庫提供材料。這些庫的幾個有更複雜的安裝要求,所以我們提供的Init腳本可以是非常有用的。讀了磚指導部分深度學習。

每個庫頁麵包括一個Init腳本安裝和短使用磚內庫的示例。磚指南還包含一個頁麵上創建GPU集群。期待在不久的將來更多的指導!今天開始,注冊一個免費試用

免費試著磚
看到所有工程的博客的帖子
Baidu
map