本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Neptune ML 中自定义模型超参数配置
当你开始 Neptune ML 模型训练作业时,Neptune ML 会自动使用从前面推断出的信息数据处理任务。它使用信息生成超参数配置范围,这些配置范围用于创建SageMaker 超级参数优化作业为你的任务训练多个模型。这样,您就不必为要训练的模型指定长长的超参数值列表。而是根据任务类型、图形类型和调整作业设置选择模型超参数范围和默认值。
但是,您也可以通过修改数据处理作业生成的 JSON 配置文件来覆盖默认的超参数配置并提供自定义超参数。
使用 Neptune ML模型训练 API,你可以控制几个高级超参数调整作业设置,如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
以及各种模型训练应该变更或固定的超参数.
超参数被归类为属于各种层,这些层表示在调用超参数调整作业时给予超参数的优先级:
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.json
file:
{ "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
中的参数modelTraining
API 还可以更改model
和中的超参数规范model-HPO-configuration.json
文件,这些都不同,model
中的值model-HPO-configuration.json
文件优先,并且modelName
该值将被忽略。 -
task_type
— (字符串) 由数据处理作业推断或直接传递给数据处理作业的机器学习任务类型 (不要修改)。有效值为:"node_class"
"node_regression"
"link_prediction"
数据处理作业通过检查导出的数据集和生成的培训作业配置文件以获取数据集的属性来推断任务类型。
不应更改此值。如果你想训练不同的任务,你需要运行新的数据处理作业. 如果
task_type
值不是你所期望的,你应该检查你的数据处理作业的输入以确保它们是正确的。这包括参数modelTraining
API,以及数据导出过程生成的培训作业配置文件中。 -
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-param
、2-tier-param
、3-tier-param
, 和fixed-param
包含以下元素:
-
param
— (字符串) 超参数的名称 (不要改变)。 -
type
— (字符串) 超参数类型 (不要改变)。有效类型为:
bool
、int
, 和float
. -
default
— (字符串) 超级参数的默认值。您可以设置新的默认值。
可优化超级参数还可以包含以下元素:
-
range
— (数组) 连续可调超参数的范围。这应该是一个包含两个值的数组,即范围的最小值和最大值(
[min, max]
)。 -
options
— (数组) 分类可调超参数的选项。这个数组应包含所有要考虑的选项:
"options" : [value1, value2, ... valuen]
-
inc_strategy
— (字符串) 连续可调超参数范围的增量更改类型 (不要改变)。有效值包括
log
、linear
和power2
。仅当设置范围键时适用。修改此选项可能会导致不使用全部范围的超参数进行调整。
-
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
. -
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
部分,然后将其默认值设置为您想要使用的固定值。通过将超参数放置在特定层中、编辑其范围并确保正确设置其默认值来更改其优先级。