Hoe je angst overwint en Azure Machine Learning gaat gebruiken

Ik ken veel datawetenschappers - en ik ben waarschijnlijk zelf een van hen - die werken aan GPU-machines, lokaal of virtueel, die zich in de cloud bevinden, hetzij via een Jupyter Notebook, hetzij via een soort Python-ontwikkelomgeving. Ik werkte 2 jaar als een deskundige AI/ML-ontwikkelaar en deed precies dit, terwijl ik gegevens voorbereidde op een gewone server of werkstation en trainingen uitvoerde op een virtuele machine met een GPU in Azure.

Natuurlijk hebben we er allemaal van gehoord Azure-machine learning — een speciaal cloudplatform voor machine learning. Echter, na een eerste blik op inleidende artikelen, lijkt het erop dat Azure ML meer problemen voor u veroorzaakt dan oplost. In de hierboven genoemde tutorial wordt training op Azure ML bijvoorbeeld gestart vanuit een Jupyter Notebook, terwijl wordt voorgesteld om het trainingsscript zelf te maken en te bewerken als een tekstbestand in een van de cellen - zonder gebruik te maken van automatische aanvulling, syntaxis markeren en andere voordelen van een normale ontwikkelomgeving. Om deze reden hebben we Azure ML lange tijd niet serieus gebruikt in ons werk.

Ik heb echter onlangs een manier ontdekt om Azure ML effectief in mijn werk te gaan gebruiken! Geïnteresseerd in de details?

Hoe je angst overwint en Azure Machine Learning gaat gebruiken

Het belangrijkste geheim is Visual Studio Code-extensie voor Azure ML. Hiermee kunt u trainingsscripts rechtstreeks in VS Code ontwikkelen, waarbij u optimaal profiteert van de omgeving - en u kunt het script zelfs lokaal uitvoeren en het vervolgens eenvoudig met een paar klikken naar training in een Azure ML-cluster sturen. Handig, toch?

Daarbij krijgt u de volgende voordelen van het gebruik van Azure ML:

  • U kunt meestal lokaal op uw machine werken in een handige IDE, en gebruik GPU alleen voor modeltraining. Tegelijkertijd kan de pool van trainingsbronnen zich automatisch aanpassen aan de vereiste belasting, en door het minimum aantal knooppunten op 0 te zetten, kunt u de virtuele machine automatisch "on demand" starten in aanwezigheid van trainingstaken.
  • bestelden bewaar alle leerresultaten op één plek, inclusief de bereikte statistieken en de resulterende modellen - het is niet nodig om een ​​soort systeem of volgorde te bedenken om alle resultaten op te slaan.
  • In dit geval Meerdere mensen kunnen aan hetzelfde project werken - ze kunnen hetzelfde rekencluster gebruiken, alle experimenten komen in een wachtrij te staan ​​en ze kunnen ook de resultaten van elkaars experimenten zien. Een van die scenario's is Azure ML gebruiken bij het onderwijzen van Deep Learningwanneer je in plaats van elke student een virtuele machine met een GPU te geven, één cluster kunt maken dat door iedereen centraal wordt gebruikt. Daarnaast kan een algemene resultatentabel met modelnauwkeurigheid dienen als een goed competitief element.
  • Met Azure ML voer je eenvoudig een serie experimenten uit voor bijvoorbeeld hyperparameter optimalisatie - dit kan worden gedaan met een paar regels code, het is niet nodig om handmatig een reeks experimenten uit te voeren.

Ik hoop dat ik je heb overtuigd om Azure ML te proberen! Hier leest u hoe u aan de slag kunt:

Azure ML Workspace en Azure ML Portal

Azure ML is rond het concept georganiseerd werkgebied — werkruimte. Gegevens kunnen in de werkruimte worden opgeslagen, experimenten worden er naartoe gestuurd voor training, trainingsresultaten worden daar ook opgeslagen - de resulterende statistieken en modellen. Je kunt zien wat zich in de werkruimte bevindt Azure ML-portal - en van daaruit kunt u vele bewerkingen uitvoeren, variërend van het laden van gegevens tot het monitoren van experimenten en het implementeren van modellen.

U kunt via de webinterface een werkruimte maken Azure-portaal (Zie. stap voor stap instructies), of met behulp van de Azure CLI-opdrachtregel (instructies):

az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml

Ook geassocieerd met de werkruimte zijn er enkele computerbronnen (Berekenen). Zodra u een script heeft gemaakt om het model te trainen, kunt u dat doen stuur experiment voor uitvoering naar de werkruimte en geef op doel berekenen - in dit geval wordt het script verpakt, uitgevoerd in de gewenste computeromgeving en vervolgens worden alle resultaten van het experiment opgeslagen in de werkruimte voor verdere analyse en gebruik.

Leerscript voor MNIST

Denk aan het klassieke probleem handgeschreven cijferherkenning met behulp van de MNIST-dataset. Evenzo kunt u in de toekomst al uw trainingsscripts uitvoeren.

Er is een script in onze repository train_local.py, waarmee we het eenvoudigste lineaire regressiemodel trainen met behulp van de SkLearn-bibliotheek. Natuurlijk begrijp ik dat dit niet de beste manier is om het probleem op te lossen - we gebruiken het als voorbeeld als de gemakkelijkste.

Het script downloadt eerst de MNIST-gegevens van OpenML en gebruikt vervolgens de klasse LogisticRegression om het model te trainen en vervolgens de resulterende nauwkeurigheid af te drukken:

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('Overall accuracy:', acc)

U kunt het script op uw computer uitvoeren en binnen een paar seconden het resultaat krijgen.

Voer het script uit in Azure ML

Als we het trainingsscript uitvoeren via Azure ML, hebben we twee belangrijke voordelen:

  • Training uitvoeren op een willekeurige computerbron, die in de regel productiever is dan de lokale computer. Tegelijkertijd zorgt Azure ML zelf voor het verpakken van ons script met alle bestanden uit de huidige map in een docker-container, het installeren van de vereiste afhankelijkheden en het verzenden voor uitvoering.
  • Schrijf resultaten naar één register in een Azure ML-werkruimte. Om van deze functie te profiteren, moeten we een paar regels code aan ons script toevoegen om de resulterende precisie vast te leggen:

from azureml.core.run import Run
...
try:    
    run = Run.get_submitted_run()
    run.log('accuracy', acc)
except:
    pass

De overeenkomstige versie van het script wordt aangeroepen train_universal.py (het is een beetje sluwer dan hierboven is geschreven, maar niet veel). Dit script kan zowel lokaal als op een externe computerbron worden uitgevoerd.

Om het vanuit VS Code in Azure ML uit te voeren, moet u het volgende doen:

  1. Zorg ervoor dat de Azure-extensie is verbonden met uw abonnement. Selecteer het Azure-pictogram in het menu aan de linkerkant. Als u niet bent verbonden, verschijnt er een melding in de rechter benedenhoek (hier is), door te klikken waarop u via de browser kunt invoeren. U kunt ook klikken Ctrl-Shift-P om de VS Code-opdrachtregel aan te roepen en typ Aanmelden bij Azure.

  2. Zoek daarna in de Azure-sectie (pictogram aan de linkerkant) de sectie MACHINE LEREN:

Hoe je angst overwint en Azure Machine Learning gaat gebruiken
Hier zou u verschillende groepen objecten in de werkruimte moeten zien: rekenbronnen, experimenten, enz.

  1. Ga naar de lijst met bestanden, klik met de rechtermuisknop op het script train_universal.py en selecteer Azure ML: Uitvoeren als experiment in Azure.

Hoe je angst overwint en Azure Machine Learning gaat gebruiken

  1. Dit wordt gevolgd door een reeks dialoogvensters in het opdrachtregelgebied van VS Code: bevestig het abonnement en de Azure ML-werkruimte die u gebruikt en selecteer Nieuw experiment maken:

Hoe je angst overwint en Azure Machine Learning gaat gebruiken
Hoe je angst overwint en Azure Machine Learning gaat gebruiken
Hoe je angst overwint en Azure Machine Learning gaat gebruiken

  1. Kies ervoor om een ​​nieuwe rekenresource te maken Nieuwe berekening maken:

    • Berekenen bepaalt de computerbron waarop training zal plaatsvinden. U kunt een lokale computer of een AmlCompute-cloudcluster kiezen. Ik raad aan om een ​​schaalbaar cluster van machines te maken STANDARD_DS3_v2, met een minimum aantal machines van 0 (en een maximum van 1 of meer, afhankelijk van uw eetlust). Dit kan worden gedaan via de VS Code-interface, of voorheen via ML-portaal.

    Hoe je angst overwint en Azure Machine Learning gaat gebruiken

  2. Vervolgens moet u een configuratie selecteren Configuratie berekenen, die de parameters definieert van de container die is gemaakt voor training, met name alle benodigde bibliotheken. In ons geval selecteren we, aangezien we Scikit Learn gebruiken SkLearnen bevestig vervolgens de voorgestelde lijst met bibliotheken door op Enter te drukken. Als u aanvullende bibliotheken gebruikt, moeten deze hier worden opgegeven.

    Hoe je angst overwint en Azure Machine Learning gaat gebruiken
    Hoe je angst overwint en Azure Machine Learning gaat gebruiken

  3. Hierdoor wordt een venster geopend met een JSON-bestand waarin het experiment wordt beschreven. Daarin kunt u enkele parameters corrigeren, bijvoorbeeld de naam van het experiment. Klik daarna op de link Experiment indienen rechts in dit bestand:

Hoe je angst overwint en Azure Machine Learning gaat gebruiken

  1. Na het succesvol indienen van een experiment via VS Code, ziet u aan de rechterkant van het systeemvak een link naar Azure ML-portal, waar u de status en resultaten van het experiment kunt volgen.

Hoe je angst overwint en Azure Machine Learning gaat gebruiken
Vervolgens kunt u deze altijd terugvinden in de rubriek Experimenten Azure ML-portal, of in de sectie Azure-machine learning in de lijst met experimenten:

Hoe je angst overwint en Azure Machine Learning gaat gebruiken

  1. Als je daarna enkele correcties in de code hebt aangebracht of de parameters hebt gewijzigd, zal het herstarten van het experiment veel sneller en gemakkelijker zijn. Door met de rechtermuisknop op een bestand te klikken, ziet u een nieuw menu-item Herhaal de laatste run - selecteer het gewoon en het experiment begint onmiddellijk:

Hoe je angst overwint en Azure Machine Learning gaat gebruiken
U kunt altijd de resultaten van metrische gegevens van alle lanceringen vinden op de Azure ML Portal, u hoeft ze niet op te schrijven.

Nu weet je dat het uitvoeren van experimenten met Azure ML eenvoudig en pijnloos is, en je krijgt er een aantal leuke voordelen bij.

Maar je ziet ook de nadelen. Het duurde bijvoorbeeld aanzienlijk langer om het script uit te voeren. Natuurlijk kost het tijd om het script in een container te verpakken en op de server te implementeren. Als tegelijkertijd het cluster wordt teruggebracht tot een grootte van 0 knooppunten, zal het nog meer tijd kosten om de virtuele machine te starten, en dit is allemaal goed merkbaar wanneer we experimenteren met eenvoudige taken zoals MNIST, die in een paar seconden worden opgelost . In het echte leven echter, wanneer de training enkele uren of zelfs dagen of weken duurt, wordt deze extra tijd onbeduidend, vooral tegen de achtergrond van de veel hogere prestaties die een computercluster kan bieden.

Wat is het volgende?

Ik hoop dat u na het lezen van dit artikel Azure ML in uw werk kunt en zult gebruiken om scripts uit te voeren, computerresources te beheren en resultaten centraal op te slaan. Azure ML kan u echter nog meer voordelen bieden!

Binnen de werkruimte kunt u gegevens opslaan, waardoor u een gecentraliseerde opslagplaats voor al uw taken creëert, die gemakkelijk toegankelijk is. Bovendien kunt u experimenten uitvoeren, niet vanuit Visual Studio Code, maar met behulp van de API - dit kan vooral handig zijn als u hyperparameteroptimalisatie moet uitvoeren en het script vele malen met verschillende parameters moet uitvoeren. Bovendien is er speciale technologie ingebouwd in Azure ML Hyperdrive, waarmee u lastiger kunt zoeken en hyperparameters kunt optimaliseren. In mijn volgende post zal ik het hebben over deze mogelijkheden.

Handige hulpmiddelen

Voor een meer gedetailleerd begrip van Azure ML kunnen de volgende Microsoft Learn-cursussen nuttig zijn:

Bron: www.habr.com

Voeg een reactie