Neptune ML 中的自定义模型开发 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Neptune ML 中的自定义模型开发

开始自定义模型开发的好方法是遵循Neptune ML 工具包示例来构建和编写你的训练模块。Neptune ML 工具包还在模型动物园你可以堆叠并使用它来创建自定义模型。

此外,该工具包还提供了实用程序功能,可帮助您在模型训练和模型转换期间生成必要的工件。你可以在自定义实现中导入此 Python 软件包。该工具包中提供的任何功能或模块也可以在 Neptune ML 训练环境中使用。

如果你的 Python 模块有其他外部依赖关系,你可以通过创建requirements.txt文件在模块的目录中。中列出的软件包requirements.txt然后,将在训练脚本运行之前安装文件。

至少,实现自定义模型的 Python 模块需要包含以下内容:

  • 训练脚本入口点

  • 转换脚本入口点

  • 一个 model-hpo-configuration.json 文件

Neptune ML 中的自定义模型训练脚本开发

你的自定义模型训练脚本应该是像 Neptune ML 工具包那样的可执行 Python 脚本train.py示例。它必须接受超参数名称和值作为命令行参数。在模型训练期间,超参数名称是从model-hpo-configuration.json文件。如果超参数可调,则超参数值将在有效的超参数范围内;如果超参数值不可调,则使用默认超参数值。

您的训练脚本使用如下语法在 SageMaker 训练实例上运行:

python3 (script entry point) --(1st parameter) (1st value) --(2nd parameter) (2nd value) (...)

对于所有任务,Neptune ML AutoTrainer 除了指定的超参数之外,还会向训练脚本发送几个必需的参数,并且脚本必须能够处理这些附加参数才能正常工作。

这些其他必需参数因任务而有所不同:

用于节点分类或节点回归

  • task— Neptune ML 内部使用的任务类型。对于节点分类,这是node_class,对于节点回归来说,这是node_regression.

  • model— Neptune ML 内部使用的型号名称,即custom在本例中为。

  • name— Neptune ML 内部使用的任务的名称,即node_class-custom在这种情况下对于节点分类,以及node_regression-custom对于节点回归。

  • target_ntype— 用于分类或回归的节点类型的名称。

  • property— 用于分类或回归的节点属性的名称。

对于链接预测

  • task— Neptune ML 内部使用的任务类型。对于链接预测,这是link_predict.

  • model— Neptune ML 内部使用的型号名称,即custom在本例中为。

  • name— Neptune ML 内部使用的任务的名称,即link_predict-custom在本例中为。

用于边缘分类或边缘回归

  • task— Neptune ML 内部使用的任务类型。对于边缘分类,这是edge_class,对于边缘回归来说,这是edge_regression.

  • model— Neptune ML 内部使用的型号名称,即custom在本例中为。

  • name— Neptune ML 内部使用的任务的名称,即edge_class-custom在这种情况下对于边缘分类,以及edge_regression-custom用于边缘回归。

  • target_etype— 用于分类或回归的边类型的名称。

  • property— 用于分类或回归的 edge 属性的名称。

您的脚本应该保存模型参数以及训练结束时需要的任何其他工件。

您可以使用 Neptune ML 工具包实用程序函数来确定处理的图形数据的位置、模型参数的保存位置以及训练实例上可用的 GPU 设备。请参阅train.py示例训练脚本,了解如何使用这些实用程序函数的示例。

Neptune ML 中的自定义模型转换脚本开发

需要转换脚本来利用 Neptune ML增量工作流在不重新训练模型的情况下,对不断演变的图形进行模型推 即使模型部署所需的所有工件都是由训练脚本生成的,如果要在不重新训练模型的情况下生成更新的模型,您仍需要提供转换脚本。

你的自定义模型转换脚本应该是像 Neptune ML 工具包那样的可执行 Python 脚本transform.py示例脚本。由于此脚本是在模型训练期间调用的,没有命令行参数,因此脚本确实接受的任何命令行参数都必须具有默认值。

该脚本在 SageMaker 训练实例上运行,语法如下:

python3 (your transform script entry point)

你的转换脚本将需要各种信息,例如:

  • 处理的图形数据的位置。

  • 模型参数的保存位置以及应保存新模型对象的位置。

  • 实例上可用的设备。

  • 生成最佳模型的超参数。

这些输入是使用你的脚本可以调用的 Neptune ML 实用程序函数获得的。查看工具包的示例transform.py有关如何执行此操作的示例脚本。

脚本应保存节点嵌入、节点 ID 映射以及每个任务的模型部署所需的任何其他工件。请参阅模型工件文档了解有关不同 Neptune ML 任务所需的模型工件的更多信息。

Custom (自定义)model-hpo-configuration.json在 Neptune ML 中提交文件

这些区域有:model-hpo-configuration.jsonfile 为自定义模型定义了超参数。它是一样的格式作为model-hpo-configuration.json文件与 Neptune ML 内置模型一起使用,优先于 Neptune ML 自动生成并上传到处理数据位置的版本。

向模型添加新的超参数时,还必须在此文件中为超参数添加一个条目,以便将超参数传递给训练脚本。

如果希望超参数可调,则必须为其提供范围,然后将其设置为tier-1tier-2,或者tier-3param。如果配置的训练作业总数允许调整其层中的超参数,则将调整超参数。对于不可调参数,必须提供默认值并将超参数添加到fixed-param文件的部分。查看工具包的示例样本model-hpo-configuration.json文件有关如何进行相关操作的示例。

您还必须提供指标定义,SageMaker HyperParameter 优化作业将用于评估训练的候选模型。为此,您可以添加eval_metric将 JSON 对象转换为model-hpo-configuration.json像这样的文件:

"eval_metric": { "tuning_objective": { "MetricName": "(metric_name)", "Type": "Maximize" }, "metric_definitions": [ { "Name": "(metric_name)", "Regex": "(metric regular expression)" } ] },

这些区域有:metric_definitions中的数组eval_metric对象列出了您希望 SageMaker 从训练实例中提取的每个指标的指标定义对象。每个指标定义对象都有Name键,允许您为指标提供名称(例如 “准确性”、“f1” 等)Regexkey 允许您提供一个正则表达式字符串,该字符串与训练日志中该特定指标的打印方式相匹配。请参阅SageMaker HyperParameter 调整页有关如何定义指标的更多详细信息。

这些区域有:tuning_objective中的对象eval_metric然后允许你指定哪些指标metric_definitions应用作作为超参数优化的客观指标的评估指标。的值MetricName必须与值匹配Name在中的一个定义中metric_definitions. 的值Type应该是 “最大化” 或 “最小化”,具体取决于指标是应被解释为 “越好”(如 “准确度”)还是 “小于好”(例如 “平均错误”)。

本节中的错误model-hpo-configuration.json文件可能会导致 Neptune ML 模型训练 API 作业失败,因为 SageMaker HyperParameter 调整作业将无法选择最佳模型。

在 Neptune ML 中对自定义模型实现进行本地测试

您可以使用 Neptune ML 工具包 Conda 环境在本地运行代码,以测试和验证模型。如果你在 Neptune 笔记本实例上开发,那么这个 Conda 环境将预先安装在 Neptune 笔记本实例上。如果你在不同的实例上开发,那么你需要遵循本地设置说明在 Neptune ML 工具包中。

Conda 环境准确地再现了当你调用时模型将运行的环境模型训练 API. 所有示例训练脚本和转换脚本都允许您传递命令行--local标志可在本地环境中运行脚本以便于调试。在开发自己的模型时,这是一个很好的做法,因为它允许您以交互式和迭代方式测试模型实现。在 Neptune ML 生产训练环境中进行模型训练期间,将省略此参数。