Azure机器学习——计算目标01:使用 Python SDK配置Azure机器学习计算目标(上)

使用 Python SDK配置Azure机器学习计算目标(上)

  • 本地计算机
  • Azure 机器学习计算集群
    • 运行时创建(Run-based creation)
    • 持久计算集群(Persistent compute)
  • 总结

使用 Azure 机器学习,可以在各种资源或环境(统称为计算目标)上训练模型。 计算目标可以是本地计算机,也可以是云资源,例如 Azure 机器学习计算集群、Azure HDInsight 或者远程虚拟机。 计算目标也可用于部署模型。
可以使用 Azure 机器学习 SDK、Azure 机器学习 studio、Azure CLI 或 Azure 机器学习 VS Code 扩展来创建和管理计算目标。 如果计算目标是通过其他Azure服务(例如 DSVM)创建的,则可以通过将其附加到 Azure 机器学习工作区来使用它们。
本节和下节主要介绍 使用Python SDK来配置本地计算机、Azure 机器学习计算集群、远程虚拟机和Azure HDInsight这四种计算目标
Azure机器学习——计算目标01:使用 Python SDK配置Azure机器学习计算目标(上)_第1张图片
图1 配置Azure机器学习计算目标

一般来说,配置上面提到的计算目标都遵循以下工作流:

  1. 创建所需要的计算目标。
  2. 附加已有的计算目标(Azure机器学习计算集群)或者将计算目标附加到工作区(VM)。
  3. 配置计算目标,使其包含脚本所需的 Python 环境和包依赖项。

本地计算机

  1. 创建和附加:将本地计算机用作训练环境不需要创建和附加这两步。
  2. 配置:当使用本地计算机作为计算目标时,训练代码将运行在本地开发环境中(详见Azure机器学习——配置 Azure 机器学习开发环境),比如conda环境。 如果该环境已经安装了训练所需的 Python 包,那么环境配置时可以启用user-managed选项,如下代码所示
from azureml.core.runconfig import RunConfiguration

# Edit a run configuration property on the fly.
run_local = RunConfiguration()

run_local.environment.python.user_managed_dependencies = True

训练代码将在本地计算机的当前激活的conda环境中运行。你也可以通过指定Python解释器路径来为运行训练指定环境,例如:

# You can choose a specific Python environment by pointing to a Python path 
run_local.environment.python.interpreter_path = '/home/johndoe/miniconda3/envs/sdk2/bin/python'

现在,你已经为本地计算机配置了运行环境,下一步是提交训练运行(关于RunConfiguration和ScriptRunConfig,详见Azure机器学习——训练01:通过RunConfiguration 对象和ScriptRunConfig 对象训练模型):

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='./', script='train.py', run_config=run_config_user_managed)
run = exp.submit(src)

Azure 机器学习计算集群

Azure 机器学习计算集群(Azure Machine Learning Compute)是一个托管的计算基础架构,可让用户轻松创建单节点或多节点计算资源。 该计算集群是在工作区内部创建的,可与该工作区的其他用户共享。
提交作业时,计算集群会自动扩展,集群也可以被放到 Azure 虚拟网络中。 计算过程在容器化环境中执行,训练模型所需的依赖项将被打包到Docker 容器中。
你可以使用 Azure 机器学习计算集群中的 CPU 或 GPU 计算节点进行分布式训练。 有关带 GPU 的 VM 规格的详细信息,请参阅 GPU-optimized virtual machine sizes。
Azure 机器学习计算集群存在一些默认的限制,比如可以分配的节点数目。 如果账户下创建的节点达到默认的节点上限,那么继续创建新的节点时就会出现错误,此时可以申请更多的节点配额。详细信息请参阅管理和请求 Azure 资源的配额。
有2中方式创建Azure机器学习计算集群:1)在运行时按需创建;2)将其创建为持久性资源。

运行时创建(Run-based creation)

在运行时将 Azure 机器学习计算集群创建为计算目标。 运行完成后,会自动删除此计算集群。
注意:Azure 机器学习计算集群的Run-based creation功能目前为预览版。 如果使用自动化超参数优化或自动化机器学习,请不要使用此功能。

  1. 创建、附加和配置:Run-based creation使用run configuration来执行这三个步骤。
from azureml.core.compute import ComputeTarget, AmlCompute

# First, list the supported VM families for Azure Machine Learning Compute. 不同区域支持的虚拟机规格不同。
print(AmlCompute.supported_vmsizes(workspace=ws))

from azureml.core.runconfig import RunConfiguration
# Create a new runconfig object
run_temp_compute = RunConfiguration()

# Signal that you want to use AmlCompute to execute the script
run_temp_compute.target = "amlcompute"

# AmlCompute is created in the same region as your workspace
# Set the VM size for AmlCompute from the list of supported_vmsizes
run_temp_compute.amlcompute.vm_size = 'STANDARD_D2_V2'

指定好计算目标后,下一步是配置环境和提交训练运行。可参考Azure机器学习——训练01:通过RunConfiguration 对象和ScriptRunConfig 对象训练模型。

持久计算集群(Persistent compute)

可在不同的作业中重复使用持久性 Azure 机器学习计算集群。 这些计算集群可与工作区中的其他用户共享,并且会在完成作业后保留。
这些Persistent compute在自动化超参数优化和自动化机器学习中非常有用,因为很有可能当前运行会用到上一次运行的结果。

  1. 创建和附加:在 Python 中创建持久的 Azure 机器学习计算资源,需要指定vm_size和max_nodes这两个属性。 对于其他属性,Azure 机器学习将使用默认值。
    **计算集群在没有任务时自动缩减为零个节点(因为min_nodes默认为0)。 当有任务时,会按需创建专用 的VM 来运行作业。**你也可以将min_nodes设置为(0,max_nodes)中的任意一个整数,这样集群中会一直有min_nodes个节点在运行,不用等到任务到了再启动节点,节约了启动虚拟机的时间,缺点是容易造成计算资源浪费。
    vm_size: Azure 机器学习计算集群节点的 VM 规格。max_nodes: 在 Azure 机器学习计算集群上运行作业时,要自动缩放的最大节点数。
    创建附加代码:
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your CPU cluster
cpu_cluster_name = "cpucluster"

# Verify that cluster does not exist already
try:
    cpu_cluster = ComputeTarget(workspace=ws, 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)
    cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)

cpu_cluster.wait_for_completion(show_output=True)

可以在创建 Azure 机器学习计算集群时配置多个高级属性,比如为集群设置固定大小和虚拟网络。更多内容请查阅AmlCompute 类。
Azure机器学习——计算目标01:使用 Python SDK配置Azure机器学习计算目标(上)_第2张图片
图1 Persistent compute无任务时默认节点为0
Azure机器学习——计算目标01:使用 Python SDK配置Azure机器学习计算目标(上)_第3张图片
图2 Persistent compute接到计算任务自动启动节点
Azure机器学习——计算目标01:使用 Python SDK配置Azure机器学习计算目标(上)_第4张图片
图3 Persistent compute 3个节点并行计算
Azure机器学习——计算目标01:使用 Python SDK配置Azure机器学习计算目标(上)_第5张图片
图4 计算任务完成Persistent compute 节点自动关闭

  1. 配置: 为持久计算目标创建运行配置。
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import DEFAULT_CPU_IMAGE


# Create a new runconfig object
run_amlcompute = RunConfiguration()

# Use the cpu_cluster you created above. 
run_amlcompute.target = cpu_cluster

# Enable Docker
run_amlcompute.environment.docker.enabled = True

# Set Docker base image to the default CPU-based image
run_amlcompute.environment.docker.base_image = DEFAULT_CPU_IMAGE

# Use conda_dependencies.yml to create a conda environment in the Docker image for execution
run_amlcompute.environment.python.user_managed_dependencies = False

# Specify CondaDependencies obj, add necessary packages
run_amlcompute.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])

上述环境配置在AzureChinaCloud和Azure Global都可以运行,但是因为conda和pip源的问题,AzureChinaCloud在创建docker镜像的时候可能会慢一些。如果想更改源请参考Azure机器学习——配置 Azure 机器学习Python环境。
指定好计算目标后,下一步是配置环境和提交训练运行。可参考Azure机器学习——训练01:通过RunConfiguration 对象和ScriptRunConfig 对象训练模型。

总结

本节主要介绍了使用Python SDK来配置本地计算机和Azure 机器学习计算集群这两种计算目标,下节将介绍远程虚拟机和Azure HDInsight这两种计算目标的配置方法。

你可能感兴趣的:(Azure机器学习,机器学习,azure,machine,learning,人工智能,python)