将多个运行提交到 AzureML 上的同一节点

Submitting multiple runs to the same node on AzureML

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

我目前提交作业的方式如下(每个 GPU/node 进行一次培训 运行):

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 包含多个训练。不过,我想避免使用此选项,因为这样日志记录和检查点写入会变得越来越混乱,并且需要对训练管道进行大量重构。而且这个功能看起来很基础,我希望有一种方法可以优雅地做到这一点。有什么想法吗?

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

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

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