保存和写入 Azure 机器学习试验文件的位置

本文介绍在试验中保存输入文件以及写入输出文件的位置,以防止出现存储空间上限错误和试验延迟。

计算目标上启动训练作业时,它们会与外部环境隔离。 此设计的目的是确保试验的可再现性和可移植性。 如果在相同或不同的计算目标上运行同一脚本两次,可获得相同的结果。 在此设计中,可将计算目标视为无状态计算资源,其中每个资源与完成后运行的作业无关联。

保存输入文件的位置

在对计算目标或本地计算机启动试验之前,必须确保所需文件对该计算目标可用,例如需要运行的代码的依赖项文件和数据文件。

Azure 机器学习通过复制整个源目录来运行训练脚本。 如果你有不想上传的敏感数据,请使用 .ignore 文件或不将其包含在源目录中。 改为使用数据存储来访问数据。

试验快照的存储空间上限为 300 MB 和/或 2000 个文件。

因此,我们建议:

  • 将文件存储在 Azure 机器学习数据集中。 这样能防止出现试验延迟问题,并具有从远程计算目标访问数据的优点,这意味着身份验证和装载工作都由 Azure 机器学习管理。 详细了解如何通过使用数据集进行训练在训练脚本中将数据集指定为输入数据源。

  • 如果只需要几个数据文件和依赖项脚本且无法使用数据存储,请将文件放在与训练脚本相同的文件夹目录中。 在训练脚本或者调用训练脚本的代码中直接将此文件夹指定为 source_directory

试验快照的存储空间上限

Azure 机器学习会根据配置作业时所选择的目录自动为试验制作代码的试验快照。 此试验快照的总空间上限为 300 MB 和/或 2000 个文件。 如果超出限制,将看到以下错误:

While attempting to take snapshot of .
Your total snapshot size exceeds the limit of 300.0 MB

要解决此错误,请将试验文件存储在数据存储中。 如果无法使用数据存储,下表提供了一些可以考虑的替代解决方案。

试验说明 存储空间上限解决方案
上限低于 2000 个文件且无法使用数据存储 使用该方法重写快照大小限制
azureml._restclient.snapshots_client.SNAPSHOT_MAX_SIZE_BYTES = 'insert_desired_size'
这可能需要数分钟的时间,具体取决于文件的数量和大小。
必须使用特定的脚本目录 为了防止在快照中包含不必要的文件,请在目录中创建 ignore 文件(.gitignore.amlignore)。 将要排除的文件和目录添加到此文件中。 有关此文件中使用的语法的详细信息,请参阅 .gitignore语法和模式.amlignore 文件使用相同的语法。 如果同时存在这两个文件,则会使用 .amlignore 文件,不会使用 .gitignore 文件。
管道 在每个步骤中使用不同的子目录
Jupyter 笔记本 创建 .amlignore 文件或将笔记本移动到新的空子目录,然后再次运行代码。

写入文件的位置

由于训练实验具有隔离性,所以在作业期间发生的文件更改并不一定在你的环境之外保留。 如果脚本在本地修改了文件以进行计算,那么,既不会为下一次试验作业持久保存更改,也不会自动将更改传播回客户端计算机。 因此在第一次试验作业期间所做的更改不应影响第二次试验作业中的更改。

写入更改时,我们建议使用 OutputFileDatasetConfig 对象通过 Azure 机器学习数据集将文件写入存储。 请参阅如何创建 OutputFileDatasetConfig

否则,请将文件写入 ./outputs 和/或 ./logs 文件夹。

重要

“outputs”和“logs”两个文件夹接收 Azure 机器学习的特殊处理 。 在训练期间,如果将文件写入 ./outputs./logs 文件夹,则会将这些文件自动上传到作业历史记录,以便在完成作业后对其具有访问权限。

  • 对于诸如状态消息或评分结果这样的输出,请将文件写入 ./outputs 文件夹,以便将它们作为项目持久保存在作业历史记录中。 请注意写入到此文件夹中的文件数量和文件大小,因为在将内容上传到作业历史记录时可能会出现延迟。 如果需要考虑延迟,则建议将文件写入数据存储。

  • 若要将写入的文件以日志形式保存在作业历史记录中,请将文件写入 ./logs 文件夹。 日志是实时上传的,所以此方法适用于从远程作业流式传输实时更新。

后续步骤