本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Neptune ML 中自定义模型超参数配置
启动 Neptune ML 模型训练任务时,Neptune ML 会自动使用从之前的数据处理任务中推理的信息。它使用这些信息生成超参数配置范围,这些范围用于创建 A SageMaker I 超参数调整作业,为您的任务训练多个模型。这样,您就不必为要训练的模型指定一长串超参数值。相反,模型超参数范围和默认值是根据任务类型、图形类型和调整任务设置来选择的。
但是,您也可以通过修改数据处理作业生成的配置文件来覆盖默认的超参数JSON配置并提供自定义超参数。
使用 Neptune ML modelTrainingAPI,您可以控制多个高级超参数调整作业设置maxHPONumberOfTrainingJobs
,例如、maxHPOParallelTrainingJobs
和。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
以及应在模型训练的不同运行中改变或固定的超参数。
超参数归类为属于不同的层,这些层表示调用超参数调整任务时赋予超参数的优先级:
第 1 层超参数具有最高优先级。如果将
maxHPONumberOfTrainingJobs
设置为小于 10 的值,则只调整第 1 层超参数,其余超参数采用其默认值。第 2 层超参数的优先级较低,因此,如果调整任务的训练任务总数超过 10 但少于 50,则会调整第 1 层和第 2 层超参数。
只有当训练任务总数超过 50 时,第 3 层超参数才会与第 1 层和第 2 层一起调整。
最后,固定的超参数根本不会进行调整,并且始终采用其默认值。
model-HPO-configuration.json
文件的示例
下面是一个示例 model-HPO-configuration.json
文件。
{ "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": "layer-norm", "type": "bool", "default": true } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 4096], "inc_strategy": "power2", "type": "int", "default": 1024 }, { "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": [0, 8], "inc_strategy": "linear", "inc_val": 2, "type": "int", "default": 0 } ], "fixed-param": [ { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem", "type": "bool", "default": true }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] }
model-HPO-configuration.json
文件的元素
该文件包含一个JSON对象,该对象具有一个名为的顶级数组models
,其中包含一个模型配置对象。自定义此文件时,请确保 models
数组中只有一个模型配置对象。如果文件包含多个模型配置对象,则调整任务将失败并显示警告。
模型配置对象包含以下顶级元素:
-
model
–(字符串)要训练的模型类型(请勿修改)。有效值为:"rgcn"
– 这是节点分类和回归任务以及异构链接预测任务的默认设置。"transe"
— 这是KGE链接预测任务的默认设置。"distmult"
— 这是KGE链接预测任务的替代模型类型。"rotate"
— 这是KGE链接预测任务的替代模型类型。
通常,不要直接修改
model
值,因为不同的模型类型通常具有明显不同的适用超参数,这可能会在启动训练任务后导致解析错误。要更改模型类型,请使用中的
modelName
参数modelTrainingAPI而不是在model-HPO-configuration.json
文件中进行更改。更改模型类型并对超参数进行精细更改的一种方法是:复制要使用的模型的默认模型配置模板并将其粘贴到
model-HPO-configuration.json
文件中。如果推理的任务类型支持多个模型,那么在与model-HPO-configuration.json
文件相同的 Amazon S3 位置中有一个名为hpo-configuration-templates
的文件夹。此文件夹包含适用于该任务的其它模型的所有默认超参数配置。例如,如果要将
KGE
链接预测任务的模型和超参数配置从默认transe
模型更改为distmult
模型,只需将hpo-configuration-templates/distmult.json
文件的内容粘贴到model-HPO-configuration.json
文件中,然后根据需要编辑超参数即可。注意
如果您在中设置
modelName
参数modelTraining
API并更改model-HPO-configuration.json
文件中的model
和超参数规范,但两者不同,则model-HPO-configuration.json
文件中的model
值优先,该modelName
值将被忽略。 -
task_type
–(字符串)由数据处理任务推理或直接传递给数据处理任务的机器学习任务类型(请勿修改)。有效值为:"node_class"
"node_regression"
"link_prediction"
数据处理任务通过检查导出的数据集和生成的训练任务配置文件中的数据集属性来推理任务类型。
不应更改该值。如果要训练其它任务,则需要运行新的数据处理任务。如果
task_type
值不是您预期的值,则应检查数据处理任务的输入以确保它们正确无误。这包括数据导出modelTraining
API过程生成的训练作业配置文件中的参数以及这些配置文件中的参数。 -
eval_metric
—(String)评估指标应用于评估模型性能和在各次HPO运行中选择性能最佳的模型。有效值为:"acc"
– 标准分类精度。这是单标签分类任务的默认设置,除非在数据处理过程中发现不平衡的标签,在这种情况下,默认值为"F1"
。"acc_topk"
– 正确的标签出现在前k
个预测中的次数。您也可以通过传入topk
作为额外键来设置值k
。"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
–(对象)指定在训练期间应多久检查一次模型在验证集上的性能。根据验证性能,可以启动提前停止,并保存最佳模型。eval_frequency
对象包含两个元素,即"type"
和"value"
。例如:"eval_frequency": { "type": "evaluate_every_pct", "value": 0.1 },
有效的
type
值为:-
evaluate_every_pct
– 指定每次评估要完成的训练百分比。对于
evaluate_every_pct
,"value"
字段包含一个介于零和一之间的浮点数,用于表示该百分比。 -
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
–(必需)第 1 层超参数的数组。如果您不想调整任何超参数,则可以将其设置为空数组。这不会影响 SageMaker AI 超参数调整任务启动的训练作业总数。这只是意味着所有训练任务(如果大于 1 但小于 10)都将使用相同的超参数集运行。
另一方面,如果您想以同等的重要性对待所有可调整的超参数,您可以将所有超参数放在这个数组中。
-
2-tier-param
–(必需)第 2 层超参数的数组。仅当
maxHPONumberOfTrainingJobs
的值大于 10 时,才调整这些参数。否则,它们将固定为默认值。如果您的训练预算最多为 10 个训练任务,或者出于任何其它原因不想要第 2 层超参数,但您想调整所有可调整的超参数,则可以将其设置为空数组。
-
3-tier-param
–(必需)第 3 层超参数的数组。仅当
maxHPONumberOfTrainingJobs
的值大于 50 时,才调整这些参数。否则,它们将固定为默认值。如果您不想要第 3 层超参数,可以将其设置为空数组。
-
fixed-param
–(必需)固定超参数的数组,这些超参数仅采用其默认值,且在不同的训练任务中没有变化。如果您想改变所有超参数,您可以将其设置为一个空数组,然后将
maxHPONumberOfTrainingJobs
的值设置为足够大以改变所有层,或者使所有超参数成为第 1 层。
代表1-tier-param
、2-tier-param
3-tier-param
、和中每个超参数的JSON对象fixed-param
包含以下元素:
-
param
–(字符串)超参数的名称(请勿更改)。 -
type
–(字符串)超参数类型(请勿更改)。有效类型为:
bool
、int
和float
。 -
default
–(字符串)超参数的默认值。您可以设置新的默认值。
可调整超参数也可以包含以下元素:
-
range
–(数组)连续可调整超参数的范围。这应该是一个包含两个值的数组,即范围的最小值和最大值 (
[min, max]
)。 -
options
–(数组)分类可调整超参数的选项。此数组应包含所有需要考虑的选项:
"options" : [value1, value2, ... valuen]
-
inc_strategy
–(字符串)连续可调整超参数范围的增量更改的类型(请勿更改)。有效值包括
log
、linear
和power2
。仅当设置范围键时适用。修改此设置可能会导致无法使用超参数的完整范围进行调整。
-
inc_val
–(浮点数)连续可调整超参数的连续增量差异量(请勿更改)。仅当设置范围键时适用。
修改此设置可能会导致无法使用超参数的完整范围进行调整。
-
node_strategy
–(字符串)表示此超参数的有效范围应根据图形中的节点数而变化(请勿更改)。有效值为
"perM"
(每百万)、"per10M"
(每千万)和"per100M"
(每 1 亿)。不更改此值,而应更改
range
。 -
edge_strategy
–(字符串)表示此超参数的有效范围应根据图形中的边缘数而变化(请勿更改)。有效值为
"perM"
(每百万)、"per10M"
(每千万)和"per100M"
(每 1 亿)。不更改此值,而应更改
range
。
Neptune ML 中所有超参数的列表
以下列表包含可以在 Neptune ML 中的任何位置为任何模型类型和任务设置的所有超参数。由于它们并非全部适用于每种模型类型,因此务必仅在所用模型的模板中出现的 model-HPO-configuration.json
文件中设置超参数。
-
batch-size
– 一次向前传递中使用的目标节点批次的大小。类型:int
。将其设置为更大的值可能会导致在GPU实例上训练时出现内存问题。
-
concat-node-embed
– 指示是否通过将节点的处理后特征与可学习的初始节点嵌入相连接来获得节点的初始表示形式,以改善模型的表现力。类型:bool
。 -
dropout
– 应用于丢弃层的丢弃概率。类型:float
。 -
edge-num-hidden
– 边缘特征模块的隐藏层大小或单位数量。仅在use-edge-features
设置为True
时使用。类型:浮点数。 -
enable-early-stop
– 切换是否使用提前停止特征。类型:bool
。默认值:true
。使用此布尔参数可关闭提前停止特征。
-
fanout
– 在邻居采样期间要为目标节点采样的邻居数量。类型:int
。此值与
num-layers
紧密耦合,应始终位于同一个超参数层中。这是因为您可以为每个潜在GNN层指定扇出。由于此超参数可能导致模型性能变化很大,因此应将其固定或设置为第 2 层或第 3 层超参数。将其设置为较大的值可能会导致在GPU实例上训练时出现内存问题。
-
gamma
– 分数函数中的边距值。类型:float
。这仅适用于
KGE
链接预测模型。 -
l2norm
– 优化程序中使用的权重衰减值,该值对权重施加 L2 规范化惩罚。类型:bool
。 -
layer-norm
– 表示是否对rgcn
模型使用层规范化。类型:bool
。 -
low-mem
– 指示是否以牺牲速度为代价使用关系消息传递函数的低内存实现。类型:bool
。 -
lr
– 学习率。类型:float
。应将其设置为第 1 层超参数。
-
neg-share
– 在链接预测中,表示正采样的边缘是否可以共享负边缘样本。类型:bool
。 -
num-bases
–rgcn
模型中用于基本分解的基数。使用小于图形中边缘类型数量的num-bases
值可以作为rgcn
模型的正则化项。类型:int
。 -
num-epochs
– 要运行的训练纪元数。类型:int
。纪元是通过图形的完整训练过程。
-
num-hidden
– 隐藏的层大小或单位数量。类型:int
。这还会设置无特征节点的初始嵌入大小。
在不减少的情况下将其设置为更大的值
batch-size
可能会导致GPU实例训练出现 out-of-memory问题。 -
num-layer
— 模型中的GNN层数。类型:int
。该值与扇出参数紧密耦合,应在同一个超参数层中设置扇出之后出现。
由于这可能导致模型性能变化很大,因此应将其固定或设置为第 2 层或第 3 层超参数。
-
num-negs
– 在链接预测中,每个正样本的负样本数。类型:int
。 -
per-feat-name-embed
– 表示是否在组合特征之前通过单独转换每个特征来嵌入每个特征。类型:bool
。如果设置为
true
,则每个节点的每个特征都将独立转换为固定的维度大小,然后将该节点的所有已转换特征串联起来,并进一步转换为num_hidden
维度。如果设置为
false
,则在不进行任何特定于特征的转换的情况下串联特征。 -
regularization-coef
– 在链接预测中,正则化损失的系数。类型:float
。 -
rel-part
– 表示是否使用关系分区进行KGE
链接预测。类型:bool
。 -
sparse-lr
– 可学习节点嵌入的学习率。类型:float
。可学习的初始节点嵌入用于没有特征或设置
concat-node-embed
时的节点。稀疏可学习节点嵌入层的参数使用单独的优化程序进行训练,该优化程序可以具有单独的学习速率。 -
use-class-weight
– 表示是否对不平衡的分类任务应用类别权重。如果设置为true
,则使用标签计数为每个类别标签设置权重。类型:bool
。 -
use-edge-features
– 表示在消息传递过程中是否使用边缘特征。如果设置为true
,则会为具有特征的边类型向RGCN图层中添加自定义边要素模块。类型:bool
。 -
use-self-loop
– 表示是否在训练rgcn
模型时包含自循环。类型:bool
。 -
window-for-early-stop
– 控制最新验证分数的平均值,以决定是否提前停止。默认值为 3。类型 = int。另请参阅在 Neptune ML 中提前停止模型训练过程。类型:int
。默认值:3
。请参阅 。
在 Neptune ML 中自定义超参数
编辑 model-HPO-configuration.json
文件时,以下是最常见的更改类型:
编辑
range
超参数的最小值和/或最大值。通过将超参数移到
fixed-param
部分并将其默认值设置为您想要的固定值,将其设置为固定值。更改超参数的优先级,方法是将其置于特定层,编辑其范围,并确保正确设置其默认值。