Personalizzazione delle configurazioni degli iperparametri dei modelli in Neptune ML - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Personalizzazione delle configurazioni degli iperparametri dei modelli in Neptune ML

Quando si avvia un processo di addestramento dei modelli Neptune ML, Neptune ML utilizza automaticamente le informazioni dedotte dal precedente processo di elaborazione dei dati. Usa le informazioni per generare intervalli di configurazione degli iperparametri che vengono utilizzati per creare un processo di ottimizzazione degli iperparametri di SageMaker per addestrare più modelli per l'attività. In questo modo, non è necessario specificare un lungo elenco di valori di iperparametri da usare per l'addestramento dei modelli. Gli intervalli e i valori predefiniti degli iperparametri del modello vengono invece selezionati in base al tipo di attività, al tipo di grafo e alle impostazioni del processo di ottimizzazione.

Tuttavia, è anche possibile ignorare la configurazione degli iperparametri predefinita e specificare iperparametri personalizzati modificando un file di configurazione JSON generato dal processo di elaborazione dei dati.

Utilizzando l'API modelTraining di Neptune ML, puoi controllare diverse impostazioni generali degli iperparametri del processo di ottimizzazione, come maxHPONumberOfTrainingJobs, maxHPOParallelTrainingJobs e trainingInstanceType. Per un controllo più granulare sugli iperparametri del modello, è possibile personalizzare il file model-HPO-configuration.json generato dal processo di elaborazione dei dati. Il file viene salvato nella posizione Amazon S3 specificata per l'output del processo di elaborazione.

Puoi scaricare il file, modificarlo per sovrascrivere le configurazioni degli iperparametri predefinite e caricarlo nuovamente nella stessa posizione Amazon S3. Non modificare il nome del file e presta attenzione a seguire queste istruzioni durante la modifica.

Per scaricare il file da S3

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

Al termine della modifica, carica nuovamente il file nella posizione originale:

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

Struttura del file model-HPO-configuration.json

Il file model-HPO-configuration.json specifica il modello da addestrare, il tipo di attività task_type di machine learning e gli iperparametri che devono essere variati o fissi per le varie esecuzioni di addestramento del modello.

Gli iperparametri sono classificati come appartenenti a vari livelli che indicano la precedenza assegnata agli iperparametri quando viene richiamato il processo di ottimizzazione degli iperparametri:

  • Gli iperparametri di livello 1 hanno la precedenza più alta. Se imposti maxHPONumberOfTrainingJobs su un valore minore di 10, vengono ottimizzati solo gli iperparametri di livello 1 e gli altri assumono i valori predefiniti.

  • Gli iperparametri di livello 2 hanno una precedenza inferiore, quindi se sono presenti più di 10 ma meno di 50 processi di addestramento totali per un processo di ottimizzazione, vengono ottimizzati sia gli iperparametri di livello 1 che di livello 2.

  • Gli iperparametri di livello 3 vengono ottimizzati insieme a quelli di livello 1 e 2 solo se sono presenti più di 50 processi di addestramento totali.

  • Infine, gli iperparametri fissi non vengono mai ottimizzati e assumono sempre i valori predefiniti.

Esempio di file model-HPO-configuration.json

Di seguito è riportato un file model-HPO-configuration.json di esempio.

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

Elementi di un file model-HPO-configuration.json

Il file contiene un oggetto JSON con un singolo array di primo livello denominato models che contiene un singolo oggetto configurazione del modello. Quando personalizzi il file, assicurati che l'array models contenga solo un oggetto configurazione del modello. Se il file contiene più di un oggetto configurazione del modello, il processo di ottimizzazione avrà esito negativo e verrà visualizzato un avviso.

L'oggetto configurazione del modello contiene i seguenti elementi di primo livello:

  • model (stringa): tipo di modello da addestrare (da non modificare). I valori validi sono:

    • "rgcn": impostazione predefinita per le attività di classificazione e regressione dei nodi e per le attività di previsione dei collegamenti eterogenee.

    • "transe": impostazione predefinita per le attività di previsione dei collegamenti di incorporamento del grafo della conoscenza.

    • "distmult": tipo di modello alternativo per le attività di previsione dei collegamenti di incorporamento del grafo della conoscenza.

    • "rotate": tipo di modello alternativo per le attività di previsione dei collegamenti di incorporamento del grafo della conoscenza.

    In generale, è consigliabile non modificare direttamente il valore model, in quanto diversi tipi di modello hanno spesso iperparametri applicabili sostanzialmente diversi e ciò può causare un errore di analisi dopo l'avvio del processo di addestramento.

    Per modificare il tipo di modello, usa il parametro modelName nell'API modelTraining anziché modificarlo nel file model-HPO-configuration.json.

    Un modo per modificare il tipo di modello e apportare modifiche granulari agli iperparametri consiste nel copiare il modello di configurazione del modello predefinito per il modello da usare e incollarlo nel file model-HPO-configuration.json. Esiste una cartella denominata hpo-configuration-templates nella stessa posizione Amazon S3 del file model-HPO-configuration.json se il tipo di attività dedotto supporta più modelli. Questa cartella contiene tutte le configurazioni di iperparametri predefinite per gli altri modelli applicabili all'attività.

    Ad esempio, per modificare le configurazioni del modello e degli iperparametri per un'attività di previsione dei collegamenti KGE dal modello predefinito transe a un modello distmult, è sufficiente incollare il contenuto del file hpo-configuration-templates/distmult.json nel file model-HPO-configuration.json e quindi modificare gli iperparametri in base alle esigenze.

    Nota

    Se imposti il parametro modelName nell'API modelTraining e modifichi il model e la specifica degli iperparametri nel file model-HPO-configuration.json e questi sono diversi, il valore model nel file model-HPO-configuration.json ha la precedenza e il valore modelName viene ignorato.

  • task_type (stringa): tipo di attività di machine learning dedotto o passato direttamente al processo di elaborazione dei dati (da non modificare). I valori validi sono:

    • "node_class"

    • "node_regression"

    • "link_prediction"

    Il processo di elaborazione dei dati deduce il tipo di attività esaminando il set di dati esportato e il file di configurazione del processo di apprendimento generato per verificare le proprietà del set di dati.

    Questo valore non deve essere modificato. Se si desidera addestrare un'attività diversa, è necessario eseguire un nuovo processo di elaborazione dei dati. Se il valore task_type non è quello previsto, è consigliabile verificare gli input del processo di elaborazione dati per assicurarsi che siano corretti. Sono inclusi i parametri nell'API modelTraining e il file di configurazione del processo di addestramento generato dal processo di esportazione dei dati.

  • eval_metric (stringa): la metrica di valutazione deve essere utilizzata per valutare le prestazioni del modello e per selezionare il modello con le migliori prestazioni tra le esecuzioni di ottimizzazione degli iperparametri. I valori validi sono:

    • "acc": accuratezza della classificazione standard. Si tratta dell'impostazione predefinita per le attività di classificazione a etichetta singola, a meno che non vengano rilevate etichette sbilanciate durante l'elaborazione dei dati, nel qual caso l'impostazione predefinita è "F1".

    • "acc_topk": numero di volte in cui l'etichetta corretta compare tra le prime k previsioni. Puoi anche impostare il valore k passando topk come chiave aggiuntiva.

    • "F1": punteggio F1.

    • "mse": metrica dell'errore quadratico medio, per le attività di regressione.

    • "mrr": metrica della classificazione reciproca media.

    • "precision": precisione del modello, calcolata come rapporto tra veri positivi e positivi previsti: = true-positives / (true-positives + false-positives).

    • "recall": sensibilità del modello, calcolata come rapporto tra veri positivi e positivi effettivi: = true-positives / (true-positives + false-negatives).

    • "roc_auc": area sotto la curva ROC. Questa è l'impostazione predefinita per la classificazione multi-etichetta.

    Ad esempio, per modificare la metrica in F1, modifica il valore eval_metric come indicato di seguito:

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

    In alternativa, per modificare la metrica in un punteggio di accuratezza topk, dovrai modificare eval_metric come indicato di seguito:

    "eval_metric": { "metric": "acc_topk", "topk": 2 },
  • eval_frequency (oggetto): specifica con quale frequenza durante l'addestramento devono essere verificate le prestazioni del modello sul set di convalida. In base alle prestazioni di convalida, è quindi possibile avviare l'arresto anticipato e salvare il modello migliore.

    L'oggetto eval_frequency contiene due elementi, ovvero "type" e "value". Ad esempio:

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

    I valori type validi sono:

    • evaluate_every_pct: specifica la percentuale di addestramento da completare per ogni valutazione.

      Per evaluate_every_pct, il campo "value" contiene un numero a virgola mobile compreso tra zero e uno che esprime tale percentuale.

    • evaluate_every_batch: specifica il numero di batch di addestramento da completare per ogni valutazione.

      Per evaluate_every_batch, il campo "value" contiene un numero intero che esprime il numero di batch.

    • evaluate_every_epoch: specifica il numero di epoche per valutazione, dove una nuova epoca inizia a mezzanotte.

      Per evaluate_every_epoch, il campo "value" contiene un numero intero che esprime il numero di epoche.

    L'impostazione predefinita per eval_frequency è:

    "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 },
  • 1-tier-param (obbligatorio): array di iperparametri di livello 1.

    Se non si desidera ottimizzare alcun iperparametro, è possibile impostare questo parametro su un array vuoto. Questo non influisce sul numero totale di processi di addestramento avviati dal processo di ottimizzazione degli iperparametri di SageMaker. Significa solo che tutti i processi di addestramento, se ne esistono più di 1 ma meno di 10, verranno eseguiti con lo stesso set di iperparametri.

    D'altra parte, per trattare tutti gli iperparametri ottimizzabili con uguale importanza, puoi includere tutti gli iperparametri in questo array.

  • 2-tier-param (obbligatorio): array di iperparametri di livello 2.

    Questi parametri vengono ottimizzati solo se il valore di maxHPONumberOfTrainingJobs è maggiore di 10. In caso contrario, assumono i valori predefiniti.

    Se disponi di un budget di addestramento di almeno 10 processi di addestramento o se non desideri iperparametri di livello 2 per altri motivi, ma desideri ottimizzare tutti gli iperparametri ottimizzabili, puoi impostare questo parametro su un array vuoto.

  • 3-tier-param (obbligatorio): array di iperparametri di livello 3.

    Questi parametri vengono ottimizzati solo se il valore di maxHPONumberOfTrainingJobs è maggiore di 50. In caso contrario, assumono i valori predefiniti.

    Se non si desiderano iperparametri di livello 3, è possibile impostare questo parametro su un array vuoto.

  • fixed-param (obbligatorio): array di iperparametri fissi che accettano solo i relativi valori predefiniti e non variano in processi di addestramento diversi.

    Per variare tutti gli iperparametri, puoi impostare questo parametro su un array vuoto e impostare il valore per maxHPONumberOfTrainingJobs su un numero sufficientemente elevato per variare tutti i livelli o impostare tutti gli iperparametri come di livello 1.

L'oggetto JSON che rappresenta ogni iperparametro in 1-tier-param, 2-tier-param, 3-tier-param e fixed-param contiene i seguenti elementi:

  • param (stringa): nome dell'iperparametro (da non modificare).

    Vedi l'elenco dei nomi di iperparametri validi in Neptune ML.

  • type (stringa): tipo dell'iperparametro (da non modificare).

    I tipi validi sono bool, int e float.

  • default (stringa): valore predefinito per l'iperparametro.

    È possibile impostare un nuovo valore predefinito.

Gli iperparametri ottimizzabili possono contenere anche i seguenti elementi:

  • range (array): intervallo per un iperparametro ottimizzabile in modo continuo.

    Deve essere un array con due valori, ovvero il valore minimo e il valore massimo dell'intervallo ([min, max]).

  • options (array): opzioni per un iperparametro categoriale ottimizzabile.

    Questo array deve contenere tutte le opzioni da considerare:

    "options" : [value1, value2, ... valuen]
  • inc_strategy (stringa): tipo di modifica incrementale per gli intervalli di iperparametri ottimizzabili in modo continuo (da non modificare).

    I valori validi sono log, linear e power2. Si applica solo quando è impostata la chiave di intervallo.

    La modifica di questo elemento può determinare il mancato utilizzo dell'intero intervallo dell'iperparametro per l'ottimizzazione.

  • inc_val (float): quantità in base alla differiscono gli incrementi successivi per gli iperparametri ottimizzabili in modo continuo (da non modificare).

    Si applica solo quando è impostata la chiave di intervallo.

    La modifica di questo elemento può determinare il mancato utilizzo dell'intero intervallo dell'iperparametro per l'ottimizzazione.

  • node_strategy (stringa): indica che l'intervallo effettivo per questo iperparametro deve cambiare in base al numero di nodi nel grafo (da non modificare).

    I valori validi sono "perM" (per milione), "per10M" (per 10 milioni) e "per100M" (per 100 milioni).

    Invece di modificare questo valore, prova a modificare range.

  • edge_strategy (stringa): indica che l'intervallo effettivo per questo iperparametro deve cambiare in base al numero di archi nel grafo (da non modificare).

    I valori validi sono "perM" (per milione), "per10M" (per 10 milioni) e "per100M" (per 100 milioni).

    Invece di modificare questo valore, prova a modificare range.

Elenco di tutti gli iperparametri in Neptune ML

L'elenco seguente contiene tutti gli iperparametri che possono essere impostati ovunque in Neptune ML, per qualsiasi tipo di modello e attività. Poiché non sono tutti applicabili a ogni tipo di modello, è importante impostare nel file model-HPO-configuration.json solo gli iperparametri disponibili nel modello in uso.

  • batch-size: dimensioni del batch dei nodi di destinazione utilizzati in un unico passaggio in avanti. Tipo: int.

    L'impostazione di questo elemento su un valore molto elevato può causare problemi di memoria per l'addestramento sulle istanze GPU.

  • concat-node-embed: indica se ottenere o meno la rappresentazione iniziale di un nodo concatenando le relative funzionalità elaborate con incorporamenti iniziali del nodo apprendibili per aumentare l'espressività del modello. Tipo: bool.

  • dropout: probabilità di abbandono applicata ai livelli di abbandono. Tipo: float.

  • edge-num-hidden: dimensioni del livello nascosto o il numero di unità per il modulo della funzionalità arco. Usato solo quando use-edge-features è impostato su True. Tipo: float.

  • enable-early-stop: attiva/disattiva l'utilizzo della funzionalità di arresto anticipato. Tipo: bool. Default: true

    Usa questo parametro booleano per disattivare la funzionalità di arresto anticipato.

  • fanout: numero di neighbor da campionare per un nodo di destinazione durante il campionamento dei neighbor. Tipo: int.

    Questo valore è strettamente associato a num-layers e deve trovarsi sempre nello stesso livello di iperparametri. Questo perché puoi specificare un fanout per ogni potenziale livello GNN.

    Poiché questo iperparametro può causare ampie variazioni nelle prestazioni del modello, deve essere fisso o impostato come iperparametro di livello 2 o di livello 3. L'impostazione di questo elemento su un valore elevato può causare problemi di memoria per l'addestramento sulle istanze GPU.

  • gamma: valore del margine nella funzione di punteggio. Tipo: float.

    Si applica solo ai modelli di previsione dei collegamenti KGE.

  • l2norm: valore di decadimento del peso utilizzato nell'ottimizzatore che impone una penalità di normalizzazione L2 ai pesi. Tipo: bool.

  • layer-norm: indica se utilizzare la normalizzazione dei livelli per i modelli rgcn. Tipo: bool.

  • low-mem: indica se utilizzare un'implementazione a bassa memoria della funzione di passaggio dei messaggi di relazione a scapito della velocità. Tipo: bool.

  • lr: velocità di apprendimento. Tipo: float.

    Deve essere impostato come un iperparametro di primo livello.

  • neg-share: nella previsione dei collegamenti, indica se gli archi campionati positivi possono condividere campioni di archi negativi. Tipo: bool.

  • num-bases: numero di basi per la scomposizione delle basi in un modello rgcn. L'utilizzo di un valore num-bases inferiore al numero di tipi di archi nel grafo funge da regolarizzatore per il modello rgcn. Tipo: int.

  • num-epochs: numero di epoche di addestramento da eseguire. Tipo: int.

    Un'epoca è un passaggio di addestramento completo attraverso il grafo.

  • num-hidden: dimensioni del livello nascosto o numero di unità. Tipo: int.

    Questo elemento imposta anche le dimensioni dell'incorporamento iniziale per i nodi senza funzionalità.

    L'impostazione di questo elemento su un valore molto elevato senza la riduzione di batch-size può causare problemi di memoria per l'addestramento sulle istanze GPU.

  • num-layer: numero di livelli GNN nel modello. Tipo: int.

    Questo valore è strettamente associato al parametro fanout e deve essere posizionato dopo aver impostato il fanout nello stesso livello di iperparametri.

    Poiché questo iperparametro può causare ampie variazioni nelle prestazioni del modello, deve essere fisso o impostato come iperparametro di livello 2 o di livello 3.

  • num-negs: nella previsione dei collegamenti, il numero di campioni negativi per campione positivo. Tipo: int.

  • per-feat-name-embed: indica se incorporare ogni funzionalità trasformandola in modo indipendente prima di combinare le funzionalità. Tipo: bool.

    Se questo elemento è impostato su true, ogni funzionalità per nodo viene trasformata in modo indipendente in in dimensioni di dimensione fissa prima che tutte le funzionalità trasformate per il nodo vengano concatenate e ulteriormente trasformate nella dimensione num_hidden.

    Se questo elemento è impostato su false, le funzionalità vengono concatenate senza trasformazioni specifiche delle funzionalità.

  • regularization-coef: nella previsione dei collegamenti, il coefficiente di perdita di regolarizzazione. Tipo: float.

  • rel-part: indica se utilizzare la partizione di relazione per la previsione dei collegamenti KGE. Tipo: bool.

  • sparse-lr: velocità di apprendimento per gli incorporamenti di nodi apprendibili. Tipo: float.

    Gli incorporamenti iniziali dei nodi apprendibili vengono utilizzati per i nodi senza funzionalità o quando è impostato il parametro concat-node-embed. I parametri del livello di incorporamento dei nodi apprendibili sparse vengono addestrati utilizzando un ottimizzatore separato che può avere una velocità di apprendimento distinta.

  • use-class-weight: indica se applicare i pesi di classe per attività di classificazione non bilanciate. Se impostato su true, viene usato il numero di etichette per impostare un peso per ogni etichetta di classe. Tipo: bool.

  • use-edge-features: indica se utilizzare le funzionalità degli archi durante il passaggio dei messaggi. Se impostato su true, viene aggiunto un modulo di funzionalità degli archi personalizzato al livello RGCN per i tipi di archi che dispongono di funzionalità. Tipo: bool.

  • use-self-loop: indica se includere i cappi nell'addestramento di un modello rgcn. Tipo: bool.

  • window-for-early-stop: controlla il numero degli ultimi punteggi di convalida in base a cui calcolare la media per decidere se effettuare un arresto anticipato. Il valore predefinito è 3. type=int. Consulta anche Arresto anticipato del processo di addestramento dei modelli in Neptune ML. Tipo: int. Default: 3

    Per informazioni, consulta .

Personalizzazione degli iperparametri in Neptune ML

Quando si modifica il file model-HPO-configuration.json, i tipi di modifiche più comuni sono i seguenti:

  • Specificare il valore minimo e il valore massimo degli iperparametri range.

  • Impostare un iperparametro su un valore fisso spostandolo nella sezione fixed-param e impostando il relativo valore predefinito sul valore fisso che dovrà assumere.

  • Modificare la priorità di un iperparametro posizionandolo in un livello specifico, modificandone l'intervallo e assicurandosi che il valore predefinito sia impostato in modo appropriato.