Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Azure ML服务计算集群上并行化工作?_Python_Azure_Scikit Learn_Cluster Computing_Azure Machine Learning Service - Fatal编程技术网

Python 如何在Azure ML服务计算集群上并行化工作?

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中的估计器)。 这些估计器中的一个的超参数调整可以相当快地执行(几分钟),只需使用。因此,将这一步骤并行化

我能够使用计算集群将作业提交到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)