python - 如何并行化 Azure ML 服务计算集群上的工作?

标签 python azure scikit-learn cluster-computing azure-machine-learning-service

我能够使用计算集群将作业提交到 Azure ML 服务。它运行良好,并且自动缩放与自定义环境的良好灵 active 相结合似乎正是我所需要的。然而,到目前为止,所有这些作业似乎只使用集群的一个计算节点。理想情况下,我希望使用多个节点进行计算,但我看到的所有方法都依赖于与 azure ML 服务的深度集成。

我的模特案例有点不典型。从之前的实验中,我确定了一组运行良好的架构(预处理步骤的管道 + Scikit-learn 中的估计器)。 使用 RandomizedSearchCV 可以相当快地(几分钟)对这些估计器之一进行超参数调整。 。所以并行这一步似乎效果不太好。

现在我想调整和训练整个架构列表。 这应该很容易并行化,因为所有架构都可以独立训练。

理想情况下,我想要类似的东西(伪代码)

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

但是,我找不到任何有关如何使用 Azure ML 计算集群实现此目标的资源。 一个可接受的替代方案是以即插即用的方式替代 sklearn 的 CV 调整方法,类似于 dask 中提供的方法。或spark .

最佳答案

您可以通过多种方式使用 AzureML 来解决此问题。最简单的方法是使用 AzureML Python SDK 启动多个作业(底层示例取自 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 包一起分解为一个脚本(或文件夹中的一组脚本)。上面的估计器是使用 Scikit 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 计算集群上设置 DASK 的示例,以便您可以对其进行交互式工作:https://github.com/danielsc/azureml-and-dask

关于python - 如何并行化 Azure ML 服务计算集群上的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526707/

相关文章:

azure - Azure IOT EDGE 路由中加密的消息到 Blob

azure - peek 和 receive 之间的区别(Azure 服务总线)

python - 搜索可用于期望最大化(EM)算法的 python 源代码?

python - 在 scikit-learn 管道中使用 Word2Vec

python - 多次调用后,多处理池逐渐变慢

Python浮点确定性

python - 使用 AWS Secrets Manager 连接到 Postgres 数据库

azure - 如何将第二个网络接口(interface)添加到 Azure 虚拟机规模集?

python - 使用 NaN 获取 pandas 系列模式的最快方法

python - 有没有办法找到给定VM的资源组,然后使用Python sdk找到Azure中VM的详细信息