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

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

在 Neptune ML 中自定义模型超参数配置

当你开始 Neptune ML 模型训练作业时,Neptune ML 会自动使用从前面推断出的信息数据处理任务。它使用信息生成超参数配置范围,这些配置范围用于创建SageMaker 超级参数优化作业为你的任务训练多个模型。这样,您就不必为要训练的模型指定长长的超参数值列表。而是根据任务类型、图形类型和调整作业设置选择模型超参数范围和默认值。

但是,您也可以通过修改数据处理作业生成的 JSON 配置文件来覆盖默认的超参数配置并提供自定义超参数。

使用 Neptune ML模型训练 API,你可以控制几个高级超参数调整作业设置,如maxHPONumberOfTrainingJobsmaxHPOParallelTrainingJobs, 和trainingInstanceType. 要对模型超参数进行更精细的控制,可以自定义model-HPO-configuration.json数据处理作业生成的文件。该文件将保存在您为处理作业输出指定的 Amazon S3 位置。

您可以下载文件,对其进行编辑以覆盖默认的超参数配置,然后将其上传回相同的 Amazon S3 位置。不要更改文件的名称,在编辑时请小心按照这些说明进行操作。

要从 Amazon S3 下载文件:

aws s3 cp \ s3://(bucket name)/(path to output folder)/model-HPO-configuration.json \ ./

完成编辑后,请将文件上传回原来的位置:

aws s3 cp \ model-HPO-configuration.json \ s3://(bucket name)/(path to output folder)/model-HPO-configuration.json

的结构model-HPO-configuration.json文件

这些区域有:model-HPO-configuration.json文件指定要训练的模型,机器学习task_type以及各种模型训练应该变更或固定的超参数.

超参数被归类为属于各种层,这些层表示在调用超参数调整作业时给予超参数的优先级:

  • Tier-1 超级参数具有最高优先级。如果你设置maxHPONumberOfTrainingJobs至小于 10 的值,只有 Tier-1 超参数被调整,其余的则采用默认值。

  • Tier-2 超参数的优先级较低,因此,如果调整作业的训练作业总数超过 10 个但少于 50 个,则将调整 Tier-1 和 Tier-2 超参数。

  • 只有在总培训岗位超过 50 个时,才会与 Tier-1 和 Tier 2 一起调整第 3 层超参数。

  • 最后,固定的超参数根本不会被调整,总是采用默认值。

示例:model-HPO-configuration.json文件

以下是示例model-HPO-configuration.jsonfile:

{ "models": [ { "model": "rgcn", "task_type": "node_class", "eval_metric": { "metric": "acc" }, "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 }, "1-tier-param": [ { "param": "num-hidden", "range": [16, 128], "type": "int", "inc_strategy": "power2" }, { "param": "num-epochs", "range": [3,30], "inc_strategy": "linear", "inc_val": 1, "type": "int", "node_strategy": "perM" }, { "param": "lr", "range": [0.001,0.01], "type": "float", "inc_strategy": "log" } ], "2-tier-param": [ { "param": "dropout", "range": [0.0,0.5], "inc_strategy": "linear", "type": "float", "default": 0.3 }, { "param": "global-norm", "type": "bool", "default": true } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 4096], "inc_strategy": "power2", "type": "int", "default": 1024 }, { "param": "sparse-embedding", "type": "bool", "default": false }, { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "fanout", "type": "int", "options": [[10, 30],[15, 30], [15, 30]], "default": [10, 15, 15] }, { "param": "num-layer", "range": [1, 3], "inc_strategy": "linear", "inc_val": 1, "type": "int", "default": 2 }, { "param": "num-bases", "range": [2, 8], "inc_strategy": "linear", "inc_val": 2, "type": "int", "default": 2 } ], "fixed-param": [ { "param": "layer-norm", "type": "bool", "default": false }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem"o, "type": "bool", "default": true }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] }

A 的元素model-HPO-configuration.json文件

该文件包含一个 JSON 对象,其中包含一个名为models包含单个模型配置对象。自定义文件时,请确保models数组中只有一个模型配置对象。如果您的文件包含多个模型配置对象,则调整作业将失败并显示警告。

模型配置对象包含以下顶级元素:

  • model— (字符串) 要训练的模型类型 (不要修改)。有效值为:

    • "rgcn"— 这是节点分类和回归任务以及异构链接预测任务的默认设置。

    • "transe"— 这是 KGE 链接预测任务的默认设置。

    • "distmult"— 这是 KGE 链接预测任务的替代模型类型。

    • "rotate"— 这是 KGE 链接预测任务的替代模型类型。

    通常,不要直接修改model值,因为不同的模型类型通常具有实质不同的适用超参数,这可能会在训练作业开始后导致解析错误。

    要更改模型类型,请使用modelName中的参数模型训练 API而不是在model-HPO-configuration.json文件。

    更改模型类型并进行细粒度超参数更改的一种方法是复制要使用的模型的默认模型配置模板,然后将其粘贴到model-HPO-configuration.json文件。有一个名为hpo-configuration-templates位于相同的 Amazon S3 位置model-HPO-configuration.json文件如果推断的任务类型支持多个模型。此文件夹包含适用于任务的其他模型的所有默认超参数配置。

    例如,如果您希望更改模型和超参数配置KGE默认的链接预测任务transe模型distmult模型,只需将hpo-configuration-templates/distmult.json文件进入model-HPO-configuration.json文件,然后根据需要编辑超参数。

    注意

    如果你设置了modelName中的参数modelTrainingAPI 还可以更改model和中的超参数规范model-HPO-configuration.json文件,这些都不同,model中的值model-HPO-configuration.json文件优先,并且modelName该值将被忽略。

  • task_type— (字符串) 由数据处理作业推断或直接传递给数据处理作业的机器学习任务类型 (不要修改)。有效值为:

    • "node_class"

    • "node_regression"

    • "link_prediction"

    数据处理作业通过检查导出的数据集和生成的培训作业配置文件以获取数据集的属性来推断任务类型。

    不应更改此值。如果你想训练不同的任务,你需要运行新的数据处理作业. 如果task_type值不是你所期望的,你应该检查你的数据处理作业的输入以确保它们是正确的。这包括参数modelTrainingAPI,以及数据导出过程生成的培训作业配置文件中。

  • eval_metric— (字符串) 评估指标应用于评估模型性能以及在 HPO 运行中选择性能最佳的模型。有效值为:

    • "acc"— 标准分类准确性。这是单标签分类任务的默认设置,除非在数据处理过程中发现不平衡的标签,在这种情况下,默认值为"F1".

    • "acc_topk"— 正确标签位于顶部的次数k预测。您也可以设置值k通过传递topk作为额外的钥匙。

    • "F1"— 该F1 分数.

    • "mse"均方错误指标,用于回归任务。

    • "mrr"平均倒数排名指标.

    • "precision"— 模型精度,计算为真正正值与预测正值的比率:= true-positives / (true-positives + false-positives).

    • "recall"— 模型召回,计算为真正正值与实际正值的比率:= true-positives / (true-positives + false-negatives).

    • "roc_auc"— 下面的区域ROC 曲线. 这是多标签分类的默认设置。

    例如,将指标更改为F1,请更改eval_metric值如下所示:

    " eval_metric": { "metric": "F1", },

    或者,将指标更改为topk准确性分数,你会改变eval_metric如下所示:

    "eval_metric": { "metric": "acc_topk", "topk": 2 },
  • eval_frequency— (Object) 指定在训练期间应检查验证集上模型的性能的频率。根据验证性能,然后可以启动提前停止并保存最佳模型。

    这些区域有:eval_frequency对象包含两个元素,即"type""value". 例如:

    "eval_frequency": { "type": "evaluate_every_pct", "value": 0.1 },

    有效type有效值为:

    • evaluate_every_pct— 指定每次评估要完成的培训百分比。

      适用于evaluate_every_pct"value"字段中包含一个介于零到 1 之间的浮点数,表示该百分比。

    • evaluate_every_batch— 指定每个评估要完成的培训批次数。

      适用于evaluate_every_batch"value"字段包含一个整数,用于表示该批次计数。

    • evaluate_every_epoch— 指定每个评估的时代数量,新纪元从午夜开始。

      适用于evaluate_every_epoch"value"字段包含一个表示该纪元计数的整数。

    的默认设置eval_frequency是:

    "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 },
  • 1-tier-param— (必需) 一组 Tier-1 超参数。

    如果不希望优化任何超级参数,可以将其设置为一个空的数组。这不影响 SageMaker 超参数调整作业启动的训练作业总数。这只是意味着所有训练作业(如果超过 1 个但少于 10 个)将使用同一组超参数运行。

    另一方面,如果你想对待所有可调的超参数具有同等意义,那么你可以把所有超参数放在这个数组中。

  • 2-tier-param— (必需) 一组 Tier-2 超参数。

    这些参数仅在以下情况下才会maxHPONumberOfTrainingJobs有效值大于 10。否则,它们将固定为默认值。

    如果您的培训预算最多为 10 个培训工作,或者出于任何其他原因不想要 Tier-2 超参数,但是您想调整所有可调的超参数,则可以将其设置为空数组。

  • 3-tier-param— (必需) 一组 Tier-3 超参数。

    这些参数仅在以下情况下才会maxHPONumberOfTrainingJobs有效值大于 50。否则,它们将固定为默认值。

    如果你不想要 Tier-3 超参数,你可以将其设置为空数组。

  • fixed-param— (必需) 一组固定的超参数,它们仅采用默认值,在不同的训练作业中没有变化。

    如果你想改变所有超参数,你可以将其设置为空数组,然后设置maxHPONumberOfTrainingJobs足以改变所有层级或制作所有超参数 Tier-1。

表示中每个超参数的 JSON 对象1-tier-param2-tier-param3-tier-param, 和fixed-param包含以下元素:

  • param— (字符串) 超参数的名称 (不要改变)。

    请参阅Neptune ML 中有效的超参数名称列表.

  • type— (字符串) 超参数类型 (不要改变)。

    有效类型为:boolint, 和float.

  • default— (字符串) 超级参数的默认值。

    您可以设置新的默认值。

可优化超级参数还可以包含以下元素:

  • range— (数组) 连续可调超参数的范围。

    这应该是一个包含两个值的数组,即范围的最小值和最大值([min, max])。

  • options— (数组) 分类可调超参数的选项。

    这个数组应包含所有要考虑的选项:

    "options" : [value1, value2, ... valuen]
  • inc_strategy— (字符串) 连续可调超参数范围的增量更改类型 (不要改变)。

    有效值包括 loglinearpower2。仅当设置范围键时适用。

    修改此选项可能会导致不使用全部范围的超参数进行调整。

  • inc_val— (Float) 连续可调的超级参数的连续增量不同的数量(不要改变)。

    仅当设置范围键时适用。

    修改此选项可能会导致不使用全部范围的超参数进行调整。

  • node_strategy— (字符串) 表示此超参数的有效范围应根据图表中的节点数量而更改(不要改变)。

    有效值为"perM"(每百万),"per10M"(每 1000 万元),以及"per100M"(每 1 亿美元)。

    而不是更改此值,而是更改range相反。

  • edge_strategy— (字符串) 表示此超参数的有效范围应根据图表中的边数而更改(不要改变)。

    有效值为"perM"(每百万),"per10M"(每 1000 万元),以及"per100M"(每 1 亿美元)。

    而不是更改此值,而是更改range相反。

Neptune ML 中所有超参数的列表

下面的列表包含可以在 Neptune ML 中的任何位置为任何模型类型和任务设置的所有超参数。由于它们并非全部适用于每种模型类型,因此重要的是,您只能在model-HPO-configuration.json显示在所使用模型的模板中的文件。

  • batch-size— 在一次转发中使用的目标节点批次的大小。类型int

    将此值设置为更大的值可能会导致 GPU 实例上训练的内存问题。

  • call_to_consider_early_stop— 指定提前停止可以启动的最早评估呼叫的次数。如有必要,这是为了允许一段烧毁期。类型int.默认值0.

    请参阅提前停止 Neptune ML 中的模型训练过程

  • concat-node-embed— 指示是否通过将节点的要素与初始嵌入连接来获得节点的初始表示形式。类型bool

  • dropout— 应用于丢弃图层的辍学概率。类型float

  • enable_early_stop— 切换是否使用提前停止功能。类型bool.默认值true. 请参阅。

  • fanout— 邻居采样期间要为目标节点采样的邻居数量。类型int

    此值与此值紧密耦合num-layers并且应该始终处于同一个超参数层中。这是因为你可以为每个潜在的 GNN 图层指定扇出。

    由于此超参数可能会导致模型性能差异很大,因此应该修复或设置为 Tier-2 或 Tier-3 超参数。将其设置为较大的值可能会导致 GPU 实例上训练的内存问题。

  • gamma— 分数函数中的保证金值。类型float

    这适用于KGE仅限链接预测模型。

  • global-norm— 指示是否使用全局规范化而不是基于关系的标准化。类型bool

  • l2norm— 指明是否使用L2正常化惩罚而不是体重衰减。类型bool

  • layer-norm— 指明是否将图层标准化用于rgcn型号。类型bool

  • low-mem— 指示是否以牺牲速度为代价使用关系消息传递函数的低内存实现。类型bool

  • lr— 学习速率。类型float

    应该将其设置为 Tier-1 超参数。

  • neg-share— 在链接预测中,指示正样本边是否可以共享负边采样。类型bool

  • num-bases— 基数分解的基数数rgcn模型。类型int

  • num-epochs— 要运行的训练纪元数。类型int

    一个时代是一个完整的训练通过图表。

  • num-hidden— 隐藏的图层大小或单位数。类型int

    这还可以设置无功能节点的初始嵌入大小。

    在不减少的情况下将其设置为更大的值batch-size可能会导致 GPU 实例训练的内存不足问题。

  • num-layer— 模型中 GNN 图层的数量。类型int

    此值与扇出参数紧密耦合,应该在同一超参数层中设置扇出之后出现。

    由于这可能会导致模型性能差异很大,因此应该修复或设置为 Tier-2 或 Tier-3 超参数。

  • num-negs— 在链接预测中,每个阳性样本的负样本数量。类型int

  • regularization-coef— 在链接预测中,正则化损失的系数。类型float

  • rel-part— 指明是否将关系分区用于KGE链接预测。类型bool

  • sparse-lr— 稀疏嵌入的学习速率。稀疏嵌入层的参数是使用单独的优化程序进行训练的,该优化器可以具有单独的学习速率。类型float

  • use-self-loop— 指示是否在训练中包括自我循环rgcn模型。类型bool

  • window-for-early-stop— 控制平均的最新验证分数以决定提前停止。默认值为 3。type=int。另请参阅 提前停止 Neptune ML 中的模型训练过程类型int.默认值3.

    请参阅。

在 Neptune ML 中自定义超参数

当你编辑model-HPO-configuration.json文件,以下是最常见的更改类型:

  • 编辑的最小和/或最大值range超级参数。

  • 通过将超参数移动到固定值将其设置为固定值fixed-param部分,然后将其默认值设置为您想要使用的固定值。

  • 通过将超参数放置在特定层中、编辑其范围并确保正确设置其默认值来更改其优先级。