文章段落
借助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的學習時間和費用的結果。
環境 | 學習時間 | 費 |
---|---|---|
本地macbook | 75分鐘 | – |
CPU只有MLEngine | 64分鐘 | 0.54美元 |
MLEngine與GPU | 12分鐘 | 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安裝/運營支持服務,如果您有興趣,請聯繫我們。