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 19:Kotlin 分组(groupBy)集合资料用法

>>:  [day3]进入程序开发阶段-测试前准备

JavaScript 概述

完整的javascript包含: 1.ECMAScript,描述该语言的语法和基本物件。 2.文件物...

30 - 有效的使用 Observability 的资料 (4) - 使用 Elastic Observability 追纵及观察问题的心得

有效的使用 Observability 的资料 系列文章 (1/4) - 透过 Machine Le...

Python 演算法 Day 13 - Ensemble Learning

Chap.II Machine Learning 机器学习 https://yourfreetemp...

[Day17]程序菜鸟自学C++资料结构演算法 – 堆积实作与应用

前言:昨天讲解完了堆积的概念,今天要来实际操作一遍,在查找资料之余,有发现一个有趣的ACM程序竞赛题...

Day17-Vue Router与前端路由管理

什麽是路由? 浏览器透过不同的网址,向後端的网页服务器发送请求 (Request),而服务器接收到浏...