【问题标题】:Restrict the number of nodes used by an Azure Machine Learning pipeine限制 Azure 机器学习管道使用的节点数
【发布时间】:2020-10-06 00:41:57
【问题描述】:

我编写了一个管道,希望在 Azure 机器学习中的远程计算集群上运行。我的目标是处理大量历史数据,为此我需要在大量输入参数组合上运行管道。

有没有办法限制管道在集群上使用的节点数量?默认情况下,它将使用集群可用的所有节点,我想限制它,使其仅使用预定义的最大值。这允许我将集群的其余部分留给其他用户。

我当前启动管道的代码如下所示:

# Setup the pipeline
steps = [data_import_step] # Contains PythonScriptStep
pipeline = Pipeline(workspace=ws, steps=steps)
pipeline.validate()

# Big long list of historical dates that I want to process data for
dts = pd.date_range('2019-01-01', '2020-01-01', freq='6H', closed='left')
# Submit the pipeline job
for dt in dts:
    pipeline_run = Experiment(ws, 'my-pipeline-run').submit(
        pipeline,
        pipeline_parameters={
            'import_datetime': dt.strftime('%Y-%m-%dT%H:00'),
        }
    )

【问题讨论】:

  • 例如,您希望管道在 4 节点集群上使用最多 2 个节点?这是AMLCompute 集群吗?还有,你的data_import_step是哪一步?如果是PythonScriptStep,默认只会在一个节点上运行。
  • 是的,完全正确。它是一个AMLCompute 集群。每个PythonScriptStep 只使用一个节点,但是假设我提交了 100 个不同参数设置的管道运行,我想要一种方法来防止它使用集群的整个容量。

标签: python azure azure-machine-learning-studio azure-machine-learning-service


【解决方案1】:

对我来说,Azure ML 的杀手锏特性是不必担心像这样的负载平衡。我们的团队有一个计算目标,每个功能分支都有 max_nodes=100,我们有 Hyperdrive 管道,每个管道可以运行 130 次。

我们可以连续提交多个PipelineRuns,编排器完成排队、提交和所有运行的繁重工作,以便PipelineRuns 按照我提交它们的顺序执行,并且集群永远不会超载。这对我们来说 99% 的时间都没有问题。

如果您希望PipelineRuns 被并行执行,那么您应该查看ParallelRunStep

另一种选择是隔离您的计算。每个工作区最多可以有 200 个ComputeTargets。两个 50 节点 ComputeTargets 的成本与一个 100 节点 ComputeTarget 相同。

在我们的团队中,我们使用 pygit2 为每个功能分支创建一个 ComputeTarget,这样,作为数据科学家,我们可以确信我们不会踩到同事的脚趾。

【讨论】:

  • 运行是否总是按照提交时的顺序执行?例如如果我提交的作业将占用整个集群 12 小时,我的同事是否必须等待 12 小时才能开始他们提交的任何作业?
  • AFAIK, Runs 是按顺序提交的,但是 1) PipelineRuns (Runs 的序列) 和 2) Runs 在多个节点上运行使它更难确定性地知道。
  • @tobycoleman 添加了另一条关于隔离ComputeTargets 以避免阻塞同事的建议。
猜你喜欢
  • 2019-06-04
  • 2019-06-12
  • 1970-01-01
  • 2020-01-05
  • 2021-10-09
  • 2020-07-14
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多