使用 Azure 機器學習服務執行您使用 Python 建立好的智慧模型

Azure 機器學習服務(以下簡稱 Azure ML)是 Microsoft 所推出的一個雲端服務,它讓您能夠使用易於操作的圖形化介面,進行資料整理以及機器學習的運算,您可以在這個服務上從 0 開始,搭配這服務上不斷推出的各種學習演算法,建立一個完整的學習模型,並且將學習後的智慧模型變成 Web 服務,便能透過 Web API 的方式結合,為您的應用程式加入智慧。(詳情可以見我之前寫過的文章

如同其它的 Azure 服務一樣,Azure ML 也提供了可以操作它的 REST API,而 Azure 團隊也開發了一個 Python 的 Azure ML 用戶端函式庫,讓使用 Python 的開發人員或資料科學家便能輕易與 Azure ML 的各種服務結合。這篇文章介紹如何將您自己 Python 程式建立好的智慧模式,讓它透過 Azure ML 來提供服務。

建立模型

當然一開始您一定要有一個 Azure ML 的 workspace:

  • 若您已經有 Azure 訂閱(沒有的話也可以免費註冊一個),直接在管理後台建立一個機器學習的工作區(workspace)。
  • 若您尚未有 Azure 訂閱,也可以到 Azure ML Studio 中,用 Microsoft 帳號免費登入使用,這與已經有 Azure 訂閱的正式帳號比起來只是有一些計算時間及效能上的差異而已。

然後在你的 Python 專案中安裝 azureml 這個套件,這個只需要直接使用像是 pip install azureml 這樣的指令便能完成安裝。

以下是一個範例程式,它是使用 Anaconda 提供的 Python 2.7 版本所撰寫,這個 Python 中含有一些資料分析常用的模組(如:numpy, scikit-learn 等):

 #Build the model
from sklearn import svm
from sklearn import datasets
clf = svm.SVC()
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf.fit(X, y) 

#Predict using sample
sample = [7,3.2,4.7,1.4]
result = clf.predict(sample) 

#Check the result
print(result[0])

上面這段程式使用了 SVM (Support Vector Machine) 並搭配安德森鳶尾花卉數據集來做機器學習,所以建好的模型(clf)便能拿來分類(clf.predict)鳶尾花的種類。

發佈至 Azure ML

透過上面這段程式碼已經建立好一個能分類鳶尾花的智慧模型,接下來我們只要使用 azureml 模組提供的發佈服務相關的函式就能把這個學習好的模型放上 Azure ML:

 #Publish as a web service
from azureml import services
@services.publish('您 Azure ML 工作區 ID', '您 Azure ML 工作區的授權碼')
@services.types(sep_l = float, sep_w = float, pet_l=float, pet_w=float)
@services.returns(int) #0, or 1, or 2
def predictIris(sep_l, sep_w, pet_l, pet_w):
  inputArray = [sep_l, sep_w, pet_l, pet_w]
  return clf.predict(inputArray)

首先您必須先找到您 Azure ML 工作區的 ID 以及授權碼,只要您建立好 Azure ML 工作區,就可以在 Azure ML Studio 中的設定裡找到它們:

執行成功後,您就可以呼叫 predictIris.service(3,2,3,4) 這樣來測試是不是能正常運作,這個呼叫就是在 Azure ML 上執行完才回傳結果。 而要取得發佈到 Azure ML 的 Web 服務的資訊,就直接把

  • predictIris.service.help_url
  • predictIris.service.url
  • predictIris.service.api_key

這三個變數印出來看,第一個是說明文件的 URL,而第二個是要對這個智慧模型進行 HTTP POST 呼叫端點的 URL,第三個就是呼叫 API 時需要帶入的授權金鑰。這樣一來就能在其它平台發出 HTTP POST 的呼叫,運用到這個已經放在 Azure ML 上的智慧模型了。