雲端分散式訓練:雲上的機器學習引擎

作為「雲端訓練模型的大數據解決方案」這期分享的終結篇,我會在這一期當中向你展示怎麼讓你在機器學習當中自由施展,甚至還會談到一些 GPU 的使用知識!

這是一個系列視頻/文章 「AI Adventures」中的第九篇,由 Google 的開發技術推廣工程師 Yufeng Guo 主講,用通俗易懂的語言幫助你了解人工智慧和機器學習。在這一系列視頻/文章中,我們將一起探秘人工智慧的世界,共同品味藝術、探索科學以及掌握機器學習的工具。

第一篇:機器學習是什麼?

第二篇:機器學習「七步走」

第三篇:用評估器給花卉分類

第四篇:彈性伸縮的雲端託管服務

第五篇:通過 TensorBoard 將模型可視化

第六篇:通過深度神經網路再識評估器

第七篇:雲端訓練模型的大數據解決方案

第八篇:跟著 Google Research 體驗自然語言生成

所有的內容和視頻都會首發在「機智如你」專欄,目標是發布最新與谷歌相關的機器學習、TensorFlow 相關內容,如果你有任何問題,也歡迎在留言區向我們提出反饋

我們的物理資源夠用嗎?且看視頻或閱讀下文。

https://www.zhihu.com/video/929067325926297600

之前講雲端訓練模型的大數據解決方案的一期分享中我們討論了當數據集大到本地機器難以負擔時該如何應對,還討論了怎樣把數據都遷移到具備伸縮能力的雲平台當中。

今天我們要探討這個「如何將各種運算資源整合起來」的問題的第二部分。訓練大型模型時,現有方法引入了並行訓練手段。我們的數據被分割開,然後派發給眾多訓練機,然後模型需要將來自各台機器的訓練反饋及標誌變數重新組合在一起,從而創建完整的訓練模型。

▍你想要親手配置各種參數嗎?

如果你想這麼做,那就可以開幾台虛擬機,然後裝上所有必要的開發庫,接著將它們用網路連接起來,然後在這些機器組成的平台上運行分散式機器學習訓練。當一切結束後,你可能需要確保各機器都從平台離線。

表面上這些事情好像挺簡單的,但是諸如 GPU 驅動、各種底層庫之間的兼容性等等問題可以非常具有挑戰性的。

架設在雲端的訓練引擎

所幸,我們會用 Cloud Machine Learning Engine 的訓練手段來將 Python 代碼執行生成模型,並且期間完全不需要操作各種基礎構建。這項雲端服務會在自身需要時自行調配與配置資源,並且在訓練完成之後自行關閉。

按照以下三步使用 Cloud ML Engine:

  1. 把 Python 程序代碼打包
  2. 創建一個你需要的機器類型描述文件
  3. 把模型訓練任務提交到雲端

接下來我們研究怎樣配置訓練工程才能好好利用此項服務。

▍第一步:代碼打包

把代碼從 Jupyter notebook 拷貝到 task.py 文件中。這會是一個可以供其他文件調用的 Python 模塊。

接下來把 task.py 打包成 Python 包。Python 包是把模塊文件放在另一個文件夾中,這裡我們取名「trainer」,然後把空文件 __init__.pytask.py 放在裡面。

最終目錄結構是由一個「trainer」的文件夾和其中的兩個文件 __init__.pytask.py 構成。這個包名就叫 trainer,其中模塊路徑是 trainer.task。如果你想把代碼分解成更多模塊,那麼可以把各部分再包含進這個文件夾,比如你可以在 trainer 目錄放一個 util.py 文件。

▍第二步:配置文件 config.yaml

當代碼封裝進了 Python 包,接下來就要創建指定用於訓練模型的設備規格了。你可以選擇在配備了 GPU 的小批量的機器上運行,抑或是大量的訓練機。

使用預置的規模層其實很簡單

這裡有不少預置的規格參數,它們對初學者來說非常容易上手,並且當你一定程度熟悉之後,就可以使用你喜歡的 自定義層次體系結構。

對於自定義簇,你所需的就是指定想要的機器類型

好了,現在 Python 代碼打包好了,配置文件也寫好了。趕緊進入你迫不及待地訓練操作吧。

▍第三步:提交訓練任務

提交任務需要用到 gcloud 命令行工具,運行 gcloud ml-engine jobs submit training 命令開始工作。這個命令還有一個等價的 REST API 調用方式。

我們指定獨一無二的任務名、包路徑、模塊名、用於訓練的伺服器區域和一個用於放置訓練結果的雲存儲路徑。一定要確保運行和輸出存儲在同一個區域,這樣才能獲得比較好的性能。

gcloud ml-engine jobs submit training

job-id $JOB_ID

package-path=trainer

module-path=trainer.task

region=us-central-1

job_dir=gs://cloudml-demo/widendeep

命令一旦執行,你的 Python 包就會被壓縮上傳到指定目錄。然後該訓練任務會在雲端開始,就是在之前配置里指定的那些機器上面。

監測訓練進展

在 cloud console 切換到 ML Engine 面板,然後選擇「Jobs」就可以看到訓練的過程了。

從頁面中,我們可以看到所有運行過的以及正在運行的訓練任務都會被羅列其中。右側記錄了每個任務進行的耗時,還有一個用於查看模型生成日誌信息的鏈接。

有一些模型比其他的要耗費更多時間 ;-)

那麼如何預測呢?

我們的代碼會把訓練得到的模型放到指定的 Cloud Storage 路徑下,所以我們能夠用第四期「彈性伸縮的預測服務」中討論的方法將預測用的模型指向訓練的生成目錄,然後啟動一項預測服務。


後續步驟

使用 Cloud Machine Learning Engine,我們可以不用勞神配置底層架構就實現分散式的訓練任務。於是我們就有了更多時間和精力來處理數據。只需把代碼打包,然後添加配置文件,接著上傳到雲端開始訓練任務即可。如果你想知道得更多,請訪問 Cloud Machine Learning 入門指南。

如果你想知道 TensorFlow 的分散式訓練流程是如何運轉的,歡迎觀看 TensorFlow DevSummit 上的深度探討 youtu.be/la_M6bCV91M


感謝閱讀本期 Cloud AI Adventures。如果你喜歡這篇文章,歡迎點贊。如果你還想關注更多內容,在知乎關注我,關注「機智如你」專欄,或是在 Medium 關注 Yufeng G、訂閱 YouTube 頻道,這樣就不會錯過更多精彩啦!

▏原文出處:Medium - Distributed training in the cloud: Cloud Machine Learning Engine

▏封面來源:YouTube 視頻縮略圖

▏視頻出處:YouTube - Distributed Training in the Cloud

▏字幕翻譯:谷創字幕組

▏文章編輯: @楊棟


推薦閱讀:

Spark SQL中的聚合(Aggregate)實現
BIM360、Buzzsaw與SAAS模式
作為全行業的IT基礎,遊戲領域是如何擁抱雲計算的?

TAG:分布式计算 | 大数据 | 云计算 |