Conosco molti Data Scientist — e probabilmente mi considero uno di loro — che lavorano su macchine con GPU, locali o virtuali, ospitate nel cloud, sia tramite Jupyter Notebook che tramite qualche ambiente di sviluppo Python. Lavorando per 2 anni come esperto sviluppatore in AI/ML, ho fatto proprio così, preparando i dati su un server normale o una workstation e avviando l'addestramento su una VM con GPU in Azure.
Certo, tutti noi abbiamo sentito parlare di — una piattaforma cloud specializzata per l'apprendimento automatico. Tuttavia, dopo un primo sguardo a , si ha l'impressione che Azure ML ti creerà più problemi di quanti ne risolverà. Ad esempio, nell'esempio di addestramento menzionato sopra, l'addestramento su Azure ML viene avviato da Jupyter Notebook, mentre lo script di addestramento stesso è proposto per essere creato e modificato come file di testo in una delle celle — senza utilizzare l'autocompletamento, l'evidenziazione della sintassi e altri vantaggi di un normale ambiente di sviluppo. Per questo motivo, per lungo tempo non abbiamo seriamente utilizzato Azure ML nel nostro lavoro.
Tuttavia, recentemente ho scoperto un modo per iniziare a utilizzare Azure ML in modo efficace nel mio lavoro! Ti interessa sapere i dettagli?

Il segreto principale è . Essa ti consente di sviluppare script di addestramento direttamente in VS Code, sfruttando tutti i vantaggi dell'ambiente — potendo persino eseguire lo script localmente e poi semplicemente inviarlo per l'addestramento nel cluster Azure ML con un paio di clic. Comodo, vero?
In questo contesto, ottieni i seguenti vantaggi dall'uso di Azure ML:
- Puoi lavorare per la maggior parte del tempo localmente sulla tua macchina in un IDE comodo, e utilizzare la GPU solo per addestrare il modello. Inoltre, il pool delle risorse di addestramento può adattarsi automaticamente al carico richiesto, e impostando il numero minimo di nodi a 0, potrai avviare automaticamente la VM "su richiesta" in presenza di attività di addestramento.
- Potete memorizzare tutti i risultati dell'addestramento in un unico posto, comprese le metriche ottenute e i modelli generati — non è necessario inventarsi un sistema o un ordine per memorizzare tutti i risultati.
- In questo su un progetto possono lavorare più persone — possono utilizzare lo stesso cluster informatico, tutti gli esperimenti verranno messi in coda e potranno anche vedere i risultati degli esperimenti degli altri. Uno di questi scenari è l'uso di Azure ML nell'insegnamento del Deep Learning, quando invece di fornire a ciascun studente una macchina virtuale con GPU, puoi creare un unico cluster che sarà utilizzato centralmente da tutti. Inoltre, una tabella dei risultati complessivi con la precisione del modello può fungere da buon elemento di competizione.
- Con Azure ML è facile eseguire serie di esperimenti, ad esempio per l'ottimizzazione degli iperparametri — questo può essere fatto con poche righe di codice, non è necessario eseguire serie di esperimenti manualmente.
Spero di averti convinto a provare Azure ML! Ecco come puoi iniziare:
- Assicurati di avere installato , oltre alle estensioni e
- Clona il repository — contiene alcuni codici dimostrativi per addestrare un modello di riconoscimento di cifre scritte a mano sul dataset MNIST.
- Apri il repository clonato in Visual Studio Code.
- Continua a leggere!
Workspace Azure ML e Portal Azure ML
Azure ML è organizzato attorno al concetto di workspace — Workspace. Nello workspace possono essere memorizzati dati, si inviano esperimenti per l'addestramento e lì sono memorizzati anche i risultati dell'addestramento: metriche e modelli ottenuti. Puoi vedere cosa c'è all'interno dello workspace tramite — e da lì puoi eseguire molte operazioni, dall'importazione dei dati al monitoraggio degli esperimenti e al dispiegamento dei modelli.
Puoi creare uno workspace tramite l'interfaccia web (vedi ), oppure utilizzando il comando della linea di comando Azure CLI ():
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazmlLo workspace è anche associato a alcune risorse di calcolo (Calcolo). Una volta creato uno script per addestrare un modello, puoi inviare l'esperimento per l'esecuzione allo workspace, specificando compute target — in questo modo lo script sarà impacchettato, eseguito nell'ambiente di calcolo necessario e successivamente tutti i risultati dell'esperimento saranno salvati nello workspace per ulteriori analisi e utilizzo.
Script di addestramento per MNIST
Consideriamo il classico problema utilizzando il set di dati MNIST. Analogamente, in seguito sarete in grado di eseguire i vostri script di formazione.
Nel nostro repository c'è uno script train_local.py, che addestra un semplice modello di regressione lineare utilizzando la libreria SkLearn. Certo, capisco che non sia il modo migliore per risolvere il problema — lo usiamo come esempio, essendo il più semplice.
Lo script scarica prima i dati MNIST da OpenML e poi utilizza la classe LogisticRegression per addestrare il modello e poi stampa la precisione ottenuta:
mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])
shuffle_index = np.random.permutation(len(mist['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('Precisione complessiva:', acc)Potete eseguire lo script sul vostro computer e ottenere il risultato in qualche secondo.
Eseguiamo lo script in Azure ML
Se invece eseguiamo lo script di addestramento tramite Azure ML, avremo due principali vantaggi:
- Esecuzione dell'addestramento su una risorsa computazionale arbitraria, che di solito è più potente del computer locale. Azure ML si occuperà di impacchettare il nostro script con tutti i file dalla directory corrente in un contenitore docker, installare le dipendenze richieste e inviarlo per l'esecuzione.
- Registrazione dei risultati in un unico registro all'interno del workspace di Azure ML. Per sfruttare questa opportunità, dobbiamo aggiungere un paio di righe di codice al nostro script per registrare la precisione 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ù complessa di quanto scritto sopra, ma non di molto). Questo script può essere eseguito sia localmente che su una risorsa computazionale remota.
Per eseguirlo in Azure ML da VS Code, è necessario fare quanto segue:
Assicurati che l'estensione di Azure sia connessa 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 di essa potrai accedere tramite il browser. Puoi anche premere Ctrl-Shift-P per aprire il prompt dei comandi di VS Code e digitare Accesso a Azure.
Dopo di che, nella sezione Azure (icona a sinistra) trova la sezione MACHINE LEARNING:

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

- Dopo di ciò seguirà una serie di dialoghi nell'area dei comandi di VS Code: conferma l'abbonamento e l'area di lavoro di Azure ML utilizzati, e seleziona Crea nuovo esperimento:



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

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


Dopo ciò si aprirà una finestra con un file JSON che descrive l'esperimento. È possibile modificare alcuni parametri, ad esempio il nome dell'esperimento. Dopo, fai clic sul link Invia Esperimento proprio 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.

Successivamente, potrai sempre trovarlo nella sezione Esperimenti , o nella sezione Azure Machine Learning nell'elenco degli esperimenti:

- Se dopo hai apportato modifiche al codice o hai cambiato parametri, la ripetizione dell'esperimento sarà molto più veloce e semplice. Facendo clic con il tasto destro sul file, vedrai un nuovo elemento di menu Ripeti ultima esecuzione — scegli semplicemente questo, e l'esperimento verrà avviato immediatamente:

I risultati delle metriche di tutte le esecuzioni puoi sempre trovarli su Azure ML Portal, non è necessario registrarli.
Ora sai che eseguire esperimenti utilizzando Azure ML è semplice e indolore, e in più ottieni una serie di vantaggi.
Ma avete potuto notare anche degli svantaggi. Ad esempio, per avviare lo script ci è voluto significativamente più tempo. Certo, ci vuole tempo per imballare lo script in un contenitore e distribuirlo sul server. Se nel frattempo il cluster è stato ridotto a un dimensione di 0 nodi, ci vorrà ancora più tempo per avviare la macchina virtuale, ed è tutto molto evidente quando sperimentiamo con compiti semplici come MNIST, che si risolvono in pochi secondi. Tuttavia, nella vita reale, quando l'addestramento dura diverse ore, giorni o addirittura settimane, questo tempo extra diventa trascurabile, soprattutto rispetto alla prestazione significativamente più alta che può offrire un cluster di calcolo.
Cosa succede dopo?
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 memorizzare centralmente i risultati. Tuttavia, Azure ML può offrirvi ancora più vantaggi!
All'interno dello spazio di lavoro è possibile archiviare i dati, creando così un archivio centralizzato per tutti i propri progetti, al quale è facile accedere. Inoltre, è possibile avviare esperimenti non da Visual Studio Code, ma utilizzando l'API: questo può essere particolarmente utile se è necessario eseguire un'ottimizzazione degli iperparametri e si deve eseguire lo script più volte con parametri diversi. Inoltre, Azure ML ha integrato una tecnologia speciale , che consente di effettuare ricerche e ottimizzazioni degli iperparametri più sofisticate. Parlerò di queste possibilità nel mio prossimo articolo.
Risorse utili
Per uno studio più approfondito di Azure ML, potrebbero esservi utili i seguenti corsi di Microsoft Learn:
Fonte: habr.com



