機器學習前線!我開始使用Google CLOUD MACHINE LEARNING ENGINE!

最近,我經常聽到機器學習和深度學習這兩個詞。你知道機器學習,但有些人可能沒有真正使用它。去年,google宣布推出用於機器學習的雲服務。這是Google Cloud Machine Learning。

Google Cloud Machine Learning是一個託管平台(由Google Cloud Platform提供),可讓您輕鬆構建任意大小的機器學習模型,無論大小如何。Google Cloud Machine Learning(Cloud ML)的背面使用了由Google開發的機器學習庫TensorFlow。但是,如果不了解TensorFlow或機器學習,可以輕鬆嘗試Cloud ML。

這次,我想使用Cloud ML使用MNIST執行圖像分析,MNIST通常用於機器學習教程。MNIST是一個包含手寫數字圖像數據和正確標籤的數據集。使用此數據集訓練機器學習模型。然後,機器學習模型可以預測手寫數字圖像代表哪個數字。訓練腳本和數據集已經可用,因此只需完成命令即可。請試試看。

※由於Cloud ML目前是測試版,因此可能會更改規格。

MNIST由手繪圖像組成,如上圖所示,每個圖像都有正確的答案標籤。(引自MNIST For ML Beginners

目錄

  • 什麼是Google Cloud Machine Learning
  • Cloud Machine Learning費用
    • Cloud ML學習費用
    • Cloud ML預測費用
  • 讓我們實際上移動Cloud ML
    • 準備運行Cloud ML所需的環境
    • 訓練
    • 創建一個模型
    • 預測手寫的數字
  • 最後一句話

什麼是Google Cloud Machine Learning

Cloud ML是一項服務,使普通用戶可以使用Google在其公司中使用的雲計算機學習功能。(截至2017年2月,它作為測試版提供。)

為了構建模型,我們使用強大的TensorFlow框架,支持許多Google產品,從Google Photos到Google Cloud Speech。通過與Google的全球負載平衡服務集成,機器學習應用程序可以自動擴展並提供給全球用戶。

Cloud Machine Learning費用

Cloud ML對培訓模型和運行預測收取費用。但是,您可以免費管理雲中的機器學習資源。稍後將描述每個動作的收費細節。

行動美國歐洲/亞洲
模範訓練每個ML訓練單位每小時0.49美元每個ML訓練單位每小時0.54美元
批量預測估計每1,000美元1,000美元,加上每小時0.40美元估計每1000美元0.11美元,加上每小時0.44美元

除了此處列出的成本之外,您還需要在Cloud ML生命週期內將模型和資源存儲在Google雲端存儲分區中。例如,在訓練模型時發布培訓包,或在準備部署版本時保存模型文件。此外,培訓和批量預測輸出也存儲在雲存儲桶中。在任何一種情況下,Cloud ML都不需要長期保留。操作完成後,您將能夠立即刪除該文件,因此除非在非常大的範圍內使用該文件,否則不會對成本造成巨大負擔。

Cloud ML訓練費用

ML培訓單位

用戶可以在訓練他們的工作時調整他們使用的處理集群的類型。作為一種簡單的方法,您還可以選擇一種稱為“比例層次結構”的預定義配置。每個比例級別都有不同數量的ML訓練單元,以定價為基礎。

規模層次結構ML訓練單位
BASIC1
STANDARD_110
PREMIUM_175
CUSTOM這取決於配置。

訓練費用計算如下:

 (ML訓練單位數)×(每單位費用)×(作業執行時間[分]]÷60

一個例子如下所示。

生活在美國的數據科學家選擇STANDARD_1比例級別並運行培訓工作。這份工作花了15分鐘。

10(ML訓練單位)x $ 0.49 x 15(分鐘)÷60 = 1.23

這份工作的總費​​用是1.23美元。

Cloud ML預測費用

批量預測

在批量預測中,將對預測數量(* 1)和處理時間(* 2)進行收費。

區域標準價格大量使用折扣價(※3)
美國估計每1000美元0.10美元,
每節點0.40美元
估計每1,000美元0.05美元
加上每節點0.40美元
歐洲/亞洲估計每1000美元0.11美元
加上每節點0.44美元
估計每1,000美元0.05美元
加上每節點0.44美元

* 1預測的數字是每月累計的,費用四捨五入到最接近的分數。
* 2執行處理時,您將在幾分鐘內收取每項培訓工作的費用。將始終收取至少10分鐘的費用。
* 3在月份請求達到1億次後,適用大量使用的折扣價

在線預測

Cloud ML的其他功能處於測試階段,但在線預測服務是以alpha形式提供的。此功能僅在線預測為alpha時免費提供。(截至2017年2月)

讓我們實際上移動Cloud ML

現在讓我們實際移動Cloud ML。Cloud ML操作主要在shell上執行。您可以在本地運行它,但需要在本地安裝該軟件。我們建議可以在雲環境中運行的Cloud Shell。讓我們這次使用Cloud Shell移動Cloud ML。執行過程如下。

  1. 準備運行Cloud ML所需的環境
  2. 做訓練
  3. 創建一個模型
  4. 預測手寫的數字

準備運行Cloud ML所需的環境

我們要做的第一件事是設置項目並安裝必要的文件。

啟用所需的API

從menu欄中選擇“API Manager”並啟用以下API。

(如果已經激活,則無需更改)

  • Cloud Machine Learning API
  • Compute Engine API
  • Cloud Logging API
  • Cloud Storage API
  • Cloud Storage JSON API
  • BigQuery API

設置環境

設置項目後,在Cloud Shell上設置環境。

要打開Cloud Shell,請單擊控制台屏幕右上角的圖標。

 代碼

# 安裝運行Cloud ML所需的工具
curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/tools/setup_cloud_shell.sh | bash

# 將新安裝的工具添加到路徑中
export PATH=${HOME}/.local/bin:${PATH}

檢查操作環境

安裝完成後,執行以下命令以確認已設置適當的環境。

curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/tools/check_environment.py | python

如果您看到成功!您的環境配置正確。

初始化Cloud ML項目

允許Cloud ML訪問Google Cloud項目中的資源。

gcloud beta ml init-project

在Cloud Storage上添加存儲桶

Cloud ML需要訪問云存儲位置,以便在模型培訓和批量預測期間讀取和寫入數據。讓我們為Cloud ML添加一個存儲桶到雲存儲。可以使用任何名稱,但這次設置了添加到項目名稱中的“-ml”的存儲桶名稱。
 代碼

# 獲取項目名稱PROJECT_ID=$(gcloud config list project --format "value(core.project)") 

# 創建存儲桶名稱。(「項目名稱」 + 「-ml」)BUCKET_NAME=${PROJECT_ID}-ml

# 創建一個新存儲桶gsutil mb -l [地區名稱] gs://$BUCKET_NAME

*對於存儲區域,選擇與執行Cloud ML作業的區域相同的區域。此外,選擇單個區域(例如us-central1),而不是多區域(例如我們)。

完成上述操作後,Cloud ML的準備工作即告完成。

訓練

一旦Cloud ML準備就緒,我們將培訓您創建機器學習模型。培訓程序如下。

  1. 檢查您是否可以在當地進行訓練
  2. 在雲端上發送訓練腳本

在當地訓練

在雲端訓練之前,請確保您可以在本地訓練。通常你通過準備一小部分數據集進行訓練。但這一次,我使用了70,000個小數據集。所以,我將按照原樣訓練使用數據集。

※這項工作不是必需的,所以你可以跳過它。
 代碼

# 更改工作目錄cd ~/google-cloud-ml/samples/mnist/deployable/ 

# 刪除過去訓練中的文件輸出rm -f data/{checkpoint,events,export}*

# 在當地提供訓練gcloud beta ml local train \ --package-path=trainer \ --module-name=trainer.task

在雲上訓練

訓練在當地完成後,提交訓練工作。

# 設置作業名稱。 (以下是作業名稱的範例。)JOB_NAME=mnist_deployable_${USER}_$(date +%Y%m%d_%H%M%S) 

# 獲取項目名稱PROJECT_ID=`gcloud config list project --format "value(core.project)"`

# 設置Cloud Storage地址。(「プロジェクト名」+「-ml」)TRAIN_BUCKET=gs://${PROJECT_ID}-ml

# 設置輸出訓練數據的路徑TRAIN_PATH=${TRAIN_BUCKET}/${JOB_NAME}

# 刪除過去訓練中的文件輸出gsutil rm -rf ${TRAIN_PATH}

# 將訓練腳本發送到雲端gcloud beta ml jobs submit training ${JOB_NAME} \ --package-path=trainer \ --module-name=trainer.task \ --staging-bucket="${TRAIN_BUCKET}" \ --region= [リージョン名] \ -- \ --train_dir="${TRAIN_PATH}/train" \ --model_dir="${TRAIN_PATH}/model"

檢查作業的進度並等待它完成。

作業完成後,將顯示狀態:SUCCEEDED,並將新作業添加到作業列表中。

在雲存儲中,將與創建的存儲桶添加與作業名稱同名的目錄。

創建一個模型

有兩種方法可以創建模型。

在Cloud Shell中創建

# 設置型號名稱。(以下是型號名稱的例子。)MODEL_NAME=mnist_${USER}_$(date +%Y%m%d_%H%M%S) 

# 創建Cloud ML模型gcloud beta ml models create ${MODEL_NAME}

# 創建預測版本。(創建的第一個版本是默認版本)gcloud beta ml models versions create \ --origin=${TRAIN_PATH}/model/ \ --model=${MODEL_NAME} \ v1

使用GCP控制台創建

也可以在GCP控制台上創建模型和版本。

  1. 從菜單中選擇[機器學習]> [型號]。
  2. 單擊創建模型。
  3. 輸入型號名稱。
  4. [創建],然後單擊。
  5. 返回到模型列表屏幕,然後單擊新模型的名稱。
  6. 單擊+創建版本並輸入名稱和來源。(輸入$ {TRAIN_PATH} / model /作為源)
  7. 單擊[創建]返回到模型列表屏幕。

預測手寫的數字

已經創建了一個模型,該模型已經訓練了手寫數字的識別模式。現在,您已準備好讓模型預測手寫數字圖像所代表的數字。使用創建的模型和圖像數據進行預測以進行預測。預測數據準備為JSON文件。讓我們看一下內容。
 代碼

head -n1 data/predict_sample.tensor.json

image屬性包含手寫數字圖像數據(您希望模型預測的內容)作為浮動值列表。key屬性包含JSON文件中圖像的索引。

這是將上述數據轉換為圖像。讓我們看看模型如何識別這一點。

使用在線預測服務

執行以下命令將預測請求發送到Cloud ML在線預測服務。指定型號名稱和JSON文件名。

1. gcloud beta ml predict --model=${MODEL_NAME} \ --json-
2. instances=data/predict_sample.tensor.json

這是預測完成後的屏幕。讓我們與上面的手寫圖像進行比較。

除了第一次預測外,一切都是正確的。由於10個中有9個是正確的,識別準確度是90%嗎?

這次,我訓練了大約70,000個小數據集。對更大的數據集進行訓練可以提高準確性。

最後一句話

怎麼回事?機器學習很深入,我認為很難開始,但我希望這篇文章能讓你對機器學習感興趣。

Aaron Lee

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

Leave a Reply