Jak pokonać strach i zacząć korzystać z Azure Machine Learning

Znam wielu Data Scientistów — być może sam do nich należę — którzy pracują na maszynach z GPU, lokalnych lub wirtualnych, zlokalizowanych w chmurze, czy to przez Jupyter Notebook, czy przez jakieś środowisko rozwoju Python. Pracując przez 2 lata jako ekspert w dziedzinie AI/ML, robiłem dokładnie tak, przygotowując dane na zwykłym serwerze lub stacji roboczej, a uruchamiając naukę na wirtualnej maszynie z GPU w Azure.

Oczywiście, wszyscy słyszeliśmy o Azure Machine Learning — specjalnej platformie chmurowej do uczenia maszynowego. Jednak już po pierwszym spojrzeniu na wprowadzeniowe artykuły, odnosi się wrażenie, że Azure ML przyniesie więcej problemów, niż rozwiąże. Na przykład, we wspomnianym wcześniej przypadku uczenie na Azure ML uruchamiane jest z Jupyter Notebook, przy czym sam skrypt uczący jest proponowany do tworzenia i edytowania jako plik tekstowy w jednej z komórek — nie wykorzystując autouzupełniania, podświetlania składni ani innych zalet normalnego środowiska deweloperskiego. Z tego powodu przez długi czas nie korzystaliśmy poważnie z Azure ML w naszej pracy.

Jednak niedawno odkryłem sposób, jak zacząć efektywnie korzystać z Azure ML w mojej pracy! Interesują cię szczegóły?

Jak pokonać strach i zacząć korzystać z Azure Machine Learning

Głównym sekretem jest rozszerzenie Visual Studio Code dla Azure ML. Pozwala ono na rozwijanie skryptów uczących bezpośrednio w VS Code, korzystając ze wszystkich zalet środowiska — przy tym możesz nawet uruchomić skrypt lokalnie, a następnie po prostu przesłać go do nauki w klastrze Azure ML kilkoma kliknięciami. Wygodne, prawda?

Dzięki temu uzyskujesz następujące korzyści z korzystania z Azure ML:

  • Można pracować przez większą część czasu lokalnie na swoim komputerze w wygodnym IDE, a używać GPU tylko do nauki modelu. W tym przypadku pula zasobów uczących może automatycznie dostosować się do wymaganej obciążenia, a ustawiając minimalną liczbę węzłów na 0, możesz automatycznie uruchamiać wirtualną maszynę "na żądanie" w przypadku dostępnych zadań szkoleniowych.
  • Możesz przechowywać wszystkie wyniki nauki w jednym miejscu, w tym osiągnięte metryki i uzyskane modele — nie ma potrzeby samodzielnego wymyślania jakiegoś systemu lub porządku do przechowywania wszystkich wyników.
  • W tym przypadku nad jednym projektem mogą pracować kilka osób — mogą używać tego samego klastra obliczeniowego, wszystkie eksperymenty będą przy tym kolejkowane, a także będą mogli widzieć wyniki eksperymentów innych. Jeden z takich scenariuszy to wykorzystanie Azure ML w nauczaniu Deep Learning, kiedy zamiast dawać każdemu studentowi maszynę wirtualną z GPU, możesz stworzyć jeden klaster, który będzie używany przez wszystkich w sposób scentralizowany. Co więcej, wspólna tabela wyników z dokładnością modelu może służyć jako dobry element rywalizacji.
  • Za pomocą Azure ML można łatwo przeprowadzać serie eksperymentów, na przykład w celu optymalizacji hiperparametrów — można to zrobić w kilku linijkach kodu, bez konieczności przeprowadzania serii eksperymentów ręcznie.

Mam nadzieję, że przekonałem cię do wypróbowania Azure ML! Oto jak można zacząć:

Azure ML Workspace i Azure ML Portal

Azure ML zorganizowany jest wokół koncepcji workspace — Workspace. W przestrzeni roboczej można przechowywać dane, wysyłać eksperymenty do nauki, tam również przechowywane są wyniki uczenia — uzyskane metryki i modele. Można zobaczyć, co znajduje się w przestrzeni roboczej, korzystając z portalu Azure ML — i stamtąd można wykonywać wiele operacji, zaczynając od ładowania danych, aż po monitorowanie eksperymentów i wdrażanie modeli.

Możesz stworzyć workspace przez interfejs webowy Azure Portal (patrz. instrukcje krok po kroku), lub używając wiersza poleceń Azure CLI (instrukcją):

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

Z workspace związane są także pewne zasoby obliczeniowe (Obliczenia). Tworząc skrypt do uczenia modelu, możesz wysłać eksperyment do wykonania w workspace i określić compute target — przy tym skrypt zostanie spakowany, uruchomiony w odpowiednim środowisku obliczeniowym, a następnie wszystkie wyniki eksperymentu zostaną zapisane w workspace do dalszej analizy i wykorzystania.

Skrypt treningowy dla MNIST

Rozważmy klasyczne zadanie rozpoznawania ręcznie pisanych cyfr z wykorzystaniem zbioru danych MNIST. Podobnie w przyszłości będziesz mógł realizować dowolne swoje skrypty szkoleniowe.

W naszym repozytorium znajduje się skrypt train_local.py, który uczy najprostszy model regresji liniowej z wykorzystaniem biblioteki SkLearn. Oczywiście rozumiem, że to nie jest najlepszy sposób na rozwiązanie zadania — używamy go jako przykład najprostszego.

Skrypt najpierw pobiera dane MNIST z OpenML, a następnie wykorzystuje klasę LogisticRegression do nauki modelu, a następnie drukuje uzyskaną dokładność:

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

Możesz uruchomić skrypt na swoim komputerze i po kilku sekundach uzyskasz wynik.

Uruchamiamy skrypt w Azure ML

Jeśli będziemy uruchamiać skrypt do nauki przez Azure ML, będziemy mieć dwie główne zalety:

  • Uruchomienie nauki na dowolnym zasobie obliczeniowym, który zazwyczaj jest bardziej wydajny niż lokalny komputer. Przy tym Azure ML sam zadba o to, aby spakować nasz skrypt ze wszystkimi plikami z bieżącego katalogu w kontenerze docker, zainstalować wymagane zależności i wysłać go do wykonania.
  • Rejestrowanie wyników w jednolitym rejestrze wewnątrz obszaru roboczego Azure ML. Aby skorzystać z tej możliwości, musimy dodać kilka linijek kodu do naszego skryptu, aby zarejestrować uzyskaną dokładność:

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

Odpowiednia wersja skryptu nazywa się train_universal.py (jest nieco bardziej skomplikowana niż powyżej, ale nieznacznie). Ten skrypt można uruchamiać zarówno lokalnie, jak i na zdalnym zasobie obliczeniowym.

Aby uruchomić go w Azure ML z VS Code, należy wykonać następujące kroki:

  1. Upewnij się, że rozszerzenie Azure jest połączone z Twoją subskrypcją. Wybierz ikonę Azure w menu po lewej stronie. Jeśli nie jesteś połączony, w prawym dolnym rogu pojawi się powiadomienie (coś takiego), klikając na które będziesz mógł zalogować się przez przeglądarkę. Możesz także nacisnąć Ctrl-Shift-P aby wywołać wiersz poleceń VS Code, a następnie wpisać Azure Sign In.

  2. Po tym w sekcji Azure (ikona po lewej) znajdź sekcję MACHINE LEARNING:

Jak pokonać strach i zacząć korzystać z Azure Machine Learning
Tutaj powinieneś zobaczyć różne grupy obiektów w obszarze roboczym: zasoby obliczeniowe, eksperymenty itp.

  1. Przejdź do listy plików, kliknij prawym przyciskiem myszy na skrypcie train_universal.py i wybierz Azure ML: Uruchom jako eksperyment w Azure.

Jak pokonać strach i zacząć korzystać z Azure Machine Learning

  1. Następnie pojawi się seria dialogów w obszarze poleceń VS Code: potwierdź używaną subskrypcję i obszar roboczy Azure ML oraz wybierz Utwórz nowy eksperyment:

Jak pokonać strach i zacząć korzystać z Azure Machine Learning
Jak pokonać strach i zacząć korzystać z Azure Machine Learning
Jak pokonać strach i zacząć korzystać z Azure Machine Learning

  1. Wybierz utworzenie nowego zasobu obliczeniowego Utwórz nowe obliczenia:

    • Obliczenia określa zasób obliczeniowy, na którym będzie przeprowadzane szkolenie. Możesz wybrać lokalny komputer lub chmurowy klaster AmlCompute. Polecam stworzyć skalowalny klaster maszyn STANDARD_DS3_v2, z minimalną liczbą maszyn 0 (a maksymalna może być 1 lub więcej, w zależności od Twoich potrzeb). Można to zrobić przez interfejs VS Code lub wcześniej przez ML Portal.

    Jak pokonać strach i zacząć korzystać z Azure Machine Learning

  2. Kolejnym krokiem jest wybór konfiguracji Konfiguracja obliczeń, która określa parametry kontenera tworzonego do szkolenia, w tym wszystkie niezbędne biblioteki. W naszym przypadku, ponieważ używamy Scikit Learn, wybieramy SkLearn, a następnie po prostu potwierdzamy proponowaną listę bibliotek wciskając Enter. Jeśli używasz dodatkowych bibliotek - musisz je tutaj wskazać.

    Jak pokonać strach i zacząć korzystać z Azure Machine Learning
    Jak pokonać strach i zacząć korzystać z Azure Machine Learning

  3. Następnie otworzy się okno z plikiem JSON opisującym eksperyment. Można w nim poprawić niektóre parametry - na przykład nazwę eksperymentu. Następnie kliknij link Zatwierdź eksperyment bezpośrednio w tym pliku:

Jak pokonać strach i zacząć korzystać z Azure Machine Learning

  1. Po pomyślnym złożeniu eksperymentu przez VS Code, po prawej stronie w obszarze powiadomień zobaczysz link do Azure ML Portal, gdzie możesz śledzić status i wyniki eksperymentu.

Jak pokonać strach i zacząć korzystać z Azure Machine Learning
W przyszłości zawsze będziesz mógł go znaleźć w sekcji Eksperymenty Azure ML Portal, lub w sekcji Azure Machine Learning na liście eksperymentów:

Jak pokonać strach i zacząć korzystać z Azure Machine Learning

  1. Jeśli po tym wprowadziłeś jakieś poprawki w kodzie lub zmieniłeś parametry - ponowne uruchomienie eksperymentu będzie znacznie szybsze i łatwiejsze. Klikając prawym przyciskiem myszy na pliku, zobaczysz nową pozycję w menu Powtórz ostatnie uruchomienie — wystarczy go wybrać, a eksperyment zostanie natychmiast uruchomiony:

Jak pokonać strach i zacząć korzystać z Azure Machine Learning
Wyniki metryk ze wszystkich uruchomień zawsze możesz znaleźć na Azure ML Portal, nie ma potrzeby ich zapisywania.

Teraz wiesz, że uruchamianie eksperymentów za pomocą Azure ML jest proste i bezproblemowe, a przy tym zyskujesz szereg korzystnych funkcji.

Jednak mogliście również zauważyć pewne niedobory. Na przykład, uruchomienie skryptu wymagało znacznie więcej czasu. Oczywiście, spakowanie skryptu w kontener i wdrożenie go na serwerze wymaga czasu. Gdy klaster zostało ograniczone do rozmiaru 0 węzłów — uruchomienie wirtualnej maszyny zajmie jeszcze więcej czasu, a to wszystko staje się bardzo zauważalne, gdy eksperymentujemy na prostych zadaniach, takich jak MNIST, które można rozwiązać w kilka sekund. Jednak w prawdziwym życiu, gdy uczenie trwa kilka godzin, dni lub tygodni, ten dodatkowy czas staje się nieistotny, zwłaszcza w obliczu znacznie wyższej wydajności, którą może zapewnić klaster obliczeniowy.

Co dalej?

Mam nadzieję, że po przeczytaniu tego artykułu będziecie mogli i zechcecie korzystać z Azure ML w swojej pracy do uruchamiania skryptów, zarządzania zasobami obliczeniowymi i centralnego przechowywania wyników. Jednak Azure ML może zapewnić Wam jeszcze więcej korzyści!

W obrębie obszaru roboczego można przechowywać dane, tworząc w ten sposób centralne repozytorium dla wszystkich swoich zadań, do którego łatwo się odwołać. Ponadto możesz uruchamiać eksperymenty nie z Visual Studio Code, ale za pomocą API — to może być szczególnie przydatne, gdy potrzebujesz zoptymalizować hiperpokrypty i uruchomić skrypt wiele razy z różnymi parametrami. Co więcej, w Azure ML wbudowana jest specjalna technologia Hyperdrive, która pozwala na bardziej wyrafinowane poszukiwanie i optymalizację hiperpokrypty. O tych możliwościach opowiem w swoim następnym artykule.

Przydatne zasoby

Aby dokładniej poznać Azure ML, mogą Ci się przydać następujące kursy Microsoft Learn:

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster