Azure机器学习实战:使用ScriptRunConfig实现数据输入输出处理
概述
在Azure机器学习服务中,ScriptRunConfig是一个强大的工具,它允许我们配置和提交训练运行,同时处理数据的输入和输出。本文将深入探讨如何使用ScriptRunConfig来构建一个完整的数据处理流程,从数据准备到模型训练再到结果输出。
准备工作
在开始之前,我们需要确保已经完成以下准备工作:
- 理解Azure机器学习服务的基本架构和核心概念
- 安装并配置好Azure机器学习SDK
- 创建好工作区(Workspace)并获取配置文件
初始化工作区
首先,我们需要初始化工作区对象,这是与Azure机器学习服务交互的起点:
from azureml.core import Workspace
ws = Workspace.from_config()
print('工作区名称:', ws.name)
print('Azure区域:', ws.location)
print('订阅ID:', ws.subscription_id)
print('资源组:', ws.resource_group)
这段代码会从配置文件(config.json)中读取工作区信息并创建工作区对象。
创建计算资源
在Azure机器学习中,计算目标(Compute Target)是执行训练任务的资源。我们可以创建一个AmlCompute集群作为训练资源:
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
cluster_name = "cpu-cluster"
try:
compute_target = ComputeTarget(workspace=ws, name=cluster_name)
print('找到现有计算目标')
except ComputeTargetException:
print('创建新的计算目标...')
compute_config = AmlCompute.provisioning_configuration(
vm_size='STANDARD_D2_V2',
max_nodes=4
)
compute_target = ComputeTarget.create(ws, cluster_name, compute_config)
compute_target.wait_for_completion(show_output=True, timeout_in_minutes=20)
print(compute_target.get_status().serialize())
创建计算目标的过程分为三个步骤:
- 创建配置(本地操作,几乎瞬间完成)
- 创建集群(约20秒)
- 配置VM以将集群扩展到初始大小(1个节点,约3-5分钟)
准备训练脚本
我们将使用一个简单的Python脚本来演示数据输入输出处理。这个脚本会读取输入数据,处理后写入输出位置:
%%writefile script_run/dummy_train.py
import sys
import os
print("*********************************************************")
print("Hello Azure ML!")
mounted_input_path = sys.argv[1]
mounted_output_path = sys.argv[2]
print("输入路径:", mounted_input_path)
print("输出路径:", mounted_output_path)
with open(mounted_input_path, 'r') as f:
content = f.read()
with open(os.path.join(mounted_output_path, 'output.csv'), 'w') as fw:
fw.write(content)
数据准备与上传
每个工作区都有一个默认的数据存储(DataStore),它关联着Azure Blob存储账户。我们可以使用它来上传数据:
def_blob_store = ws.get_default_datastore()
def_blob_store.upload_files(
files=['iris.csv'],
target_path='script-run/',
overwrite=True,
show_progress=True
)
配置输入输出
接下来,我们需要配置脚本的输入和输出。输入可以是一个数据集,输出可以指定到数据存储的特定位置:
from azureml.core import Dataset
from azureml.data import OutputFileDatasetConfig
# 配置输入数据集
input_data = Dataset.File.from_files(
def_blob_store.path('script-run/iris.csv')
).as_named_input('input').as_mount()
# 配置输出位置
output = OutputFileDatasetConfig(
destination=(def_blob_store, 'sample/outputdataset')
)
配置运行环境
为了确保脚本运行在正确的环境中,我们需要配置运行环境:
from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies
myenv = Environment("myenv")
myenv.docker.enabled = True
myenv.python.conda_dependencies = CondaDependencies.create(
pip_packages=['azureml-sdk>=1.12.0']
)
配置ScriptRunConfig
现在我们可以将所有配置组合起来创建ScriptRunConfig对象:
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(
source_directory='script_run',
script='dummy_train.py',
arguments=[input_data, output],
compute_target=compute_target,
environment=myenv
)
提交并运行实验
最后,我们提交实验并等待运行完成:
from azureml.core import Experiment
exp = Experiment(ws, 'ScriptRun_sample')
run = exp.submit(config=src)
run.wait_for_completion(show_output=True)
运行监控与结果查看
运行提交后,我们可以监控运行状态并查看结果。wait_for_completion
方法会显示运行进度,完成后我们可以获取运行详情。
总结
通过本教程,我们学习了如何在Azure机器学习服务中使用ScriptRunConfig来:
- 配置计算资源
- 准备训练脚本
- 处理数据输入输出
- 配置运行环境
- 提交并监控实验运行
这种方法不仅适用于简单的数据处理任务,也可以扩展到更复杂的机器学习工作流中。通过合理配置输入输出,我们可以构建高效、可重复的数据处理管道。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考