Conosco molti Data Scientist — e probabilmente anche io mi ci considero — che lavorano su macchine con GPU, localmente o virtualmente, nel cloud, sia attraverso Jupyter Notebook che in qualche ambiente di sviluppo Python. Lavorando come esperto sviluppatore di AI/ML per 2 anni, ho fatto proprio così, preparando i dati su un server standard o una workstation, mentre l'addestramento veniva eseguito su una macchina virtuale con GPU in Azure.
Certo, tutti noi abbiamo sentito parlare di — una piattaforma cloud dedicata al machine learning. Tuttavia, dopo il primo sguardo a , si ha l'impressione che Azure ML crei più problemi di quanti ne risolva. Ad esempio, nell'esempio di addestramento menzionato sopra, l'addestramento su Azure ML viene avviato da Jupyter Notebook, e il relativo script di addestramento viene suggerito di crearlo e modificarlo come file di testo in una delle celle — senza utilizzare completamento automatico, evidenziazione della sintassi e altri vantaggi di un normale ambiente di sviluppo. Per questo motivo, non abbiamo utilizzato seriamente Azure ML nel nostro lavoro per molto tempo.
Recentemente ho scoperto un modo per iniziare a utilizzare efficacemente Azure ML nel mio lavoro! Vuoi sapere di più?

Il segreto principale è . Ti consente di sviluppare script di apprendimento direttamente in VS Code, sfruttando tutti i vantaggi dell'ambiente — e puoi persino eseguire lo script localmente e poi semplicemente inviarlo per l'addestramento nel cluster Azure ML con pochi clic del mouse. Comodo, vero?
In questo modo ottieni i seguenti vantaggi dall'uso di Azure ML:
- Puoi lavorare per la maggior parte del tempo localmente sul tuo computer utilizzando un IDE comodo, e usare la GPU solo per l'addestramento del modello. Il pool di risorse di addestramento può adattarsi automaticamente al carico richiesto, e impostando un numero minimo di nodi pari a 0, puoi avviare automaticamente una macchina virtuale "on demand" quando ci sono lavori di addestramento.
- Puoi conservare tutti i risultati dell'addestramento in un unico luogo, incluse le metriche raggiunte e i modelli ottenuti — non è necessario inventare un sistema o un ordine per memorizzare tutti i risultati.
- In questo modo su un progetto possono lavorare più persone — possono utilizzare lo stesso cluster di calcolo, tutti gli esperimenti verranno messi in coda e possono vedere i risultati degli esperimenti degli altri. Uno di questi scenari è l'uso di Azure ML nell'insegnamento del Deep Learning, dove invece di fornire a ciascuno studente una macchina virtuale con GPU, puoi creare un cluster che sarà utilizzato da tutti in modo centralizzato. Inoltre, una tabella dei risultati condivisa con l'accuratezza del modello può fungere da ottimo elemento competitivo.
- Con Azure ML è facile condurre serie di esperimenti, ad esempio per l'ottimizzazione degli iperparametri — questo può essere fatto con poche righe di codice, senza la necessità di eseguire serie di esperimenti manualmente.
Spero di avervi convinto a provare Azure ML! Ecco come puoi iniziare:
- Assicurati di avere installato , e anche l'estensione e
- Clona il repository — contiene del codice di esempio per addestrare un modello di riconoscimento di cifre scritte a mano sul dataset MNIST.
- Apri il repository clonato in Visual Studio Code.
- Leggi di più!
Azure ML Workspace e Azure ML Portal
Azure ML è organizzato attorno al concetto di area di lavoro — Workspace. Nell'area di lavoro possono essere archiviati i dati, si inviano esperimenti per l'addestramento e lì vengono memorizzati i risultati dell'addestramento — metriche e modelli ottenuti. Puoi vedere cos'è presente all'interno dell'area di lavoro tramite il — e da lì puoi effettuare molte operazioni, dalla caricamento dei dati al monitoraggio degli esperimenti e al deployment dei modelli.
Puoi creare un'area di lavoro tramite l'interfaccia web (vedi ), o utilizzando la riga di comando di Azure CLI ():
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazmlAlcune risorse computazionali (Compute). Creando uno script per l'addestramento del modello, puoi inviare un esperimento per l'esecuzione nell'area di lavoro e specificare il target computazionale — in questo modo, lo script verrà impacchettato, eseguito nell'ambiente computazionale desiderato e poi tutti i risultati dell'esperimento saranno salvati nell'area di lavoro per ulteriori analisi e utilizzo.
Script di addestramento per MNIST
Esaminiamo un classico problema utilizzando il set di dati MNIST. Allo stesso modo, in seguito, potrete eseguire i vostri script di apprendimento.
Nel nostro repository c'è uno script train_local.py, che allena un semplice modello di regressione lineare utilizzando la libreria SkLearn. Certamente, capisco che questa non sia la soluzione migliore per il problema — lo utilizziamo come esempio, essendo il più semplice.
Lo script prima scarica i dati MNIST da OpenML e poi utilizza la classe LogisticRegression per addestrare il modello, e quindi stampa l'accuratezza ottenuta:
mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])
shuffle_index = np.random.permutation(len(mnist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size = 0.3, random_state = 42)
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))
print('Accuratezza complessiva:', acc)Puoi eseguire lo script sul tuo computer e ricevere il risultato in pochi secondi.
Eseguiamo lo script in Azure ML
Se invece eseguiamo lo script per l'addestramento tramite Azure ML, avremo due principali vantaggi:
- Avviare l'addestramento su una risorsa computazionale arbitraria, che di solito è più potente rispetto a un computer locale. In questo caso, Azure ML si occuperà di impacchettare il nostro script con tutti i file dalla directory corrente in un contenitore Docker, installare le dipendenze necessarie e inviarlo in esecuzione.
- Registrare i risultati in un unico registro all'interno dell'area di lavoro di Azure ML. Per sfruttare questa funzionalità, dobbiamo aggiungere un paio di righe di codice al nostro script per registrare l'accuratezza risultante:
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run()
run.log('accuracy', acc)
except:
passLa versione corrispondente dello script si chiama train_universal.py (è leggermente più sofisticata di quanto descritto sopra, ma non molto). Questo script può essere eseguito sia localmente che su una risorsa di calcolo remota.
Per eseguirlo in Azure ML da VS Code, è necessario seguire questi passaggi:
Assicurati che l'estensione Azure sia collegata al tuo abbonamento. Seleziona l'icona di Azure nel menu a sinistra. Se non sei connesso, apparirà una notifica nell'angolo in basso a destra (), cliccando su cui potrai accedere tramite il browser. Puoi anche premere Ctrl-Shift-P per aprire il terminale di VS Code, e digitare Azure Sign In.
Dopo, nella sezione Azure (icona a sinistra) trova la sezione APPRENDIMENTO AUTOMATICO:

Qui dovresti vedere diversi gruppi di oggetti all'interno dell'area di lavoro: risorse computazionali, esperimenti, ecc.
- Vai alla lista dei file, fai clic destro sullo script
train_universal.pye selezionare Azure ML: Esegui come esperimento in Azure.

- Dopo seguirà una serie di dialoghi nel terminale di VS Code: conferma l'abbonamento e l'area di lavoro Azure ML che stai utilizzando, e seleziona Crea nuovo esperimento:



Scegli la creazione di una nuova risorsa computazionale Crea Nuovo Calcolo:
- Compute definisce la risorsa computazionale su cui avverrà l'apprendimento. Puoi scegliere un computer locale, oppure un cluster cloud AmlCompute. Ti consiglio di creare un cluster di macchine scalabile
STANDARD_DS3_v2, con un numero minimo di macchine 0 (e il massimo può essere 1 o più, a seconda delle tue esigenze). Questo può essere fatto attraverso l'interfaccia di VS Code, o in precedenza tramite .

- Compute definisce la risorsa computazionale su cui avverrà l'apprendimento. Puoi scegliere un computer locale, oppure un cluster cloud AmlCompute. Ti consiglio di creare un cluster di macchine scalabile
Successivamente, è necessario scegliere la configurazione Configurazione di Calcolo, che definisce i parametri del contenitore creato per l'addestramento, in particolare tutte le librerie necessarie. Nel nostro caso, poiché utilizziamo Scikit Learn, selezioniamo SkLearn, e poi confermiamo semplicemente l'elenco proposto delle librerie premendo Invio. Se stai utilizzando ulteriori librerie, è necessario specificarle qui.


Dopo di ciò, si aprirà una finestra con un file JSON che descrive l'esperimento. Qui puoi modificare alcuni parametri, ad esempio, il nome dell'esperimento. Dopodiché, fai clic sul link Submit Experiment all'interno di questo file:

- Dopo aver inviato con successo l'esperimento tramite VS Code, sulla destra nell'area delle notifiche vedrai un link a , dove potrai monitorare lo stato e i risultati dell'esperimento.

In seguito, potrai sempre trovarlo nella sezione Experiments , o nella sezione Azure Machine Learning nell'elenco degli esperimenti:

- Se successivamente hai apportato delle correzioni al codice o modificato i parametri, la nuova esecuzione dell'esperimento sarà molto più veloce e semplice. Facendo clic destro sul file, vedrai una nuova voce di menu Repeat last run — basta selezionarla e l'esperimento verrà avviato immediatamente:

I risultati delle metriche di tutti i lanci sono sempre disponibili su Azure ML Portal, non è necessario annotarli.
Ora sai che eseguire esperimenti con Azure ML è semplice e senza complicazioni, e inoltre ottieni una serie di vantaggi.
Tuttavia, potresti aver notato anche degli svantaggi. Ad esempio, l'esecuzione di uno script ha richiesto un tempo significativamente maggiore. Certo, ci vuole tempo per imballare lo script in un contenitore e distribuitarlo su un server. Se nel frattempo il cluster è stato ridotto a 0 nodi, ci vorrà ancora più tempo per avviare la macchina virtuale, e tutto ciò diventa molto evidente quando sperimentiamo con compiti semplici come MNIST, che vengono risolti in pochi secondi. Tuttavia, nella vita reale, quando l'addestramento dura ore, giorni o addirittura settimane, questo tempo aggiuntivo diventa trascurabile, soprattutto rispetto alla molto maggiore performance che può fornire un cluster di calcolo.
E ora?
Spero che dopo aver letto questo articolo sarete in grado di utilizzare Azure ML nel vostro lavoro per eseguire script, gestire risorse di calcolo e conservare centralmente i risultati. Tuttavia, Azure ML può offrirvi ancora più vantaggi!
All'interno dell'area di lavoro è possibile memorizzare i dati, creando così un repository centralizzato per tutti i vostri progetti, a cui è facile accedere. Inoltre, potete eseguire esperimenti non solo da Visual Studio Code, ma utilizzando anche le API — questo può essere particolarmente utile se avete bisogno di ottimizzare gli iperparametri e desiderate eseguire uno script più volte con parametri diversi. Inoltre, Azure ML include una tecnologia speciale , che consente di effettuare ricerche più sofisticate e ottimizzazione degli iperparametri. Parlerò di queste possibilità nel mio prossimo post.
Risorse utili
Per un approfondimento su Azure ML, potrebbero esservi utili i seguenti corsi di Microsoft Learn:
Fonte: habr.com



