一般来说,配置上面提到的计算目标都遵循以下工作流:
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 Machine Learning Compute)是一个托管的计算基础架构,可让用户轻松创建单节点或多节点计算资源。 该计算集群是在工作区内部创建的,可与该工作区的其他用户共享。
提交作业时,计算集群会自动扩展,集群也可以被放到 Azure 虚拟网络中。 计算过程在容器化环境中执行,训练模型所需的依赖项将被打包到Docker 容器中。
你可以使用 Azure 机器学习计算集群中的 CPU 或 GPU 计算节点进行分布式训练。 有关带 GPU 的 VM 规格的详细信息,请参阅 GPU-optimized virtual machine sizes。
Azure 机器学习计算集群存在一些默认的限制,比如可以分配的节点数目。 如果账户下创建的节点达到默认的节点上限,那么继续创建新的节点时就会出现错误,此时可以申请更多的节点配额。详细信息请参阅管理和请求 Azure 资源的配额。
有2中方式创建Azure机器学习计算集群:1)在运行时按需创建;2)将其创建为持久性资源。
在运行时将 Azure 机器学习计算集群创建为计算目标。 运行完成后,会自动删除此计算集群。
注意:Azure 机器学习计算集群的Run-based creation功能目前为预览版。 如果使用自动化超参数优化或自动化机器学习,请不要使用此功能。
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 对象训练模型。
可在不同的作业中重复使用持久性 Azure 机器学习计算集群。 这些计算集群可与工作区中的其他用户共享,并且会在完成作业后保留。
这些Persistent compute在自动化超参数优化和自动化机器学习中非常有用,因为很有可能当前运行会用到上一次运行的结果。
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 类。
图1 Persistent compute无任务时默认节点为0
图2 Persistent compute接到计算任务自动启动节点
图3 Persistent compute 3个节点并行计算
图4 计算任务完成Persistent compute 节点自动关闭
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这两种计算目标的配置方法。