【问题标题】:Submitting multiple runs to the same node on AzureML将多次运行提交到 AzureML 上的同一节点
【发布时间】:2021-12-13 11:43:23
【问题描述】:

我想使用 AzureML 执行超参数搜索。我的模型很小(大约 1GB),因此我想在同一个 GPU/节点上运行多个模型以节省成本,但我不知道如何实现。

我目前提交作业的方式如下(导致每个 GPU/节点运行一次训练):

experiment = Experiment(workspace, experiment_name)
config = ScriptRunConfig(source_directory="./src",
                         script="train.py",
                         compute_target="gpu_cluster",
                         environment="env_name",
                         arguments=["--args args"])
run = experiment.submit(config)

ScriptRunConfig 可以提供distributed_job_config。我尝试在那里使用MpiConfiguration,但如果这样做,运行会由于 MPI 错误而失败,该错误读起来好像集群被配置为每个节点只允许运行一次:

Open RTE detected a bad parameter in hostfile: [...]
The max_slots parameter is less than the slots parameter:
slots = 3
max_slots = 1
[...] ORTE_ERROR_LOG: Bad Parameter in file util/hostfile/hostfile.c at line 407

使用HyperDriveConfig 也默认为向一个GPU 提交一次运行,另外提供MpiConfiguration 会导致与上图相同的错误。

我想我总是可以重写我的训练脚本来并行训练多个模型,s.t.每个run 包含多个培训。不过我想避免这个选项,因为这样日志记录和检查点写入变得越来越混乱,并且需要对火车管道进行大量重构。而且这个功能看起来很基础,我希望有一种方法可以优雅地做到这一点。有什么想法吗?

【问题讨论】:

    标签: azure mpi cluster-computing azure-machine-learning-service


    【解决方案1】:

    使用 Run.create_children 方法将启动子运行,这些子运行对于父运行是“本地”的,并且不需要身份验证。

    对于 AML,计算 max_concurrent_runs 映射到将用于运行超参数调整运行的最大节点数。 所以每个节点会有 1 次执行。

    部署了单个服务,但您可以在 init 中加载多个模型版本,然后评分函数根据请求的参数使用特定的模型版本进行评分。 或使用新的 ML 端点(预览版)。 What are endpoints (preview) - Azure Machine Learning | Microsoft Docs

    【讨论】:

      猜你喜欢
      • 2021-07-19
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2021-04-10
      • 2019-04-30
      相关资源
      最近更新 更多