Personalización de las configuraciones de hiperparámetros de modelos en Neptune ML - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Personalización de las configuraciones de hiperparámetros de modelos en Neptune ML

Al iniciar un trabajo de entrenamiento de modelos, Neptune ML utiliza automáticamente la información inferida del trabajo de procesamiento de datos anterior. Utiliza la información para generar rangos de configuración de hiperparámetros que se utilizan para crear un trabajo de ajuste de hiperparámetros de SageMaker con el fin de entrenar varios modelos para su tarea. De esta forma, no es necesario especificar una larga lista de valores de hiperparámetros para los modelos con los que se va a entrenar. En cambio, los rangos de hiperparámetros y los valores predeterminados del modelo se seleccionan en función del tipo de tarea, el tipo de gráfico y la configuración del trabajo de ajuste.

Sin embargo, también puede anular la configuración predeterminada de los hiperparámetros y proporcionar hiperparámetros personalizados. Para ello, modifique un archivo de configuración de JSON que genera el trabajo de procesamiento de datos.

Con la API de modelTraining de Neptune ML, puede controlar varias configuraciones de trabajos de ajuste de hiperparámetros de alto nivel, como, por ejemplo, maxHPONumberOfTrainingJobs, maxHPOParallelTrainingJobs y trainingInstanceType. Para un control más detallado de los hiperparámetros de los modelos, puede personalizar el archivo model-HPO-configuration.json que genera el trabajo de procesamiento de datos. El archivo se guarda en la ubicación de Amazon S3 que especificó para la salida del trabajo de procesamiento.

Puede descargar el archivo, editarlo para anular las configuraciones de hiperparámetros predeterminadas y volver a cargarlo en la misma ubicación de Amazon S3. No cambie el nombre del archivo y asegúrese de seguir estas instrucciones al editarlo.

Para descargar el archivo de Amazon S3:

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

Cuando haya terminado de editarlo, vuelva a cargar el archivo donde estaba:

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

Estructura del archivo model-HPO-configuration.json

El archivo model-HPO-configuration.json especifica el modelo que se va a entrenar, la opción task_type del machine learning y los hiperparámetros que deben modificarse o fijarse para las distintas ejecuciones de entrenamiento del modelo.

Los hiperparámetros se clasifican como pertenecientes a varios niveles, lo que indica la prioridad que se da a los hiperparámetros cuando se invoca el trabajo de ajuste de hiperparámetros:

  • Los hiperparámetros de nivel 1 tienen la prioridad más alta. Si se establece maxHPONumberOfTrainingJobs en un valor inferior a 10, solo se ajustan los hiperparámetros de nivel 1 y el resto toma sus valores predeterminados.

  • Los hiperparámetros de nivel 2 tienen una prioridad inferior, por lo que si tiene más de 10 pero menos de 50 trabajos de entrenamiento en total para un trabajo de ajuste, se ajustarán los hiperparámetros de nivel 1 y 2.

  • Los hiperparámetros de nivel 3 se ajustan junto con los de nivel 1 y 2 solo si tiene más de 50 trabajos de formación en total.

  • Por último, los hiperparámetros fijos no se ajustan en absoluto y siempre toman sus valores predeterminados.

Ejemplo de un archivo model-HPO-configuration.json

A continuación se muestra un archivo model-HPO-configuration.json de ejemplo:

{ "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 } ] } ] }

Elementos de un archivo model-HPO-configuration.json

El archivo incluye un objeto de JSON con una única matriz de nivel superior denominado models que incluye un único objeto de configuración de modelo. Al personalizar el archivo, asegúrese de que la matriz de models solo tenga un objeto de configuración de modelo. Si el archivo incluye más de un objeto de configuración de modelo, se producirá un error en el trabajo de ajuste y aparecerá una advertencia.

El objeto de configuración de modelo incluye los siguientes elementos de nivel superior:

  • model: (cadena) el tipo de modelo que se va a entrenar (no lo modifique). Los valores válidos son:

    • "rgcn": este es el valor predeterminado para las tareas de clasificación y regresión de nodos y para las tareas heterogéneas de predicción de enlaces.

    • "transe": este es el valor predeterminado para las tareas de predicción de enlaces de KGE.

    • "distmult": este es un tipo de modelo alternativo para las tareas de predicción de enlaces de KGE.

    • "rotate": este es un tipo de modelo alternativo para las tareas de predicción de enlaces de KGE.

    Por regla general, no modifique directamente el valor de model, ya que los diferentes tipos de modelos suelen tener hiperparámetros aplicables bastante diferentes, lo que puede provocar un error de análisis una vez iniciado el trabajo de entrenamiento.

    Para cambiar el tipo de modelo, utilice el parámetro modelName de la API de modelTraining en lugar de cambiarlo en el archivo model-HPO-configuration.json.

    Una forma de cambiar el tipo de modelo y realizar cambios detallados en los hiperparámetros consiste en copiar la plantilla predeterminada de configuración del modelo para el modelo que desee usar y pegarla en el archivo model-HPO-configuration.json. Hay una carpeta con el nombre hpo-configuration-templates en la misma ubicación de Amazon S3 que el archivo model-HPO-configuration.json si el tipo de tarea inferido admite varios modelos. Esta carpeta incluye todas las configuraciones predeterminadas de hiperparámetros para los demás modelos que se aplican a la tarea.

    Por ejemplo, si desea cambiar las configuraciones del modelo y de los hiperparámetros de una tarea de predicción de enlaces de KGE del modelo predeterminadotranse a un modelo distmult, simplemente pegue el contenido del archivo hpo-configuration-templates/distmult.json en el archivo model-HPO-configuration.json y, a continuación, edite los hiperparámetros según sea necesario.

    nota

    Si establece el parámetro modelName en la API de modelTraining y también cambia la opción model y la especificación del hiperparámetro en el archivo model-HPO-configuration.json, y estos son diferentes, el valor model del archivo model-HPO-configuration.json tendrá prioridad y se omitirá modelName.

  • task_type: (cadena) el tipo de tarea de machine learning inferido o transferido directamente al trabajo de procesamiento de datos (no lo modifique). Los valores válidos son:

    • "node_class"

    • "node_regression"

    • "link_prediction"

    El trabajo de procesamiento de datos infiere el tipo de tarea examinando las propiedades del conjunto de datos exportado y el archivo de configuración del trabajo de entrenamiento generado.

    Este valor no debe modificarse. Si desea entrenar otra tarea, debe ejecutar un nuevo trabajo de procesamiento de datos. Si el valor task_type no es el que esperaba, debe comprobar las entradas del trabajo de procesamiento de datos para asegurarse de que sean correctas. Esto incluye los parámetros de la API de modelTraining y del archivo de configuración del trabajo de entrenamiento generado por el proceso de exportación de datos.

  • eval_metric: (cadena) la métrica de evaluación debe usarse para evaluar el rendimiento del modelo y seleccionar el modelo con mejor rendimiento en todas las ejecuciones de HPO. Los valores válidos son:

    • "acc": precisión de clasificación estándar. Este es el valor predeterminado para las tareas de clasificación de una sola etiqueta, a menos que se encuentren etiquetas desequilibradas durante el procesamiento de los datos, en cuyo caso el valor predeterminado es "F1".

    • "acc_topk": el número de veces que la etiqueta correcta figura entre las principales predicciones de k. Para establecer el valor k, también puede proporcionar el valor topk como clave adicional.

    • "F1": el valor F1.

    • "mse"métrica de error cuadrático medio, para tareas de regresión.

    • "mrr"métrica de rango recíproco medio.

    • "precision": la precisión del modelo, calculada como la proporción entre los positivos verdaderos y los positivos pronosticados: = true-positives / (true-positives + false-positives).

    • "recall": la exhaustividad del modelo, calculada como la proporción entre los positivos verdaderos y los positivos pronosticados: = true-positives / (true-positives + false-negatives).

    • "roc_auc": el área debajo de la curva ROC. Este es el valor predeterminado para la clasificación de varias etiquetas.

    Por ejemplo, para cambiar la métrica a F1, cambie el valor eval_metric de la siguiente manera:

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

    O bien, si desea cambiar la métrica a una puntuación de precisión topk, debería cambiar el valor eval_metric de la siguiente manera:

    "eval_metric": { "metric": "acc_topk", "topk": 2 },
  • eval_frequency: (objeto) especifica con qué frecuencia se debe comprobar el rendimiento del modelo en el conjunto de validación durante el entrenamiento. En función del rendimiento de la validación, se puede iniciar una detención temprana y guardar el mejor modelo.

    El objeto eval_frequency incluye dos elementos: "type" y "value". Por ejemplo:

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

    Los valores válidos de type son:

    • evaluate_every_pct: especifica el porcentaje de entrenamiento que debe completarse en cada evaluación.

      En el caso de evaluate_every_pct, el campo "value" incluye un número de coma flotante entre cero y uno que expresa ese porcentaje.

    • evaluate_every_batch: especifica el número de lotes entrenamiento que debe completarse en cada evaluación.

      En el caso de evaluate_every_batch, el campo "value" incluye un número entero que expresa el recuento de lotes.

    • evaluate_every_epoch: especifica el número de épocas por evaluación, donde una nueva época comienza a medianoche.

      En el caso de evaluate_every_epoch, el campo "value" incluye un número entero que expresa el recuento de épocas.

    El ajuste predeterminado de eval_frequency es:

    "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 },
  • 1-tier-param: (obligatorio) una matriz de hiperparámetros de nivel 1.

    Si no desea ajustar ningún hiperparámetro, puede hacerlo en una matriz vacía. Esto no afecta al número total de trabajos de entrenamiento lanzados por el trabajo de ajuste de hiperparámetros de SageMaker. Tan solo significa que todos los trabajos de entrenamiento, si hay más de 1 pero menos de 10, se ejecutarán con el mismo conjunto de hiperparámetros.

    Por otro lado, si desea tratar todos los hiperparámetros ajustables con la misma importancia, puede colocar todos los hiperparámetros en esta matriz.

  • 2-tier-param: (obligatorio) una matriz de hiperparámetros de nivel 2.

    Estos parámetros solo se ajustan si la opción maxHPONumberOfTrainingJobs tiene un valor superior a 10. De lo contrario, se fijan a los valores predeterminados.

    Si tiene un presupuesto de entrenamiento de un máximo de 10 trabajos de entrenamiento o no quiere hiperparámetros de nivel 2 por algún otro motivo, pero desea ajustar todos los hiperparámetros ajustables, puede hacerlo en una matriz vacía.

  • 3-tier-param: (obligatorio) una matriz de hiperparámetros de nivel 3.

    Estos parámetros solo se ajustan si la opción maxHPONumberOfTrainingJobs tiene un valor superior a 50. De lo contrario, se fijan a los valores predeterminados.

    Si no desea ajustar los hiperparámetros de nivel 3, puede hacerlo en una matriz vacía.

  • fixed-param: (obligatorio) una matriz de hiperparámetros fijos que solo toman sus valores predeterminados y no varían en los distintos trabajos de entrenamiento.

    Si desea modificar todos los hiperparámetros, puede hacerlo en una matriz vacía y establecer el valor para maxHPONumberOfTrainingJobs lo suficientemente grande como para modificar todos los niveles o hacer que todos los hiperparámetros sean de nivel 1.

El objeto de JSON que representa cada hiperparámetro de 1-tier-param, 2-tier-param, 3-tier-param y fixed-param incluye los siguientes elementos:

  • param: (cadena) el nombre del hiperparámetro (no lo modifique).

    Consulte la lista de nombres de hiperparámetros válidos en Neptune ML.

  • type: (cadena) el tipo del hiperparámetro (no lo modifique).

    Los tipos válidos son bool, int yfloat.

  • default: (cadena) El valor predeterminado del hiperparámetro.

    Puede establecer un nuevo valor predeterminado.

Los hiperparámetros ajustables también pueden incluir los siguientes elementos:

  • range: (matriz) el rango de un hiperparámetro ajustable continuo.

    Debe ser una matriz con dos valores, es decir, el mínimo y el máximo del rango ([min, max]).

  • options: (matriz) las opciones de un hiperparámetro ajustable categórico.

    Esta matriz debe incluir todas las opciones que se deben tener en cuenta:

    "options" : [value1, value2, ... valuen]
  • inc_strategy: (cadena) el tipo de cambio incremental para rangos de hiperparámetros ajustables continuos (no lo modifique).

    Los valores válidos son log, linear y power2. Esto solo se aplica cuando se establece la clave de rango.

    Si se modifica, es posible que no se utilice todo el rango del hiperparámetro para el ajuste.

  • inc_val: (flotante) la diferencia entre los incrementos sucesivos de los hiperparámetros ajustables continuo (no lo modifique).

    Esto solo se aplica cuando se establece la clave de rango.

    Si se modifica, es posible que no se utilice todo el rango del hiperparámetro para el ajuste.

  • node_strategy: (cadena) indica que el rango efectivo de este hiperparámetro debe cambiar en función del número de nodos del gráfico (no lo modifique).

    Los valores válidos son "perM" (por millón), "per10M" (por 10 millones) y "per100M" (por 100 millones).

    En lugar de cambiar este valor, cambie la opción range.

  • edge_strategy: (cadena) indica que el rango efectivo de este hiperparámetro debe cambiar en función del número de bordes del gráfico (no lo modifique).

    Los valores válidos son "perM" (por millón), "per10M" (por 10 millones) y "per100M" (por 100 millones).

    En lugar de cambiar este valor, cambie la opción range.

Lista de todos los hiperparámetros de Neptune ML

En la siguiente lista se incluyen todos los hiperparámetros que se pueden configurar en cualquier lugar de Neptune ML, para cualquier tipo de modelo y tarea. Como no todos son aplicables a todos los tipos de modelo, es importante que solo establezca los hiperparámetros en el archivo model-HPO-configuration.json que aparece en la plantilla del modelo que esté utilizando.

  • batch-size: el tamaño del lote de nodos de destino que se utilizan en un pase hacia adelante. Tipo: int.

    Si se establece en un valor mucho mayor, se pueden producir problemas de memoria durante el entrenamiento en instancias de GPU.

  • concat-node-embed: indica si se debe obtener la representación inicial de un nodo concatenando sus características procesadas con incrustaciones de nodos iniciales que se puedan aprender con el fin de aumentar la expresividad del modelo. Tipo: bool.

  • dropout: la probabilidad de abandono aplicada a las capas de abandono. Tipo: float.

  • edge-num-hidden: el tamaño de la capa oculta o el número de unidades del módulo de características de borde. Solo se usa cuando el valor use-edge-features está establecido en True. Tipo: flotante.

  • enable-early-stop: cambia si se utiliza o no la característica de detención temprana. Tipo: bool. Valor predeterminado: true.

    Utilice este parámetro booleano para desactivar la característica de detención temprana.

  • fanout: el número de vecinos que se deben muestrear para un nodo de destino durante el muestreo de vecinos. Tipo: int.

    Este valor está estrechamente relacionado con el mismo nivel de hiperparámetros num-layers y siempre debe estar en el mismo. Esto se debe a que puede especificar una distribución ramificada para cada posible capa de GNN.

    Como este hiperparámetro puede hacer que el rendimiento del modelo varíe considerablemente, debe ser fijo o establecerse como un hiperparámetro de nivel 2 o 3. Si se establece en un valor grande se pueden producir problemas de memoria durante el entrenamiento en instancias de GPU.

  • gamma: el valor del margen de la función de puntuación. Tipo: float.

    Esto se aplica únicamente a los modelos de predicción de enlaces de KGE.

  • l2norm: el valor de decadencia de ponderación utilizado en el optimizador, que impone una penalización de normalización L2 a las ponderaciones. Tipo: bool.

  • layer-norm: indica si se debe utilizar la normalización de capas para los modelos rgcn. Tipo: bool.

  • low-mem: indica si se debe utilizar una implementación con poca memoria de la función de transferencias de mensajes de relación en detrimento de la velocidad. Tipo: bool.

  • lr: la tasa de aprendizaje. Tipo: float.

    Debe configurarse como un hiperparámetro de nivel 1.

  • neg-share: en la predicción de enlaces, indica si los bordes muestreados positivos pueden compartir ejemplos de bordes negativos. Tipo: bool.

  • num-bases: el número de bases para la descomposición de bases en un modelo rgcn. El uso de un valor de num-bases que sea inferior al número de tipos de bordes del gráfico actúa como regularizador del modelo rgcn. Tipo: int.

  • num-epochs: el número de épocas del entrenamiento que se va a ejecutar. Tipo: int.

    Una época es un recorrido completo de entrenamiento por el gráfico.

  • num-hidden: el tamaño de la capa oculta o el número de unidades. Tipo: int.

    Esto también establece el tamaño de incrustación inicial para los nodos sin características.

    Si se establece en un valor mucho mayor sin reducir la opción batch-size, se pueden producir problemas de memoria durante el entrenamiento en la instancia de GPU.

  • num-layer: el número de capas GNN en el modelo. Tipo: int.

    Este valor está estrechamente relacionado con el parámetro de distribución ramificada y debe aparecer después de que la distribución ramificada se establezca en la misma capa de hiperparámetro.

    Dado que esto puede hacer que el rendimiento del modelo varíe considerablemente, debe ser fijo o establecerse como un hiperparámetro de nivel 2 o 3.

  • num-negs: en la predicción de enlaces, el número de muestras negativas por muestra positiva. Tipo: int.

  • per-feat-name-embed: indica si se debe incrustar cada característica transformándola de forma independiente antes de combinar características. Tipo: bool.

    Si se establece en true, cada característica por nodo se transforma de forma independiente en un tamaño de dimensión fijo antes de que todas las características transformadas del nodo se concatenen y se transformen posteriormente en la dimensión num_hidden.

    Cuando se establece en false, las características se concatenan sin ninguna transformación específica de la característica.

  • regularization-coef: en la predicción de enlaces, el coeficiente de pérdida de regularización. Tipo: float.

  • rel-part: indica si se debe utilizar la partición de relaciones para la predicción de enlaces de KGE. Tipo: bool.

  • sparse-lr: la tasa de aprendizaje de las incrustaciones de nodos que se pueden aprender. Tipo: float.

    Las incrustaciones de nodos iniciales que se pueden aprender se utilizan para los nodos sin características o cuando esté establecida la opción concat-node-embed. Los parámetros de la capa de incrustación de nodos dispersos que se pueden aprender se entrenan mediante un optimizador independiente que puede tener una tasa de aprendizaje diferente.

  • use-class-weight: indica si se deben aplicar ponderaciones de clase a las tareas de clasificación desequilibradas. Si se establece en true, los recuentos de etiquetas se utilizan para establecer una ponderación para cada etiqueta de clase. Tipo: bool.

  • use-edge-features: indica si se deben utilizar las características de borde al transferir los mensajes. Si se establece en true, se añade un módulo de características de borde personalizado a la capa RGCN para los tipos de bordes que tienen características. Tipo: bool.

  • use-self-loop: indica si se deben incluir bucles automáticos en el entrenamiento de un modelo rgcn. Tipo: bool.

  • window-for-early-stop: controla el número de puntuaciones de validación más recientes para obtener una media con el fin de decidir si se debe detener antes de tiempo. El valor predeterminado es 3. type=int. Véase también Detención temprana del proceso de entrenamiento de modelos en Neptune ML. Tipo: int. Valor predeterminado: 3.

    Consulte .

Personalización de hiperparámetros en Neptune ML

Al editar el archivo model-HPO-configuration.json, los tipos de cambios más habituales que hay que realizar son los siguientes:

  • Edite los valores mínimo o máximo para de los hiperparámetros range.

  • Para establecer un hiperparámetro en un valor fijo, muévalo a la sección fixed-param y establezca su valor predeterminado en el valor fijo que desee que adquiera.

  • Para cambiar la prioridad de un hiperparámetro, colóquelo en un determinado nivel, edite su rango y asegúrese de que su valor predeterminado esté establecido de forma adecuada.