Microsoft AI 大藍圖 (1): Azure Machine Learning Services (第二代)

Azure Machine Learning Service 提供各種機器學習、深度學習的實作範本

這時一篇介紹由 Microsoft 提供各種與機器學習 (Machine Learning) 相關服務、平台、工具的系列文章,以下是系列目錄:

  1. Azure Machine Learning Service
  2. Microsoft Machine Learning Server 及 SQL Server 中的 Machine Learning Services
  3. Data Science Virtual Machine (on Azure)
  4. Azure HDInsight 中的 Spark MLLib
  5. Batch AI Training Service
  6. Microsoft Cognitive Toolkit (CNTK) — 深度學習框架
  7. Microsoft Cognitive Services — 直接取用的辨識、認知服務

新一代 Azure Machine Learning Services 有何不同

Azure Machine Learning Services 不是新的服務,2014 年就以 Azure Machine Learning Studio 的形式推出,它提供想要做機器學習的資料科學家或程式開發人員一個圖形化的介面設計機器學習的資料與運算流程,並且提供依照需求的運算資源訓練出學習模型,最後以 Web Services 的形式來取用訓練好的模型。

Azure Machine Learning Studio 的操作畫面

今年 (2017 年) 9 月,微軟推出新一代的 Azure Machine Learning Services,有別於第一代,新一代的 Azure Machine Learning Services 希望給機器學習的開發人員有一套好用的開發工具,並且能夠更輕易地將開發好的訓練程式部署在各種環境下執行訓練,同時又能管理及部署訓練好的模型

新一代的 Azure Machine Learning Services 希望提供更完整的機器學習開發與應用模型的框架

它重新設計的平台及服務如下:

  • Azure Machine Learning Workbench
  • Azure Machine Learning Experiment Services
  • Azure Machine Learning Model Management Service
  • Microsoft Machine Learning Libraries for Apache Spark (MMLSpark)
  • Visual Studio Code Tools for AI

以下分別介紹每一項服務的細節。

Azure Machine Learning Workbench

Azure Machine Learning Workbench 提供一個桌面工具(支援 Windows 及 Mac OS X),它可以幫你管理一個機器學習的專案要在本機、docker 或是遠端環境中執行,同時在這個工具裡面也包含了:

  • 一個 Python (目前是裝 3.5.2) 的環境,以及一些基本常用的函式庫,有其它函式庫需求還是可以 pip 安裝,若選擇在本機上執行機器學習專案就會在這個環境裡執行。
  • 內建 Jupyter Notebook 的服務,所以專案中的 .ipynb 檔案可以直接在這裡執行。
  • 管理並監控機器學習專案的執行狀況。
  • 資料配置與管理工具,把資料來源抽象化,使得專案中需要訓練或測試的資料部份可以不必隨著運算環境切換時修改。

簡單地說,這個工具就是讓你在開發機器上寫程式時的小幫手,不僅可以在開發過程中測試,也很方便部署到其它環境來執行運算。

Azure Machine Learning Experiment Service

機器學習的專案開發完畢後,最重要的就是跑訓練及測試,Azure Machine Learning Experiment Service 定義了一套機器學習專案的執行環境,只要機器學習專案是按照這個執行環境開發,這樣就能在支援這樣執行環境的:

  • 開發機本地端
  • Docker container
  • Spark cluster

中來執行專案。而且它也有很好的獨立性,讓你的訓練運算不會受到太多環境的干擾。

Azure Machine Learning Model Management Service

當機器學習專案訓練完畢後,產生的模型就可以為後續所套用,透過 Azure Machine Learning Model Management Service 就可以把這些訓練好的模型部署在不同的環境中,像是:

  • 程式運行的虛擬機器
  • Container
  • 雲端平台
  • IoT Edge 平台

有了這樣的機制,你就可以在雲端或是強大的伺服器上跑機器學習的訓練算,而訓練完的模型則可以部署到 IoT 裝置上直接套用。

這部份是用 docker container 的形式來呈現,所以只要能跑 container 的環境幾乎都能跑,需要 GPU 的就要裝好相關的驅動程式及工具(如:nvidia-docker)

Microsoft Machine Learning Library for Apache Spark (MMLSpark)

MMLSpark 是一套開源的 Apache Spark 函式庫,它讓開發人員在使用 Spark 做機器學習專案時更容易與 Micorosft Cognitive Toolkit (CNTK) 與 OpenCV 整合,更多細節可以參考這頁說明

Visual Studio Code Tools for AI

Visual Studio Code Tools for AI 中監視運算工作的畫面

這是一個 Visual Studio Code 的外掛程式,它讓 Visual Studio Code 可以與 Azure Machine Learning Services 結合,除了開發程式之外,也可以直接在 Visual Studio Code 管理訓練的運算工作以及部署模型。

實際使用 Azure Machine Learning Services

以下以兩個例子來瞭解使用 Azure Machine Learning 的 end to end 體驗。操作之前,建議先閱讀這頁說明將 Azure Machine Learning Services 中的 Workspace 建立好且安裝 Azure Machine Learning Workbench。

當然也建議安裝 Visual Studio Code 並且安裝 Visual Studio Code Tools for AI 的外掛套件。

使用 CNTK 來做 MNIST 手寫數字辨識的專案

MNIST 手寫數字辨識是很經典的深度學習專案,我們可以從 Azure Machine Learning Services 中的專案範本直接建立一個使用 CNTK 來開發的 MNIST 手寫數字辨識的學習專案。

建立專案有兩個方式:

  • 打開 Azure Machine Learning Workbench,然後在 Workspace 中建立一個新專案:
在 Azure Machine Learning Workbench 中新增專案
  • 在裝好 VSCode Tools for AI 的 VSCode 中按下 Ctrl + Shift + P (Mac 下是 Cmd + Shift + P),然後選擇 AI: Open Azure ML Sample Explorer:
在 Visual Studio Code 中新增專案

不論用哪種方式建立專案都是相同的,在 Azure Machine Learning Workbench 中可以設定專案用 VSCode 開啟;VSCode 在建專案時也會要你填入對應的 Azure Machine Learning Services 的 Workspace。

CNTK_MNIST 專案範本,當然你也可以使用自己的深度學習專案

完成專案建立後,你會得到一個已經用 CNTK 寫成的深度學習專案 (也就是不用寫程式就能動了),這就可以來體驗一下怎麼把這個專案放在 Azure Machine Learning Experiment Service 中執行。

在 Azure Machine Learning Workbench 開啟這個專案,你會看到專案首頁就可以直接執行專案,而且可以選擇 local 或 docker (系統必須先安裝好 docker 的環境)來執行。

選擇在 Workbench 中 (local) 還是 docker 來作為 Experiment Service 的環境

不過不要馬上急著執行,因為你很有可能還沒有在 Workbench 的環境中安裝 CNTK 的函式庫,所以請照著頁面下方說明安裝好 CNTK 的套件再來執行。若是選擇在 docker 中執行則無此問題,因為它會把該安裝的環境在 container 中設定好。

我推薦盡量用 docker 環境跑,因為實務上開發完成應該都會丟到遠端的機器上執行,這也會是用 docker 來執行。

運行後就可以觀看結果:

可以在 Workbench 中觀看運行結果

若是在 Visual Studio Code 操作,在 Workbench 開啟的狀態下,你也可以直接在 VSCode 中提交運算的工作:

Visual Studio Code Tools for AI 可以讓你專注工作在編輯器上

如果在本機上執行沒有問題,打算調整參數把它部署到雲端執行(透過 docker container 的形式)也很容易,只要把要運行的環境(例如:在 Azure 上含有 GPU 規格的 N 系列虛擬機器),那就把機器的組態設定一下,讓它變成 Azure Machine Learning Experiment Service 就可以整合在 Workbench 的操作中。

如果要跑在 GPU 的環境,別忘了修改 aml_config 目錄下的組態檔,使用 GPU 版的 CNTK 及 MMLSpark,還有目標機器上也要先裝好 docker 跟 nvidia-docker 的環境。
另外,Workbench 會在目標機器上使用 sudo 來執行 docker/nvidia-docker,但是需要被設定無密碼保護,所以也要在目標機器上修改 /etc/sudoers 把登入的帳號加入不需要密碼。

按照說明(在 Workbench 的專案首頁即可看到)設定 compute target 之後,你就可以在 Workbench 或 VSCode 之中看到新的目標環境可以執行運算:

把 cntk_mnist.py 的工作丟到設定好的遠端環境 (e.g., sklearn) 上執行

當工作完畢時,你也可以從 job detail view 中把訓練好的模型保存下來(放在 artifacts 目錄下):

雖然在遠端機器上進行訓練,但是可以把訓練好的模型保存下來,日後再部署到不同的地方

結論

有了新一代的 Azure Machine Learning Services,最主要在開發、執行訓練測試的環境準備上幫了很大的忙,你可以在一般的機器上進行機器學習專案的開發測試,而真的需要跑大量資料的訓練以及測試時,再把這個專案部署到合適的機器(例如有很強很多顆 GPU 的環境)上進行運算。是個增加生產力的平台。

不如現在就玩玩它的 5 分鐘入門手冊體驗看看吧!

參考資料