Jag känner många Data Scientists — och jag hör nog till dem själv — som arbetar på maskiner med GPU, lokala eller virtuella, belägna i molnet, antingen via Jupyter Notebook eller genom någon utvecklingsmiljö för Python. Under de två år jag arbetade som expertutvecklare inom AI/ML gjorde jag just så, medan jag förberedde data på en vanlig server eller arbetsstation, och sedan körde träningen på en virtuell maskin med GPU i Azure.
Självklart har vi alla hört talas om — en speciell molnplattform för maskininlärning. Men efter att ha tagit en första titt på , får man intrycket att Azure ML kommer att ge fler problem än vad det löser. Till exempel, i det nämnda träningsexemplet startar träningen på Azure ML från Jupyter Notebook, medan själva träningsskriptet erbjuds att skapa och redigera som en textfil i en av cellerna — utan att använda autocompletion, syntaxmarkering och andra fördelar med en normal utvecklingsmiljö. Av denna anledning har vi under lång tid inte använt Azure ML på allvar i vårt arbete.
Men nyligen upptäckte jag ett sätt att börja använda Azure ML effektivt i mitt arbete! Intresserad av detaljer?

Den stora hemligheten är . Det låter dig utveckla träningsskript direkt i VS Code, med alla fördelar av miljön — och du kan till och med köra skriptet lokalt och sedan bara skicka det för träning i Azure ML-klustret med några musklick. Bekvämt, eller hur?
Samtidigt får du följande fördelar av att använda Azure ML:
- Du kan arbeta största delen av tiden lokalt på din maskin i en bekväm IDE, och använda GPU endast för att träna modellen. Resurspoolen för träning kan automatiskt anpassa sig efter den erforderliga belastningen, och genom att ställa in det minimi antal noder till 0 kan du automatiskt starta en virtuell maskin 'vid behov' när det finns träningsuppgifter.
- Kan ni lagra alla träningsresultat på ett ställe, inklusive uppnådda metrik och erhållna modeller — det finns inget behov av att själv skapa något system eller ordning för att lagra alla resultat.
- Följaktligen flera personer kan arbeta på ett projekt — de kan använda samma beräkningskluster, och alla experiment kommer att köra i kö, samtidigt som de kan se varandras resultat. Ett sådant scenario är användningen av Azure ML i undervisningen av Deep Learning, där du istället för att ge varje student en virtuell maskin med GPU kan skapa ett kluster som används centralt av alla. Dessutom kan en gemensam resultatlista med modellens noggrannhet fungera som ett bra tävlingselement.
- Med Azure ML kan du enkelt genomföra serier av experiment, till exempel för optimering av hyperparametrar — detta kan göras med några rader kod, det finns inget behov av att genomföra serier av experiment manuellt.
Jag hoppas att jag har övertygat dig att prova Azure ML! Här är hur du kan börja:
- Se till att du har installerat , samt tilläggen och
- Klona repositoriet — det innehåller viss demonstrationskod för att träna en modell för att känna igen handskrivna siffror på MNIST-datasetet.
- Öppna det klonade arkivet i Visual Studio Code.
- Fortsätt läsa!
Azure ML Arbetsyta och Azure ML Portal
Azure ML är organiserat runt konceptet arbetsyta — Workspace. I arbetsytan kan data lagras, experiment för träning kan skickas dit, och resultaten av träningen — de erhållna metoderna och modellerna — lagras där. Du kan se vad som finns inuti arbetsytan genom — och därifrån kan du utföra många operationer, från att ladda upp data till att övervaka experiment och distribuera modeller.
Du kan skapa en arbetsyta genom webbutvecklargränssnittet (se ), eller med hjälp av Azure CLI-kommandoraden ():
az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazmlDet finns också vissa beräkningsresurser (Beräkning). När du har skapat ett skript för att träna en modell kan du skicka experimentet för körning till arbetsytan och ange beräkningsmål — då kommer skriptet att packas, köras i den angivna beräkningsmiljön, och sedan kommer alla experimentresultat att sparas i arbetsytan för vidare analys och användning.
Träningsskript för MNIST
Låt oss titta på en klassisk uppgift med hjälp av MNIST-datasetet. På samma sätt kan du senare köra dina egna träningsskript.
I vårt repo finns ett skript train_local.py, som tränar en enkel linjär regressionsmodell med hjälp av SkLearn-biblioteket. Jag förstår självklart att detta inte är det bästa sättet att lösa problemet — vi använder det som exempel på det enklaste.
Skriptet laddar först ner MNIST-data från OpenML och använder sedan klassen LogisticRegression för att träna modellen och skriver sedan ut den uppnådda noggrannheten:
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('Övergripande noggrannhet:', acc)Du kan köra skriptet på din dator och få resultatet på några sekunder.
Vi kör skriptet i Azure ML
Om vi istället kör träningsskriptet via Azure ML, har vi två huvudsakliga fördelar:
- Köra träning på valfria beräkningsresurser, som vanligtvis är mer kraftfulla än den lokala datorn. Azure ML tar hand om att paketera vårt skript med alla filer från den aktuella katalogen i en docker-container, installera nödvändiga beroenden och skicka det för körning.
- Skriva resultatet till en enhetlig register inom arbetsytan i Azure ML. För att utnyttja denna möjlighet behöver vi lägga till ett par rader kod i vårt skript för att logga den resulterande noggrannheten:
from azureml.core.run import Run
...
try:
run = Run.get_submitted_run()
run.log('accuracy', acc)
except:
passDen relevanta versionen av skriptet kallas train_universal.py (det är lite mer avancerat än vad som beskrivs ovan, men inte mycket). Detta skript kan köras både lokalt och på en fjärrberäkningsresurs.
För att köra det i Azure ML från VS Code, behöver du göra följande:
Se till att Azure Extension är ansluten till din prenumeration. Välj Azure-ikonen i menyn till vänster. Om du inte är ansluten, kommer ett meddelande visas i det nedre högra hörnet (), genom att klicka på vilket du kan logga in via webbläsaren. Du kan också trycka på Ctrl-Shift-P för att öppna kommandoraden i VS Code, och skriva Azure Logga in.
Efter det, i Azure-sektionen (ikonen till vänster) hittar du avsnittet MASKINLÄRING:

Här bör du se olika grupper av objekt inom arbetsytan: beräkningsresurser, experiment, osv.
- Gå till fillistan, högerklicka på skriptet
train_universal.pyoch välj Azure ML: Kör som experiment i Azure.

- Därefter följer en serie dialogrutor i kommandofältet för VS Code: bekräfta den använda prenumerationen och Azure ML-arbetsytan samt gör ditt val Skapa nytt experiment:



Välj att skapa en ny beräkningsresurs Skapa ny beräkning:
- Beräkning definierar beräkningsresursen där träningen ska ske. Du kan välja en lokal dator eller en molnkluster AmlCompute. Jag rekommenderar att skapa en skalbar maskinkluster
STANDARD_DS3_v2, med ett minimalt antal maskiner 0 (maximalt kan vara 1 eller fler beroende på dina behov). Detta kan göras genom VS Code-gränssnittet, eller i förväg via .

- Beräkning definierar beräkningsresursen där träningen ska ske. Du kan välja en lokal dator eller en molnkluster AmlCompute. Jag rekommenderar att skapa en skalbar maskinkluster
Därefter behöver du välja konfigurationen Beräkningskonfiguration, som definierar inställningarna för den behållare som ska skapas för träningen, inklusive alla nödvändiga bibliotek. I vårt fall, eftersom vi använder Scikit Learn, väljer vi SkLearn, och bekräftar helt enkelt den föreslagna listan över bibliotek genom att trycka på Enter. Om du använder några ytterligare bibliotek måste de anges här.


Därefter öppnas ett fönster med en JSON-fil som beskriver experimentet. Du kan justera vissa inställningar här – till exempel namnet på experimentet. Efter det klicka på länken Skicka experiment rakt inom denna fil:

- Efter att experimentet framgångsrikt har skickats via VS Code, kommer du att se en länk i meddelandeområdet till höger om , där du kan följa status och resultat av experimentet.

Framöver kan du alltid hitta det under Experiment , eller i sektionen Azure Machine Learning i experimentlistan:

- Om du har gjort några ändringar i koden eller justerat inställningarna – att starta om experimentet kommer att vara mycket snabbare och enklare. Genom att högerklicka på filen ser du en ny menyalternativ Upprepa senaste körning – välj bara det, så kommer experimentet att startas omedelbart:

Resultaten från alla körningar av mätvärden kan alltid hittas på Azure ML Portal, det är inte nödvändigt att anteckna dem.
Nu vet du att det är enkelt och smärtfritt att köra experiment med Azure ML, och dessutom får du en rad trevliga fördelar.
Men du kanske har märkt nackdelar också. Till exempel, att köra skriptet tog betydligt mer tid. Naturligtvis tar det tid att paketera skriptet i en container och distribuera det på servern. Om klustret har reducerats till storleken av 0 noder – kommer det att ta ännu längre tid att starta en virtuell maskin, och allt detta blir mycket märkbart när vi experimenterar med enkla uppgifter som MNIST, som löses på några sekunder. Men i verkligheten, när träningen tar flera timmar, eller till och med dagar eller veckor, blir den extra tiden obetydlig, särskilt med tanke på den betydligt högre prestanda som en beräkningskluster kan ge.
Vad händer härnäst?
Jag hoppas att efter att ha läst denna artikel kommer du att kunna och vilja använda Azure ML i ditt arbete för att köra skript, hantera beräkningsresurser och centralt lagra resultat. Azure ML kan dock ge dig ännu fler fördelar!
Inom arbetsytan kan du lagra data, vilket skapar ett centralt förråd för alla dina uppgifter som är lätt att komma åt. Dessutom kan du köra experiment inte från Visual Studio Code, utan med hjälp av API – detta kan vara särskilt användbart om du behöver optimera hyperparametrar och behöver köra skriptet flera gånger med olika parametrar. Dessutom innehåller Azure ML en speciell teknik , som möjliggör en mer sofistikerad sökning och optimering av hyperparametrar. Jag kommer att berätta mer om dessa möjligheter i min nästa anteckning.
Nyttiga resurser
För att fördjupa dina kunskaper om Azure ML kan följande kurser på Microsoft Learn vara till hjälp:
Källa: habr.com



