Python 如何在Azure ML服务计算集群上并行化工作?
我能够使用计算集群将作业提交到Azure ML服务。它工作得很好,自动缩放与良好的灵活性相结合的定制环境似乎正是我所需要的。然而,到目前为止,所有这些作业似乎只使用集群的一个计算节点。理想情况下,我希望使用多个节点进行计算,但我看到的所有方法都依赖于与azure ML服务的深度集成 我的模特儿案例有点非典型。从以前的实验中,我确定了一组工作良好的架构(预处理步骤管道+Scikit learn中的估计器)。 这些估计器中的一个的超参数调整可以相当快地执行(几分钟),只需使用。因此,将这一步骤并行化似乎不太有效 现在我想调整和训练整个体系结构列表。 这应该很容易并行化,因为所有体系结构都可以独立训练 理想情况下,我希望类似(伪代码)Python 如何在Azure ML服务计算集群上并行化工作?,python,azure,scikit-learn,cluster-computing,azure-machine-learning-service,Python,Azure,Scikit Learn,Cluster Computing,Azure Machine Learning Service,我能够使用计算集群将作业提交到Azure ML服务。它工作得很好,自动缩放与良好的灵活性相结合的定制环境似乎正是我所需要的。然而,到目前为止,所有这些作业似乎只使用集群的一个计算节点。理想情况下,我希望使用多个节点进行计算,但我看到的所有方法都依赖于与azure ML服务的深度集成 我的模特儿案例有点非典型。从以前的实验中,我确定了一组工作良好的架构(预处理步骤管道+Scikit learn中的估计器)。 这些估计器中的一个的超参数调整可以相当快地执行(几分钟),只需使用。因此,将这一步骤并行化
tuned=AzurePool.map(tune_模型,[model1,model2,…)
然而,我找不到关于如何使用Azure ML计算集群实现这一点的任何资源。
一个可接受的替代方案是使用即插即用的方式替代sklearn的CV调整方法,类似于或中提供的方法。使用AzureML可以采用多种方法解决此问题。最简单的方法是使用AzureML Python SDK(底层示例取自) 以上要求您将培训内容与所需的python包一起分解成一个脚本(或文件夹中的一组脚本)。上述估计器是使用Scikit学习的方便包装器。Tensorflow、Pytorch、Chainer还有一个通用的估计器(
azureml.train.estimator.estimator
)——它们使用的Python包和基本docker都不同
第二个选项是,如果您实际正在调整参数,则可以像这样使用HyperDrive服务(使用与上述相同的SKLearn
估计器):
或者你可以使用DASK来安排你刚才提到的工作。下面是一个如何在和AzureML计算集群上设置DASK的示例,以便您可以对其执行交互工作:还有一个带有每个节点的工作计数设置的示例,该设置默认为1
from azureml.train.sklearn import SKLearn
runs = []
for kernel in ['linear', 'rbf', 'poly', 'sigmoid']:
for penalty in [0.5, 1, 1.5]:
print ('submitting run for kernel', kernel, 'penalty', penalty)
script_params = {
'--kernel': kernel,
'--penalty': penalty,
}
estimator = SKLearn(source_directory=project_folder,
script_params=script_params,
compute_target=compute_target,
entry_script='train_iris.py',
pip_packages=['joblib==0.13.2'])
runs.append(experiment.submit(estimator))
from azureml.train.sklearn import SKLearn
from azureml.train.hyperdrive.runconfig import HyperDriveConfig
from azureml.train.hyperdrive.sampling import RandomParameterSampling
from azureml.train.hyperdrive.run import PrimaryMetricGoal
from azureml.train.hyperdrive.parameter_expressions import choice
estimator = SKLearn(source_directory=project_folder,
script_params=script_params,
compute_target=compute_target,
entry_script='train_iris.py',
pip_packages=['joblib==0.13.2'])
param_sampling = RandomParameterSampling( {
"--kernel": choice('linear', 'rbf', 'poly', 'sigmoid'),
"--penalty": choice(0.5, 1, 1.5)
}
)
hyperdrive_run_config = HyperDriveConfig(estimator=estimator,
hyperparameter_sampling=param_sampling,
primary_metric_name='Accuracy',
primary_metric_goal=PrimaryMetricGoal.MAXIMIZE,
max_total_runs=12,
max_concurrent_runs=4)
hyperdrive_run = experiment.submit(hyperdrive_run_config)