iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
AI & Data

我不太懂 AI,可是我會一點 Python 和 Azure系列 第 19

Day 19 Azure machine learning: workspace and compute group- 從零開始

Azure machine learning: workspace and compute group- 從零開始

之前因為工作的關係,曾經在 Google Composer 的服務之下,使用過 Airflow 這種工作流程管理工具。其功能就是協助使用者在雲端環境調配運算資源去執行各種使用者設定的排程,讓雲端的虛擬機器定期執行整理資料或者訓練模型的程式。Azure machine learning 也是如此,只是更強調機器學習的應用,也發展出 AutoML 的工具,讓使用者可以用圖形介面,上傳資料之後,自動求得最佳模型。

Azure 機器學習(Machine Learning)的最上層資源是workspace(工作區),在workspace執行程式。執行程式可能會需要幾個虛擬機器,才能讓好幾個不同的工作項目同時進行,所以需要在workspace建立compute cluster(計算叢集)。為了訓練模型,還要準備資料,所以就必須把資料上傳到Datasotre(實際上就是Azure storage Account)。在執行程式或者訓練模型之前,也需要確認有哪些Python套件是一定要用到的,所以需要設定environment。上述環節都準備好之後,就可以在workspace裡,選擇所需要的計算叢集,在適合的environment內,執行experiment(實驗),也就是實際上使用者要真正要執行的程式碼。實驗執行結束,可能會產生模型,可以將模型在workspace中註冊,不但存下模型檔案,也紀錄與模型相關的各種數值(例如:資料來源、模型的正確率...等等)。模型訓練好之後,我們最後也會希望拿模型來用,也就是所謂的 inference ,所以我們可以上傳我們的程式碼告訴 Azure 機器學習如何使用模型,做各式各樣的預測,將模型部署成服務。部署完畢之後,Azure 機器學習會產生一個endpoint,也就是REST API,讓我們可以透過此 API 使用模型,得到預測結果。

當我們有一連串彼此之間有前後關係的程式碼需要在workspace執行,我們可以包裝成pipeline(管線),有點像是生產線,把一連串的程式碼按照我們安排的順序一一執行完畢。我們也可以把這樣的生產線pipeline設定成定期執行,或者在滿足某些條件時執行(比如說:模型準確度下降了)。在workspace之中,透過schedule(排程)就可以把pipeline排程。不論是pipeline還是schedule,其本質都是experiment,都是使用者放到workspace的程式碼,只是經過排序或排程執行而已。最終,有了schedule,使用者就能做到定期更新資料和訓練模型,讓最後部署的服務都處於最新狀態。

以上這些囉唆的事情,其實就是部分資料相關工作者的部分日常生活,整個過程自動化,就是 Machine Learning Operations- MLOps了。讓整個流程,自動持續收集資料、訓練模型、確認模型效果、部署服務、監測狀況,整個系統變成一個完整的生態系,在大部分時候都能自我維持,生生不息。更深入的內容,可以參考談MLOps - 模型、專案架構、產品化及維運這一系列的文章。

接下來幾篇文章,都會用 Azure machine learning ,以預測臺幣兌換美金的匯率作為示範,實踐 MLOps,最後也會把此功能整合到 Line chatbot。這篇先從產生workspace和計算叢集開始。

安裝Python套件

pip3.7 install azureml-core

確認 Subscription ID (訂用帳戶 ID)

執行以下指令,取得 ID 和 Tenant ID

az account list

其實 Tenant ID,可有可無,但是如果註冊了好幾個帳號,那 Azure 多半會要求要用 Tenant ID 確認身份與權限。

先將 Tenant ID 設為環境變數,以便後續使用。

export TENANT_ID='your tenant id'

建立工作區

這邊我們直接用Python code 來建立workspace

create_workspace.py

import os
from azureml.core import Workspace
from azureml.core.authentication import InteractiveLoginAuthentication

# 以 Tenant ID 取得權限
interactive_auth = InteractiveLoginAuthentication(tenant_id=os.getenv("TENANT_ID"))

work_space = Workspace.create(
    name="mltibame",  # 工作區名稱
    subscription_id="Your subscription key",  
    resource_group="Tibame",  # 資源群組名稱
    create_resource_group=True,
    location="eastus2",  
    # example: 'eastus2', or 'southeastasia'.
)

# write out the workspace details to the file: 
# .azureml/config.json
work_space.write_config(path=".azureml")

建立workspace中......

建立完之後可以到https://portal.azure.com/#home ,找到剛剛建立的機器學習資源。進入機器學習的頁面,再點擊啟動工作室,就可以進入workspace的頁面。

建立計算叢集

create_compute.py

import os
from azureml.core import Workspace
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
from azureml.core.authentication import InteractiveLoginAuthentication

# 建立工作區後,可以從 .azureml/config.json 讀取工作區資訊
interactive_auth = InteractiveLoginAuthentication(tenant_id=os.getenv("TENANT_ID"))
work_space = Workspace.from_config(auth=interactive_auth)
# 確認計算叢集是否存在,否則直接建立計算叢集
# 建立計算叢集之後,可以直接用計算叢集的名稱指定執行實驗時的計算叢集
cpu_cluster_name = "cpu-cluster"
try:
    cpu_cluster = ComputeTarget(
      workspace=work_space, name=cpu_cluster_name)
    print("Found existing cluster, use it.")
except ComputeTargetException:
    compute_config = AmlCompute.provisioning_configuration(
        vm_size="STANDARD_D2_V2", max_nodes=4, 
        idle_seconds_before_scaledown=2400
    )
    cpu_cluster = ComputeTarget.create(
      work_space, cpu_cluster_name, compute_config)
cpu_cluster.wait_for_completion(show_output=True)

workspace的頁面左側,可以找到計算,點進去之後可以看到剛剛建立的計算叢集。


接下來,就可以執行一個簡單的experiment,觀察整個實驗過程會發生什麼事情。


上一篇
Day 18 Chatbot integration- Face Login- 人臉登入
下一篇
Day 20 Azure machine learning: "Hello Azure" experiment- 試一下最簡單的實驗
系列文
我不太懂 AI,可是我會一點 Python 和 Azure30

尚未有邦友留言

立即登入留言