使用Google CLOUD MACHINE LEARNING ENGINE加速本地計算機上耗時的機器學習培訓

借助GCP的雲機器學習引擎(MLEngine),您可以加速本地計算機上耗時的學習作業。
這一次,我將向您展示如何使用MLEngine並演示使用GPU加速學習作業的程度。

首先讓我們來看看結果。
本地執行環境使用MacBookAir 1800 / 13.3 MQD42J / A. 
CPU規格是Core i5 1.8 GHz雙核Intel Core i5(使用Turbo Boost時高達2.9 GHz)。

下面顯示了每臺本地機器,僅CPU MLEngine和GPU的學習時間和費用的結果。

環境學習時間
本地macbook75分鐘
CPU只有MLEngine64分鐘0.54美元
MLEngine與GPU12分鐘0.16美元

現在讓我們仔細看看結果。

目錄

  • 本地執行結果
  • 準備在GCP上執行
  • 執行時間確認
  • 費用
  • 摘要

本地執行結果

我們將使用的培訓將是Deep MNIST for Experts,官方TensorFlow教程。
使用卷積神經網絡識別是熟悉手寫的訓練。

首先,本地執行的日誌如下所示

1 — 開始學習 —
2 12時39分51秒
3 Step: 1000, Loss: 1409.114624, Accuracy: 0.961000
4
5 Step: 20000, Loss: 599.086487, Accuracy: 0.985100
6 — 結束學習 —
7 13時54分55秒

大約需要75分鐘。
這次的目的是使用MLEngine加速這一過程。

準備在GCP上執行

為了在GCP上使用GPU,有必要應用並保護GPU分配。您需要從IAM和管理>分配
您自己的項目中保留GPU資源。 GPU資源應為0,如下所示。 有兩種類型的GPU,P100和K80,但這次我們使用相對便宜的K80。

要申請GPU資源,請選中此框並從屏幕頂部的“編輯分配”中輸入所需信息以申請請求。
處理完請求後,您會收到一封電子郵件,因此請檢查您的資源。
作為對此的預防措施,目前有限的地區可以使用GPU。
有關詳細信息,請參閱以下鏈接。
計算引擎GPU

這次我們將使用asia-east1。

此外,正如MLEngine所要求的那樣,在此處指定的同一區域中創建一個區域GCS存儲桶。
通過gcloud命令執行作業
有必要使用gcloud命令從MLEngine實際請求學習作業。
通常,命令如下

gcloud ml-engine jobs submit training $JOB_NAME --package-path=trainer --module-name=trainer.task --staging-bucket=$BUCKET --region=asia-east1

在以下目錄的父目錄中執行此命令

trainer
   ├── __init__.py
   └── task.py

task.py是一個學習計劃。__init__.py是空的,沒關係。

在gcloud命令的兩個環境變量$ JOB_NAME和$ BUCKET中,指定由MLEngine控制台管理的作業名稱和先前創建的存儲桶名稱。
例如,如果“gpuTest”是$ JOB_NAME並且創建的存儲桶是“mljob-bucket”,則具體命令如下

gcloud ml-engine jobs submit training gpuTest --package-path=trainer --module-name=trainer.task --staging-bucket=gs://mljob-bucket \ --region=asia-east1

如果這是正常的CPU處理,那麼當使用GPU時,我將給出如下選項

gcloud ml-engine jobs submit training gpuTest --package-path=trainer --module-name=trainer.task --staging-bucket=gs://mljob-bucket \ --region=asia-east1 --scale-tier=basic-gpu

如果成功,響應將返回如下​​

Job [gpuTest] submitted successfully.Your job is still active. You may view the status of your job with the command   $ gcloud ml-engine jobs describe gpuTest{1}or continue streaming the logs with the command{1}  $ gcloud ml-engine jobs stream-logs gpuTestjobId: gpuTeststate: QUEUED

我們來看看MLEngine控制台吧。

如果成功處理,則此類記錄將顯示在MLEngine作業列表中。

此外,請記住,無法刪除作業,也無法複製名稱。

執行時間確認

我們馬上檢查一下執行時間。
經過的時間是12分14秒,但實際的程序執行時間應該更短,因為它是包括提供的時間。

print()的輸出輸出到日誌,因此請檢查日誌。
為方便起見,僅提取必要的字符串

1 — 開始學習 —
2 8時36分4秒
3 Step: 1000, Loss: 1369.017090, Accuracy: 0.960600
4
5 Step: 20000, Loss: 606.171814, Accuracy: 0.984600
6 — 結束學習 —
7 8時39分27秒

你可以確認學習在3分鐘和一點時間內完成,GPU非常棒。
當然,使用僅需12分鐘,但您可以看到GPU可以比CPU更快地處理學習作業。

費用

然後讓我們來看看成本。詳情列於此處
詳細信息,但MLEngine的價格有點複雜。 查看作業詳細信息後,您將看到這樣的屏幕。

這是消費的ML單位
雖然細節中也有鏈接,但每單位時間使用的數量取決於所使用的資源。
計算不使用GPU的作業的電荷的基本公式如下。

費用($)=(規模等級×消費ML單位×(每小時÷60))*學習時間(分鐘)

比例層次結構是分配給學習作業的資源。
不分配GPU的默認BASIC為1
這一次,我使用了一個稱為BASIC_GPU的比例層次結構和一個GPU,因此比例層次結構為3
亞洲地區的小時費率為0.54美元

學習時間為12分鐘,消耗的ML單位為0.5

(3 x 0.5 x(0.54÷60))x 12 = $ 0.16

使用GPU進行學習可以以如此低的價格進行,這非常有用。

作為參考,我們來看看不使用GPU時的處理時間和成本。
執行結果是這樣的。

由於消耗的ML單位是0.94並且經過的時間是64分鐘,所以可以如下計算電荷。

(1 x 0.94(0.54÷60))x 64 = $ 0.54

令人驚訝的是,事實證明使用GPU更便宜。

摘要

這樣,使用MLEngine,即使你沒有糟糕的本地機器,你也可以輕鬆指定GPU,這樣你就可以高速進行學習。
此外,還發現使用GPU進行更快學習比單獨使用CPU進行長期學習要便宜。

如果您的目標是提高準確性,那麼積極使用GPU將使構建更複雜的神經網絡變得更加容易。

我們提供名為Cloud Ace的GCP安裝/運營支持服務,如果您有興趣,請聯繫我們。

Aaron Lee

超過7年的 Google Cloud 經驗,服務過上百家 Google Workspace 與 GCP 客戶,擔任多次研討會主講人與教育訓練講師,提供架構諮詢與技術支援,幫助各大企業上雲。