如何在azureml服务计算集群上并行工作?

2024-09-28 01:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以使用计算集群将作业提交到azureml服务。它工作得很好,自动缩放与良好的灵活性相结合的定制环境似乎正是我所需要的。然而,到目前为止,所有这些作业似乎只使用集群的一个计算节点。理想情况下,我希望使用多个节点进行计算,但我看到的所有方法都依赖于与azureml服务的深度集成。你知道吗

我的模特案例有点非典型。从以前的实验中,我确定了一组工作良好的架构(预处理步骤管道+sciketlearn中的估计器)。 其中一个估计器的超参数调整可以用RandomizedSearchCV相当快地执行(几分钟)。因此,将这一步并行化似乎不太有效。你知道吗

现在我要调整和训练整个体系结构列表。 这应该很容易并行化,因为所有架构都可以独立训练。你知道吗

理想情况下,我会喜欢这样的东西(在伪代码)

tuned = AzurePool.map(tune_model, [model1, model2,...])

但是,我找不到任何关于如何使用azureml计算集群实现这一点的资源。 一个可接受的替代方案是以即插即用的形式替代sklearn的CV调优方法,类似于daskspark中提供的方法。你知道吗


Tags: 方法节点管道环境架构作业情况步骤
1条回答
网友
1楼 · 发布于 2024-09-28 01:26:10

有很多方法可以用AzureML解决这个问题。最简单的方法是使用azuremlpythonsdk启动一些作业(底层示例取自here

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))

以上要求您将培训与所需的python包一起考虑到一个脚本(或文件夹中的一组脚本)中。上面的估计器是使用sciket Learn的方便包装器。Tensorflow、Pytorch、Chainer和一个泛型(azureml.train.estimator.Estimator)也有估算器,它们在使用的Python包和基本docker中都有所不同。你知道吗

第二个选项是,如果您确实在调整参数,那么可以像这样使用HyperDrive服务(使用与上面相同的SKLearn估计器):

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)

或者你可以用DASK来安排你刚才提到的工作。下面是一个如何在和AzureML Compute Cluster上设置DASK的示例,这样您就可以对它进行交互式操作:https://github.com/danielsc/azureml-and-dask

相关问题 更多 >

    热门问题