2

我目前正在将 AzureML 与涉及大型数据集等的非常复杂的工作流一起使用,我想知道管理预处理步骤的拆分结果的最佳方法是什么。我所有的项目都是由注册数据集提供的管道构建的。我希望能够跟踪拆分,以便轻松检索例如用于集成测试目的的测试和验证集。

在那里应用的最佳模式是什么?将每个中间集注册为不同的数据集?使用运行 ID 直接检索中间集?...

坦克斯

4

2 回答 2

2

我希望我有一个更连贯的答案,好处是您处于最前沿,因此,如果您找到适合您的模式,您可以宣传它并使其成为最佳实践!希望您在下面发现我的咆哮有价值。

首先——如果你还没有,你绝对应该使用PipelineDatato 作为传递数据 b/w PipelineSteps 的中间工件。通过这种方式,您可以将它们PipelineData视为半短暂的,因为它们在您需要它们时会被物化,但并不要求持有 each 的每个版本PipelineData。您始终可以使用 Azure 存储资源管理器获取它们,或者像您所说的那样,使用 SDK 并从一个PipelineRun对象中走下来。

另一个建议是将您的工作流程拆分为以下管道:

  • 特征化管道(所有加入、修改和特征化)
  • 训练管道
  • 评分管道(如果您有批量评分方案)。

管道内工件是PipelineData,而管道间工件将是注册的数据集。

为了真正了解您将数据拆分与模型相关联的问题,我们的团队为此苦苦挣扎——尤其是因为对于每个火车、测试、拆分,我们还有一个“额外的 cols”,其中包含模型的标识符或泄漏变量不应该看到。

在我们当前的hack实现中,我们在特征化管道的末尾将我们的“黄金”数据集注册为 Azure ML 数据集。我们训练管道的第一步是一个PythonScriptStep“拆分数据”,它包含我们的训练、测试、拆分步骤,并输出一个腌制字典data.pkl。然后,我们可以在需要其中一个拆分的任何时候取消腌制,并且可以使用索引加入回来以满足任何报告需求。这是一个要点

于 2020-06-23T22:36:39.600 回答
1

注册是为了使共享和重用更容易,以便您可以通过其名称检索数据集。如果您确实希望在其他实验中重用测试/验证集,那么注册它们是有意义的。但是,如果您只是想记录您在此特定实验中使用的内容,您始终可以按照您的建议通过 Run 找到这些信息。

于 2020-06-23T16:45:00.207 回答