➣ Reading Time: 23 minutes

前言

今天我們先進入 How Google does Machine Learning 的第五章節,之後再回到第四章~

這次鐵人賽的30天中,我目前所寫文章的所有課程目錄如下:

Course – How Google does Machine Learning

第五章節的課程地圖:(紅字標記為本篇文章中會介紹到的章節)
* Python notebooks in the cloud
* Module Introduction
* Cloud Datalab
* Cloud Datalab
* Demo: Cloud Datalab
* Development process
* Demo of rehosting Cloud Datalab
* Working with managed services
* Computation and storage
* Lab: Rent-a-VM
* Intro to Qwiklabs
* Intro to Renting-VM Lab
* Lab: Rent-a-VM to process earthquake data
* Lab debrief
* Cloud Shell
* Third wave of cloud
* Third Wave of Cloud: Fully-Managed Services
* Third Wave of Cloud: Serverless Data Analysis
* Third Wave of Cloud: BigQuery and Cloud Datalab
* Datalab and BigQuery
* Lab Intro: Analyzing data using Datalab and BigQuery
* Lab: Analyzing data using Datalab and BigQuery
* Lab Debrief: Analyzing Data using Datalab and BigQuery
* Machine Learning with Sara Robinson
* ML, not rules
* Pre-trained ML APIs
* Vision API in action
* Video intelligence API
* Cloud Speech API
* Translation and NL
* Lab: Machine Learning APIs
* Lab: Pretrained ML APIs Intro
* Lab: Invoking Machine Learning APIs
* Lab Solution


1. Module Introduction

課程地圖
* Python notebooks in the cloud
* Module Introduction

這章基本的用文字介紹了一下雲端的環境,
我們會用python notebook做機器學習的開發,
而notebook的服務在google雲端上。

Cloud Datalab基本上是本章節使用的開發環境,
而此服務在VM上運行,包含python notebook,
我們同時也會教學Compute Engine的原理Cloud Storage的知識
既然是VM就必須提調VM的兩個特性:

  1. 可以實際控制與更改notebook的機器內容,且無須重寫
    > 例如:添加GPU或增加更多memory
  2. VM是短暫的,如果想保存內容須保存在VM外
    > 而這點最方便的方法就是使用Cloud Storage。
    我們將notebook的內容保存在Cloud Storage中,
    同時還能達到版本控制的效果。

而這個章節的學習目標,我們可以參考如下:

Module Learning Objectives(這個module的學習目標)
* Carry out data science tasks in notebooks

練習使用notebooks完成資料科學的任務
* Rehost notebooks on the cloud
在雲上使用notebooks,並更改硬體規格
* Execute ad-hoc queries at scale
我們將將Cloud Datalab與BigQuery一起使用,BigQuery是雲上的數據分析服務,可以讓超越傳統數據庫的執行速度與規模進行queries的查詢
* Invoke pre-trained ML models from Datalab
能使用一些pre-trained ML models(前面的章節有介紹到),並在Cloud Datalab中運行。

https://ithelp.ithome.com.tw/upload/images/20190909/20120424IZmz7tT6sZ.png


2. Cloud Datalab

課程地圖
* Python notebooks in the cloud
* Cloud Datalab
* Cloud Datalab
* Demo: Cloud Datalab
* Development process

這章稍微介紹了一下Datalab的環境,以jupyter作為基礎的open source平台。
下面為Datalab的介面展示:

https://ithelp.ithome.com.tw/upload/images/20190909/20120424VHrZ0Uq5Lp.png

可以看到主要有三個部分:code, output, markup sections彼此交錯
也因為這樣的交錯才能使notebook如此實用,

code:

在此打你的python code
執行code的方式: 按 shift+enter 或 按上方的 Run botton

output:

注意output可以為圖形,不像command line一樣。

markup:

可以寫一些markup(markdown語法),可以解釋你這個部分在做什麼。

最後是綠色部分:

有可以將notebook匯出的按鈕,可以將此notebook下載下來。
可以commit code至Google Cloud Platform至code repository的按鈕。
Clear all: 清除所有output
Run all Cells: 執行所有Cells

所以整個Datalab的使用流程大概可以表示成下圖:
https://ithelp.ithome.com.tw/upload/images/20190909/20120424vyVPouZKR2.png

另外要特別強調的是,Datalab的一大特色是可以線上協同合作
傳統的notebook要線上合作有個基本的問題,誰當host?
一但host只要關機,任何人都無法繼續工作。
而Datalab解決了這個問題,而我們只要給一個URL就可以了。

另外一種Share的方式可以利用版本控制系統,例如Git,
而且只要我們想改動硬體的規格,任何人都可以直接改好後,
重新啟動VM,就直接以新的硬體規格來執行程式。

簡單來說,Datalab架於雲端的VM上,任何人只要連線即可開始工作。
而只要工作結束了,隨時也能將此VM刪除。

https://ithelp.ithome.com.tw/upload/images/20190909/20120424vIAO0YtmEy.png


3. Demo of rehosting Cloud Datalab

課程地圖
* Python notebooks in the cloud
* Cloud Datalab
* Demo of rehosting Cloud Datalab

這個章節主要來介紹如何在Datalab中更換VM的硬體規格。

Step1. 先將想更改規格的VM打勾,上方按下暫停VM
https://ithelp.ithome.com.tw/upload/images/20190909/20120424LY0080InDP.png

Step2. 點選Edit,在方框處更改想要的硬體規格,記得在下方按”Save”
https://ithelp.ithome.com.tw/upload/images/20190909/20120424K2AXFTlKsf.png

Step3. 點選要重啟的VM,按上方Start,確認重新Start
https://ithelp.ithome.com.tw/upload/images/20190909/20120424DARMJZEZo9.png

小提示:在未來的lab中,我們只需要用到”n1-standard-1 VM”(basic plain vanilla virtual machine)的硬體規格,就已經非常足夠執行我們所要的程式。


4. Working with managed services

課程地圖
* Python notebooks in the cloud
* Working with managed services

這個章節會介紹透過雲端執行ML時的大致流程。

以讀取CSV file作舉例,如果是一般的處理方式,
首先我們將CSV file可以透過Pandas and Apache Beam進行資料前處理,
再丟入至Tensorflow進行訓練,透過訓練使其不斷的進步。

如果同樣的例子透過GCP的方式進行處理,
首先用Google Cloud Storage儲存資料,用Cloud Dataflow進行資料前處理,
再用Cloud Machine Learning進行訓練,透過Cloud ML Engine進行參數最佳化。
https://ithelp.ithome.com.tw/upload/images/20190909/20120424TZBQ9MFCpp.png

使用GCP就能產生與其他GCP產品一樣的效果,
而且數千台機器同時探索並分析數據,
而且就算已經習慣使用如Pandas, Seaborn 或 Plotly之類的工具,
也能夠直接在GCP使用,透過API直接串連起來。

https://ithelp.ithome.com.tw/upload/images/20190909/20120424sR4STWtlSf.png

Compute Engine
先去Cloud Shell並輸入”datalab create”,並設定一些參數,
例如compute zone, machine type,這些都屬於Compute Engine

Compute Engine是一種向雲端租借的機器(VM),所以也代表不用永久擁有。
當VM消失時,在此機器上的工作也會消失,
因此我們還會在下一個章節中介紹Cloud Storage的知識,
Cloud Storage就是透過雲端來幫助我們儲存這些資料的地方,避免資料遺失。

https://ithelp.ithome.com.tw/upload/images/20190909/20120424FloHSlRu1m.png


5. Computation and storage

課程地圖
* Python notebooks in the cloud
* Computation and storage

這個章節會介紹Compute Engine的原理Cloud Storage的知識
了解Compute Engine可以清楚我們是怎麼在雲端運算的,
了解Cloud Storage則可以清楚資料是怎麼儲存的。

Compute Engine基本上可以想像成是分散在世界各地的CPU,
而Cloud Storage則是分散在世界各地的儲存裝置(硬碟)。

Compute Engine
Datalab雖然是一個Compute Engine所執行的,
但我們可以客製化我們的Compute Engine,

例如:幾核心電腦、有多少memory、硬碟有多少容量、作業系統
而這些設定皆可以修改,不用太擔心一開始的設定值。
VM上的disk速度非常快,但當VM消失時,disk也會消失。

Cloud Storage
而Cloud Storage是持久的,也就是說放在Cloud Storage的資料會被複製存儲在多個位置。
我們可以透過任何電腦取得這些資料,並直接讀取內容。
而Google Center的網路以petabit bisectional bandwidth速度在通信,
這也代表著十萬台機器可以以每秒10 gigabits的速度在相互通信。

我們來談一下資料在雲上的形式,
一個典型的Cloud Storage URL可能看起來像gs:acme-sales/data/sales003.csv
我們稱這樣的資料存儲為”bucket”,bucket的名稱是全球唯一的,
就像是domain name或internet URL一樣,
基本上除非真的非常不幸,否則bucket的名稱很難已經被使用。

Compute EngineCloud Storage的連結方式:
gs URL 就像是一個資料結結構一樣,一個gs URL對應一個在Cloud Storage的物件
我們可以使用gsutil來取用他,這是一個給command line用的工具,
我們可以透過Google Cloud SDK下載到他,
雲端上的Compute Engine已經內建好gsutil了。

如果是想在自己的電腦使用,可以去下載Google Cloud SDK,裡面包含gsutil的功能。
Gsutil 也使用大家所熟悉的 Unix command line的表示方式:

像是 MB 與 RB 代表著”建立bucket”與”移除bucket” (這個真的滿有熟悉感的/images/emoticon/emoticon37.gif)
或 CP 代表著”copy”

如果不使用command line,也可以使用GCP console 或 programming API, REST API
我們示範一個複製大量檔案作為例子,我們將sales*.csv複製到一個特別的Cloud Storage位置
(註:我們前面提到Cloud Storage buckets是耐久的,也就表示這資料會被重複儲存至多個位置。)

https://ithelp.ithome.com.tw/upload/images/20190909/20120424unLg2mFDis.png

不過這裡要提醒的是,雖然資料被儲存在多個位置,但不代表不用在意”網路延遲問題”,
可以的話還是盡量把資料儲存在計算的位置附近

另外一個情況是可能有時會有區域的伺服器故障,
我們應該要分散apps與data至多個zones以保護這樣的情況,
一個zone故障了,可以即時調用附近的zone來接續服務。
zone是分散在一個regions的不同位置,被命名為region name-a zone, letter

而當我們將做一個全球可用的app,
我們就可以考慮分散apps與data在不同的regions,來為全球的客戶提供服務。

https://ithelp.ithome.com.tw/upload/images/20190909/20120424sN1Zkl8d55.png


本文同步發佈在: 第 11 屆 iT 邦幫忙鐵人賽
【Day 8】 Google ML – Lesson 7 – 先來初步認識一下google雲端上執行 python notebook (Cloud Datalab) 的環境


參考資料

  ⭐Google Machine Learning 相關文章整理⭐:
1.訂閱課程【Google ML】1 – Google ML – 參賽原因 與 就先從認識 coursera 與訂閱課程開始第一天吧
⭐ML 基礎知識篇⭐:
1.基礎ML知識什麼是ML? 為什麼ML最近才紅起來? 可參考:【Day 3】
2.設計ML問題如何設計一個ML問題?可參考:【Day 4】
3.ML與一般算法比較比較一般算法與ML算法,看出ML的優勢。可參考:【Day 11】
⭐ML 應用策略篇⭐:
1.ML的成功策略使用ML要成功,常需要的關鍵策略。可參考:【Day 5】
2.ML各階段與比重分配企業運行ML時,在ML的各階段應該放的比重與心力。可參考:【Day 6】
3.ML失敗的常見原因大部分企業使用ML卻失敗的前十大主因。可參考:【Day 6】
4.企業如何引入MLML在企業運行的五大階段與注意事項。 可參考:【Day 7】
⭐GCP 認識篇⭐:
1.在GCP上運行ML的階段在GCP上運行ML大概有哪五大階段? 可參考:【Day 2】
2.GCP上ML的介紹GCP上ML的介紹。可參考:【Day 8】【Day 11】
3.已訓練好的ML模型已訓練好的ML模型。建議可直接使用,不需要再自己訓練。如:Vision API(圖片辨識), Video intelligence API(影片辨識), Speech API(語音辨識), Translation API(語言翻譯), Natural Language API(自然語言處理)。介紹:【Day 4】詳細整理與比較:【Day 12】lab實作:【Day 14】
⭐GCP 上的 lab 實作篇⭐:
1.Lab 事前準備Lab 0 – 在GCP上開始lab前的事前準備與注意事項。可參考:【Day 9】
2.GCP上使用 VMLab 1 – 在GCP上分析地震資料與製圖,並儲存在雲端。可參考: 【Day 10】
3.BigQuery 與 DatalabLab 2 – 使用 BigQuery 與 Datalab 視覺化分析資料。可參考:【Day 13】
4.google ML APIsLab 3 – 使用google已訓練好的ML模型進行實作。如:Vision API(圖片辨識), Video intelligence API(影片辨識), Speech API(語音辨識), Translation API(語言翻譯), Natural Language API(自然語言處理)。可參考:【Day 14】
⭐ML中的不同學習種類⭐:
1.【Day 15】 監督式學習(Supervised Learning) 與 非監督式學習(Unsupervised Learning) 的介紹和比較
⭐訓練「一個」ML模型⭐:
(這裡以 監督式學習(Supervised Learning) 為例)
1. (訓練前)決定資料集與分析資料你想要預測的是什麼資料? 這邊需要先知道 example、label、features的概念。介紹可參考:【Day 15】而我們這次作為範例的訓練資料集介紹在:【Day 19】
2. (訓練前)決定問題種類依據資料,會知道是什麼類型的問題。regression problem(回歸問題)? classification problem(分類問題)? 此處可參考:【Day 16】與進階內容:【Day 17】
3. (訓練前)決定ML模型(ML models)依據問題的種類,會知道需要使用什麼對應的ML模型。回歸模型(Regression model)? 分類模型(Classification model)? 此處可參考:【Day 18】神經網路(neural network)? 簡介於:【Day 25】
4.(模型裡面的參數)ML模型裡面的參數(parameters)與超參數(hyper-parameters) 此處可參考:【Day 18】
5. (訓練中) 調整模型評估當前模型好壞損失函數(Loss Functions):使用損失函數評估目前模型的好與壞。以MSE(Mean Squared Error), RMSE(Root Mean Squared Error), 交叉熵(Cross Entropy)為例。此處可參考:【Day 20】
6. (訓練中) 調整模型修正模型參數以梯度下降法 (Gradient Descent)為例:決定模型中參數的修正「方向」與「步長(step size)」此處可參考:【Day 21】
7. (訓練中) 調整腳步調整學習腳步透過學習速率(learning rate)來調整ML模型訓練的步長(step size),調整學習腳步。(此參數在訓練前設定,為hyper-parameter)。此處可參考:【Day 22】
8. (訓練中) 加快訓練取樣與分堆設定batch size,透過batch從訓練目標中取樣,來加快ML模型訓練的速度。(此參數在訓練前設定,為hyper-parameter)。與迭代(iteration),epoch介紹。此處可參考:【Day 23】
9. (訓練中) 加快訓練檢查loss的頻率調整「檢查loss的頻率」,依據時間(Time-based)與步驟(Step-based)。此處可參考:【Day 23】
10. (訓練中) 完成訓練(loop) -> 完成重覆過程(評估當前模型好壞 -> 修正模型參數),直到能通過「驗證資料集(Validation)」的驗證即可結束訓練。此處可參考:【Day 27】
11. (訓練後)訓練結果可能問題「不適當的最小loss?」 此處可參考:【Day 28】
12. (訓練後)訓練結果可能問題欠擬合(underfitting)?過度擬合(overfitting)? 此處可參考:【Day 26】
13. (訓練後)評估 – 性能指標性能指標(performance metrics):以混淆矩陣(confusion matrix)分析,包含「Accuracy」、「Precision」、「Recall」三種評估指標。簡介於:【Day 28】詳細介紹於:【Day 29】
14. (訓練後)評估 – 新資料適用性泛化(Generalization):對於新資料、沒看過的資料的模型適用性。此處可參考:【Day 26】
15. (訓練後)評估 – 模型測試使用「獨立測試資料集(Test)」測試? 使用交叉驗證(cross-validation)(又稱bootstrapping)測試? 此處可參考:【Day 27】
16.(資料分堆的方式)(訓練前) 依據上方「模型測試」的方法,決定資料分堆的方式:訓練用(Training)、驗證用(Validation)、測試用(Test)。此處可參考:【Day 27】
⭐從所有ML模型的訓練結果中,找到「最好的」ML模型⭐:
( 原因:「訓練好一個模型」不等於「找到最好的模型」 )
1.(訓練模型)【Day 27】 使用「訓練資料集(Training)」訓練模型(調整參數),也就是「上方表格」在做的內容
2.(結束訓練)【Day 27】 訓練到通過「驗證資料集(Validation)」結束訓練(未達到overfitting的狀態前)
3.(模型再調整)【Day 27】 超參數(hyperparameters)調整或神經網路的「layer數」或「使用的node數」(一些訓練前就會先決定的東西)
4.(loop)【Day 27】 (模型再調整)後,重複上述(訓練模型)、(結束訓練),完成訓練新的模型
5.(找到最佳模型)【Day 27】 從「所有訓練的模型」中,找到能使「驗證用資料集(Validation)」最小的loss,完成(找到最佳模型)
6.(決定是否生產)【Day 27】 可以開始決定要不要將此ML模型投入生產。此時我們可以使用「獨立測試資料集(Test)」測試? 使用交叉驗證(cross-validation)(又稱bootstrapping)測試?
⭐訓練 ML 模型的小實驗⭐:
1.【Day 24】 TensorFlow Playground 的簡介與介面介紹
2.【Day 24】 learning rate 的改變對訓練過程的影響
3.【Day 25】 使用神經網路(neural network)分類資料
4.【Day 25】 觀察batch size如何影響gradient descent
⭐30天內容回顧與課程索引, 參賽心得, 未來計畫與感謝⭐:
1.【Google ML】30 – 30天內容回顧與課程索引, 參賽心得, 未來計畫與感謝