iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 15
0

分散式訓練

主旨:了解何時需要分散式訓練以及如何使用

大量的工作,分散式訓練

現實問題上,我們可能在一台電腦上訓練一個模型要花掉數週,這時候你應該先想到的,便是如何加速你的訓練,而分散式訓練就是一個好方法,從一台機器分散到多台同時一起,加快訓練的過程。

而使用Estimator API就可以輕鬆地做到分散式訓練,下面大概說明一下使用的概念,在今天的實作會更詳細的介紹。

若要使用分散式訓練,一開始需要做的是在 estimator裡面宣告 config,指定你要分散訓練的一些參數 ( config=run_config ),接著就是使用 tf.estimator.train_and_evaluate() 來做到分散式訓練和評估。

config的內容需使用 tf.estimator.RunConfig() 來給定。

再來就是 training 和 eval 的 spec,例如說要跑多少step、input data是哪個,另外要注意的就是 eval 的頻率,不可以高於每次模型存 checkpoint 的頻率,你可以用 throttle_secs=xxx 來控制 eval 的頻率。

整體的分散式訓練程式碼大概如下,先定義 run_config,接著模型種類,train、eval的spec,最後使用分散式訓練與評估:

使用分散式學習還有一點需要注意:資料的隨機洗牌,你可能會認為說我在本機端已經先將資料隨機洗過了,然而因為你是使用分散式訓練,代表你要把你的資料分送到多個機台,這時候如果沒有在各個機台做隨機洗牌的動作,那麼這些機台拿到的批次資料都會一樣,變得只是多個機台做完全一樣的訓練動作,反而失去分散式訓練的意義了,所以千萬記得,縱使在分散式訓練還是要有隨機洗牌的動作。

[GCP Lab實作-9]:在TensorFlow使用批次做巨量資料的訓練

這個實作中,我們將學會:

  • 學習在訓練過程中,監看驗證指標的重要性
  • 使用 estimator.train_and_evaluate 函數

[Part 1]:重構程式以用來分散式訓練和監控

  1. 登入GCP,開啟Notebooks後,複製課程 Github repo (如Day9的Part 1 & 2步驟)。

  2. 在左邊的資料夾結構,點進 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow,然後打開檔案 d_traineval.ipynb

  3. 首先先將input資料重構讀入,如同昨天的lab一開始一樣:

  1. input columns一樣也需要將其轉成數值並定義好:

https://ithelp.ithome.com.tw/upload/images/20190916/201202088R11JnghEd.png

  1. 因為這次會和REST API對接(TensorBoard),所以需要用JSON的格式當作輸入特徵。

  1. 再來就是定義 train_and_evaluate() 函式,大致上和前面說的一樣步驟,tf.estimator.LatestExporter() 是將最後的模型存出,以便後續 eval 或生產模型上線使用。

  1. 定義好模型要輸出的路徑後,便可以打開TensorBoard,監看訓練過程的損失函數變化

  1. 在TensorBoard裡面看到的Loss對step做圖:

  1. 在TensorBoard裡面看到的模型圖,可以看到各個node之間如何連接:


今天介紹了分散式訓練,明天我們將完整地介紹 “使用GCP訓練、監測和部署ML模型”。


上一篇
鐵人賽Day14 - Intro to TensorFlow (4/6)
下一篇
鐵人賽Day16 - Intro to TensorFlow (6/6)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30

尚未有邦友留言

立即登入留言