Azure 机器学习管道:如何在失败时重试?
Posted
技术标签:
【中文标题】Azure 机器学习管道:如何在失败时重试?【英文标题】:Azure Machine Learning pipeline: How to retry upon failure? 【发布时间】:2021-10-09 08:40:10 【问题描述】:所以我在这里有一个 Azure 机器学习管道,其中包含许多 PythonScriptStep
任务 - 非常基本。
由于网络问题或其他原因,其中一些脚本步骤会间歇性失败 - 确实没有什么意外。这里的解决方案始终是在 Azure 机器学习工作室的浏览器界面中简单地触发失败的实验重新运行。
尽管我尽了最大努力,但我还是无法弄清楚如何在脚本步骤对象、管道对象或任何其他 AZ ML 相关对象上设置重试参数。 这是任何类型管道中的常见模式:任务失败一次 - 在确定它实际失败之前重试几次。
请问有大神指点一下吗?
编辑:一位乐于助人的用户为此建议了一个外部解决方案,它需要一个 Azure 逻辑应用程序来侦听 ML 管道事件并通过 HTTP 请求重新触发失败的管道。虽然这个解决方案可能对某些人有用,但它只会让您陷入另一个设置、调试和维护另一个外部组件的兔子洞。我正在寻找一个简单的“在任务失败时重试”选项,必须将 (IMO) 纳入 Azure ML 管道框架,并且希望文档记录不充分。
【问题讨论】:
【参考方案1】:我假设如果脚本失败,您想重新运行整个管道。在这种情况下,使用逻辑应用程序非常简单。您需要的是以下内容:
-
您需要为管道创建一个 PipelineEndpoint,以便它可以由 Azure ML 之外的东西触发。
您需要设置一个逻辑应用程序来监听失败的运行。请参阅以下内容:https://medium.com/geekculture/notifications-on-azure-machine-learning-pipelines-with-logic-apps-5d5df11d3126。您无需像该示例那样向 Microsoft Teams 打印消息,而是通过其端点调用您的管道。
【讨论】:
感谢您的回复!我正在寻找融入 Azure 机器学习框架的东西。毕竟是任务编排框架,里面一定有重试机制吗? 很遗憾没有。我认为我上面描述的是规范的方式。您会惊讶于逻辑应用处理 Azure 机器学习事件是多么容易 - GUI 可以轻松创建重新触发管道的 webhook。 所以我已经尝试了你的建议,虽然我同意设置逻辑应用程序很容易让它正确运行似乎打开了另一个蠕虫罐:例如,匹配字符串上的 runStatus 失败似乎并不微不足道-无论如何对我都不起作用。所以现在我最终会在我的 ML 管道之上调试一个额外的级别。 所以我进一步挖掘并设法正确解析 runStatus。我已经为我的每个管道发布了一个管道端点,该端点为我提供了一个可以 POST 以重新触发管道运行的 URL。到目前为止一切都很好 - 但现在我需要从我的逻辑应用程序中使用这个 URL 处理身份验证,即获取一个不记名令牌,将其打包到我的 POST 的标头中等。这对于应该构建的东西来说似乎是很多开销进入 Azure 机器学习管道框架?我只是看不到所有这些开销将如何成为这里的规范方式。 感谢您的赏金。很抱歉我无法让它工作。我会尽量找时间制作一个带有身份验证的演示。您可能会发现以下相关内容:github.com/Azure/MachineLearningNotebooks/blob/master/…以上是关于Azure 机器学习管道:如何在失败时重试?的主要内容,如果未能解决你的问题,请参考以下文章
Azure 机器学习在运行管道时抛出错误“无效图:节点中的计算目标无效”
在 Azure 容器实例中部署机器学习模型时如何访问所有已注册的模型?
如何将 Pycharm 和 git 与 azure 机器学习服务(工作区)集成