現實問題上,我們可能在一台電腦上訓練一個模型要花掉數週,這時候你應該先想到的,便是如何加速你的訓練,而分散式訓練就是一個好方法,從一台機器分散到多台同時一起,加快訓練的過程。
而使用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,最後使用分散式訓練與評估:
使用分散式學習還有一點需要注意:資料的隨機洗牌,你可能會認為說我在本機端已經先將資料隨機洗過了,然而因為你是使用分散式訓練,代表你要把你的資料分送到多個機台,這時候如果沒有在各個機台做隨機洗牌的動作,那麼這些機台拿到的批次資料都會一樣,變得只是多個機台做完全一樣的訓練動作,反而失去分散式訓練的意義了,所以千萬記得,縱使在分散式訓練還是要有隨機洗牌的動作。
在這個實作中,我們將學會:
estimator.train_and_evaluate
函數登入GCP,開啟Notebooks後,複製課程 Github repo (如Day9的Part 1 & 2步驟)。
在左邊的資料夾結構,點進 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow,然後打開檔案 d_traineval.ipynb。
首先先將input資料重構讀入,如同昨天的lab一開始一樣:
train_and_evaluate()
函式,大致上和前面說的一樣步驟,tf.estimator.LatestExporter()
是將最後的模型存出,以便後續 eval 或生產模型上線使用。今天介紹了分散式訓練,明天我們將完整地介紹 “使用GCP訓練、監測和部署ML模型”。