Sviluppo di modelli personalizzati 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à.

Sviluppo di modelli personalizzati in Neptune ML

Un punto di partenza valido per lo sviluppo di modelli personalizzati è seguire gli esempi del kit di strumenti per Neptune ML per strutturare e scrivere il modulo di addestramento. Il kit di strumenti per Neptune ML implementa anche componenti modularizzati del modello ML a grafo nel modelzoo che puoi combinare e usare per creare un modello personalizzato.

Inoltre, il kit di strumenti offre funzioni di utilità che consentono di generare gli artefatti necessari durante l'addestramento e la trasformazione dei modelli. Puoi importare questo pacchetto Python nella tua implementazione personalizzata. Tutte le funzioni o i moduli forniti nel kit di strumenti sono disponibili anche nell'ambiente di addestramento Neptune ML.

Se il tuo modulo Python contiene dipendenze esterne aggiuntive, puoi includere queste dipendenze aggiuntive creando un file requirements.txt nella directory del modulo. I pacchetti elencati nel file requirements.txt verranno quindi installati prima dell'esecuzione dello script di addestramento.

Come minimo, il modulo Python che implementa il modello personalizzato deve contenere quanto segue:

  • Un punto di ingresso dello script di addestramento

  • Un punto di ingresso dello script di trasformazione

  • Un file model-hpo-configuration.json

Sviluppo di script di addestramento dei modelli personalizzati in Neptune ML

Lo script di addestramento del modello personalizzato deve essere uno script Python eseguibile come l'esempio train.py del kit di strumenti per Neptune ML. Deve accettare nomi e valori di iperparametri come argomenti della riga di comando. Durante l'addestramento del modello, i nomi degli iperparametri vengono ottenuti dal file model-hpo-configuration.json. I valori degli iperparametri rientrano nell'intervallo di iperparametri validi se l'iperparametro è ottimizzabile oppure assumono il valore di iperparametro predefinito se non è ottimizzabile.

Lo script di addestramento viene eseguito su un'istanza di addestramento SageMaker utilizzando una sintassi come questa:

python3 (script entry point) --(1st parameter) (1st value) --(2nd parameter) (2nd value) (...)

Per tutte le attività, Neptune ML AutoTrainer invia numerosi parametri obbligatori allo script di addestramento oltre agli iperparametri specificati e lo script deve poter gestire questi parametri aggiuntivi per funzionare correttamente.

Questi parametri aggiuntivi obbligatori variano leggermente in base all'attività:

Per la classificazione o la regressione dei nodi
  • task: tipo di attività utilizzato internamente da Neptune ML. Per la classificazione dei nodi è node_class e per la regressione dei nodi è node_regression.

  • model: nome del modello utilizzato internamente da Neptune ML, che in questo caso è custom.

  • name: nome dell'attività utilizzata internamente da Neptune ML, che in questo caso è node_class-custom per la classificazione dei nodi e node_regression-custom per la regressione dei nodi.

  • target_ntype: nome del tipo di nodo per la classificazione o la regressione.

  • property: nome della proprietà del nodo per la classificazione o la regressione.

Per la previsione dei collegamenti
  • task: tipo di attività utilizzato internamente da Neptune ML. Per la previsione dei collegamenti è link_predict.

  • model: nome del modello utilizzato internamente da Neptune ML, che in questo caso è custom.

  • name: nome dell'attività utilizzata internamente da Neptune ML, che in questo caso è link_predict-custom.

Per la classificazione o la regressione degli archi
  • task: tipo di attività utilizzato internamente da Neptune ML. Per la classificazione degli archi è edge_class e per la regressione degli archi è edge_regression.

  • model: nome del modello utilizzato internamente da Neptune ML, che in questo caso è custom.

  • name: nome dell'attività utilizzata internamente da Neptune ML, che in questo caso è edge_class-custom per la classificazione degli archi e edge_regression-custom per la regressione degli archi.

  • target_etype: nome del tipo di arco per la classificazione o la regressione.

  • property: nome della proprietà dell'arco per la classificazione o la regressione.

Lo script deve salvare i parametri del modello e tutti gli altri artefatti necessari al termine dell'addestramento.

È possibile utilizzare le funzioni di utilità del kit di strumenti per Neptune ML per determinare la posizione dei dati del grafo elaborati, la posizione in cui devono essere salvati i parametri del modello e quali dispositivi GPU sono disponibili sull'istanza di addestramento. Per esempi di utilizzo di queste funzioni di utilità, consulta lo script di addestramento di esempio train.py.

Sviluppo di script di trasformazione dei modelli personalizzati in Neptune ML

Uno script di trasformazione consente di sfruttare il flusso di lavoro incrementale di Neptune ML per l'inferenza del modello su grafi in evoluzione senza riaddestrare il modello. Anche se tutti gli artefatti necessari per l'implementazione del modello vengono generati dallo script di addestramento, è comunque necessario fornire uno script di trasformazione se si desidera generare modelli aggiornati senza riaddestrare il modello.

Nota

L'inferenza induttiva in tempo reale non è attualmente supportata per i modelli personalizzati.

Lo script di trasformazione del modello personalizzato deve essere uno script Python eseguibile come lo script di esempio transform.py del kit di strumenti per Neptune ML. Poiché questo script viene richiamato durante l'addestramento del modello senza argomenti della riga di comando, tutti gli argomenti della riga di comando che lo script accetta devono avere valori predefiniti.

Lo script viene eseguito su un'istanza di addestramento SageMaker con una sintassi come questa:

python3 (your transform script entry point)

Lo script di trasformazione necessita di numerose informazioni, ad esempio:

  • Posizione dei dati del grafo elaborati.

  • Posizione in cui vengono salvati i parametri del modello e in cui devono essere salvati i nuovi artefatti del modello.

  • Dispositivi disponibili sull'istanza.

  • Iperparametri che hanno generato il modello migliore.

Questi input vengono ottenuti utilizzando le funzioni di utilità Neptune ML che lo script può chiamare. Consulta lo script transform.py di esempio del kit di strumenti per esempi su come procedere.

Lo script deve salvare gli incorporamenti dei nodi, le mappature degli ID dei nodi e gli eventuali altri artefatti necessari per l'implementazione del modello per ogni attività. Consulta la documentazione degli artefatti del modello per ulteriori informazioni sugli artefatti del modello necessari per le diverse attività di Neptune ML.

File model-hpo-configuration.json personalizzato in Neptune ML

Il file model-hpo-configuration.json definisce gli iperparametri per il modello personalizzato. È nello stesso formato del file model-hpo-configuration.json usato con i modelli predefiniti di Neptune ML e ha la precedenza sulla versione generata automaticamente da Neptune ML e caricata nella posizione dei dati elaborati.

Quando aggiungi un nuovo iperparametro al modello, devi anche aggiungere una voce per l'iperparametro in questo file in modo che l'iperparametro venga passato allo script di addestramento.

È necessario fornire un intervallo per l'iperparametro se vuoi che sia ottimizzabile e devi impostarlo come parametro tier-1, tier-2 o tier-3. L'iperparametro verrà ottimizzato se il numero totale di processi di addestramento configurati consente di ottimizzare gli iperparametri nel relativo livello. Per un parametro non ottimizzabile, è necessario fornire un valore predefinito e aggiungere l'iperparametro alla sezione fixed-param del file. Per un esempio di come eseguire questa operazione, consulta il file model-hpo-configuration.json di esempio del kit di strumenti.

È inoltre necessario fornire la definizione della metrica che il processo di ottimizzazione degli iperparametri SageMaker userà per valutare i modelli candidati addestrati. A tale scopo, aggiungi un oggetto JSON eval_metric al file model-hpo-configuration.json in questo modo:

"eval_metric": { "tuning_objective": { "MetricName": "(metric_name)", "Type": "Maximize" }, "metric_definitions": [ { "Name": "(metric_name)", "Regex": "(metric regular expression)" } ] },

L'array metric_definitions nell'oggetto eval_metric elenca gli oggetti definizione della metrica per ogni metrica che SageMaker dovrà estrarre dall'istanza di addestramento. Ogni oggetto definizione della metrica ha una chiave Name che consente di specificare un nome per la metrica, ad esempio "accuratezza", "F1" e così via. La chiave Regex permette di fornire una stringa di espressione regolare che corrisponde al modo in cui la metrica specifica viene stampata nei log di addestramento. Per informazioni dettagliate sulla definizione delle metriche, consulta la pagina Ottimizzazione degli iperparametri SageMaker.

L'oggetto tuning_objective in eval_metric consente quindi di specificare quale metrica tra quelle in metric_definitions dovrà essere usata come metrica di valutazione che funge da metrica obiettivo per l'ottimizzazione degli iperparametri. Il valore di MetricName deve corrispondere al valore di Name a in una delle definizioni in metric_definitions. Il valore di Type deve essere "Maximize" o "Minimize" a seconda che la metrica debba essere interpretata come maggiore è migliore (ad esempio "accuratezza") o minore è migliore (ad esempio "errore quadratico medio").

Gli errori in questa sezione del file model-hpo-configuration.json possono causare errori nel processo dell'API di addestramento dei modelli Neptune ML, perché il processo di ottimizzazione degli iperparametri SageMaker non sarà in grado di selezionare il modello migliore.

Test locale dell'implementazione del modello personalizzato in Neptune ML

Puoi usare l'ambiente Conda del kit di strumenti per Neptune ML per eseguire il codice in locale per il test e la convalida del modello. Se stai sviluppando in un'istanza notebook Neptune, l'ambiente Conda sarà preinstallato nell'istanza notebook Neptune. Se stai sviluppando in un'istanza diversa, devi seguire le istruzioni di configurazione per l'ambiente locale nel kit di strumenti per Neptune ML.

L'ambiente Conda riproduce accuratamente l'ambiente in cui verrà eseguito il modello quando chiami l'API di addestramento dei modelli. Tutti gli script di addestramento e gli script di trasformazione di esempio consentono di passare un flag --local della riga di comando per eseguire gli script in un ambiente locale per facilitare il debug. Si tratta di una procedura valida durante lo sviluppo di un modello personalizzato perché consente di testare l'implementazione del modello in modo interattivo e iterativo. Durante l'addestramento del modello nell'ambiente di addestramento di produzione Neptune ML, questo parametro viene omesso.