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

Znam wielu naukowców zajmujących się danymi – i prawdopodobnie sam jestem jednym z nich – którzy pracują na maszynach GPU, lokalnych lub wirtualnych, zlokalizowanych w chmurze, za pośrednictwem Jupyter Notebook lub jakiegoś środowiska programistycznego Pythona. Pracując przez 2 lata jako ekspert ds. AI/ML, robiłem dokładnie to, przygotowując dane na zwykłym serwerze lub stacji roboczej i prowadząc szkolenie na maszynie wirtualnej z procesorem graficznym na platformie Azure.

Oczywiście, wszyscy słyszeliśmy o Uczenie maszynowe Azure — specjalna platforma chmurowa do uczenia maszynowego. Jednak po pierwszym spojrzeniu na artykuły wprowadzające, wygląda na to, że usługa Azure ML stworzy więcej problemów niż rozwiązuje. Na przykład we wspomnianym powyżej samouczku szkolenie na Azure ML jest uruchamiane z Jupyter Notebook, podczas gdy sam skrypt szkoleniowy jest proponowany do utworzenia i edytowania jako plik tekstowy w jednej z komórek - bez użycia autouzupełniania, składni podkreślanie i inne zalety normalnego środowiska programistycznego. Z tego powodu od dłuższego czasu nie używamy poważnie Azure ML w naszej pracy.

Jednak niedawno odkryłem sposób na efektywne wykorzystanie Azure ML w mojej pracy! Zainteresowany szczegółami?

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

Głównym sekretem jest Rozszerzenie programu Visual Studio Code dla usługi Azure ML. Pozwala na tworzenie skryptów szkoleniowych bezpośrednio w VS Code, w pełni wykorzystując środowisko - i możesz nawet uruchomić skrypt lokalnie, a następnie po prostu wysłać go do szkolenia w klastrze Azure ML za pomocą kilku kliknięć. Wygodne, prawda?

W ten sposób uzyskujesz następujące korzyści z korzystania z usługi Azure ML:

  • Możesz pracować przez większość czasu lokalnie na swojej maszynie w wygodnym IDE i używaj procesora GPU tylko do trenowania modeli. Jednocześnie pula zasobów szkoleniowych może automatycznie dostosowywać się do wymaganego obciążenia, a ustawiając minimalną liczbę węzłów na 0, można automatycznie uruchamiać maszynę wirtualną „na żądanie” w obecności zadań szkoleniowych.
  • Państwo może przechowywać wszystkie efekty uczenia się w jednym miejscu, w tym uzyskane metryki i wynikające z nich modele - nie ma potrzeby wymyślania jakiegoś systemu lub kolejności przechowywania wszystkich wyników.
  • W tym przypadku, Nad tym samym projektem może pracować wiele osób - mogą korzystać z tego samego klastra obliczeniowego, wszystkie eksperymenty zostaną ustawione w kolejce, a także mogą zobaczyć wyniki swoich eksperymentów. Jednym z takich scenariuszy jest wykorzystanie Azure ML w nauczaniu Deep Learningkiedy zamiast dawać każdemu uczniowi maszynę wirtualną z GPU, możesz stworzyć jeden klaster, który będzie używany przez wszystkich centralnie. Ponadto ogólna tabela wyników z dokładnością modelu może służyć jako dobry element rywalizacji.
  • Dzięki Azure ML możesz łatwo przeprowadzić serię eksperymentów, np optymalizacja hiperparametrów - można to zrobić za pomocą kilku linijek kodu, nie ma potrzeby ręcznego przeprowadzania serii eksperymentów.

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

Obszar roboczy Azure ML i portal Azure ML

Usługa Azure ML jest zorganizowana wokół koncepcji miejsce pracy — obszar roboczy. Dane mogą być przechowywane w obszarze roboczym, wysyłane są do niego eksperymenty w celu trenowania, przechowywane są tam również wyniki treningu - wynikowe metryki i modele. Możesz zobaczyć, co jest w obszarze roboczym Portal Azure ML - i stamtąd możesz wykonywać wiele operacji, od ładowania danych po eksperymenty monitorujące i wdrażanie modeli.

Możesz utworzyć obszar roboczy za pośrednictwem interfejsu internetowego Portal Azure (Zob. instrukcje krok po kroku) lub przy użyciu wiersza polecenia interfejsu wiersza polecenia platformy Azure (instrukcje):

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

Niektóre są również związane z obszarem roboczym zasoby obliczeniowe (obliczać). Po utworzeniu skryptu do uczenia modelu możesz to zrobić wyślij eksperyment do wykonania do obszaru roboczego i określ oblicz cel - w tym przypadku skrypt zostanie spakowany, uruchomiony w żądanym środowisku obliczeniowym, a następnie wszystkie wyniki eksperymentu zostaną zapisane w przestrzeni roboczej do dalszej analizy i wykorzystania.

Skrypt do nauki dla MNIST

Rozważ klasyczny problem rozpoznawanie cyfr odręcznych przy użyciu zbioru danych MNIST. Podobnie w przyszłości możesz uruchomić dowolny ze swoich skryptów szkoleniowych.

W naszym repozytorium znajduje się skrypt train_local.py, który trenujemy najprostszy model regresji liniowej przy użyciu biblioteki SkLearn. Oczywiście rozumiem, że nie jest to najlepszy sposób na rozwiązanie problemu - używamy go przykładowo, jako najprostszego.

Skrypt najpierw pobiera dane MNIST z OpenML, a następnie używa klasy LogisticRegression aby wytrenować model, a następnie wydrukować wynikową dokładność:

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)

Możesz uruchomić skrypt na swoim komputerze i uzyskać wynik w ciągu kilku sekund.

Uruchom skrypt w Azure ML

Jeśli uruchomimy skrypt szkoleniowy przez Azure ML, będziemy mieli dwie główne zalety:

  • Prowadzenie szkolenia na dowolnym zasobie obliczeniowym, który z reguły jest bardziej produktywny niż komputer lokalny. Jednocześnie Azure ML sam zajmie się spakowaniem naszego skryptu ze wszystkimi plikami z bieżącego katalogu do kontenera docker, zainstalowaniem wymaganych zależności i wysłaniem go do wykonania.
  • Zapisuj wyniki w pojedynczym rejestrze w obszarze roboczym usługi Azure ML. Aby skorzystać z tej funkcji, musimy dodać kilka linii kodu do naszego skryptu, aby zarejestrować wynikową precyzję:

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

Wywoływana jest odpowiednia wersja skryptu train_universal.py (jest trochę bardziej przebiegły niż napisano powyżej, ale niewiele). Skrypt ten można uruchomić zarówno lokalnie, jak i na zdalnym zasobie obliczeniowym.

Aby uruchomić go w Azure ML z VS Code, musisz wykonać następujące czynności:

  1. Upewnij się, że rozszerzenie platformy Azure jest połączone z Twoją subskrypcją. Wybierz ikonę platformy Azure z menu po lewej stronie. Jeśli nie masz połączenia, w prawym dolnym rogu pojawi się powiadomienie (tutaj jest), klikając na który możesz wejść przez przeglądarkę. Możesz także kliknąć Ctrl+Shift+P wywołać wiersz poleceń VS Code i wpisać Zaloguj się na platformie Azure.

  2. Następnie w sekcji Azure (ikona po lewej stronie) znajdź sekcję NAUCZANIE MASZYNOWE:

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 skrypt train_universal.py i wybierz Azure ML: Uruchom jako eksperyment na platformie Azure.

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

  1. Po tym nastąpi seria okien dialogowych w obszarze wiersza poleceń VS Code: potwierdź subskrypcję i obszar roboczy Azure ML, którego używasz, i 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, aby utworzyć nowy zasób obliczeniowy Utwórz nowy komputer:

    • obliczać określa zasób obliczeniowy, na którym odbędzie się szkolenie. Możesz wybrać komputer lokalny lub klaster chmurowy AmlCompute. Polecam stworzenie skalowalnego klastra maszyn STANDARD_DS3_v2, z minimalną liczbą maszyn 0 (i maksymalnie 1 lub więcej, w zależności od apetytu). Można to zrobić za pomocą interfejsu VS Code lub wcześniej za pomocą Portal ML.

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

  2. Następnie musisz wybrać konfigurację Konfiguracja obliczeniowa, który definiuje parametry tworzonego do treningu kontenera, w szczególności wszystkie niezbędne biblioteki. W naszym przypadku, ponieważ używamy Scikit Learn, wybieramy SkLearn, a następnie potwierdź proponowaną listę bibliotek, naciskając Enter. Jeśli używasz dodatkowych bibliotek, należy je tutaj określić.

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

  3. Spowoduje to otwarcie okna z plikiem JSON opisującym eksperyment. Możesz w nim poprawić niektóre parametry - na przykład nazwę eksperymentu. Następnie kliknij link Prześlij eksperyment bezpośrednio w tym pliku:

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

  1. Po pomyślnym przesłaniu eksperymentu przez VS Code, po prawej stronie obszaru powiadomień zobaczysz link do Portal Azure ML, gdzie możesz śledzić stan i wyniki eksperymentu.

Jak pokonać strach i zacząć korzystać z Azure Machine Learning
Następnie zawsze możesz go znaleźć w sekcji Eksperymenty Portal Azure MLlub w sekcji Uczenie maszynowe Azure na liście eksperymentów:

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

  1. Jeśli później dokonałeś poprawek w kodzie lub zmieniłeś parametry, ponowne uruchomienie eksperymentu będzie znacznie szybsze i łatwiejsze. Klikając prawym przyciskiem myszy plik, zobaczysz nowy element menu Powtórz ostatni bieg - po prostu wybierz, a eksperyment natychmiast się rozpocznie:

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

Teraz już wiesz, że przeprowadzanie eksperymentów z usługą Azure ML jest proste i bezbolesne, a dzięki temu zyskujesz wiele przyjemnych korzyści.

Ale można też dostrzec wady. Na przykład uruchomienie skryptu trwało znacznie dłużej. Oczywiście spakowanie skryptu do kontenera i wdrożenie go na serwerze wymaga czasu. Jeśli w tym samym czasie klaster został przycięty do rozmiaru 0 węzłów, uruchomienie maszyny wirtualnej zajmie jeszcze więcej czasu, a wszystko to jest bardzo zauważalne, gdy eksperymentujemy z prostymi zadaniami, takimi jak MNIST, które są rozwiązywane w kilka sekund . Jednak w rzeczywistości, gdy szkolenie trwa kilka godzin, a nawet dni lub tygodni, ten dodatkowy czas staje się znikomy, zwłaszcza na tle znacznie wyższej wydajności, jaką może zapewnić klaster obliczeniowy.

Co dalej?

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

Wewnątrz obszaru roboczego możesz przechowywać dane, tworząc w ten sposób scentralizowane repozytorium dla wszystkich swoich zadań, które jest łatwo dostępne. Dodatkowo możesz uruchamiać eksperymenty nie z Visual Studio Code, ale z wykorzystaniem API - może to być szczególnie przydatne, jeśli potrzebujesz przeprowadzić optymalizację hiperparametrów i musisz wielokrotnie uruchamiać skrypt z różnymi parametrami. Ponadto w Azure ML wbudowana jest specjalna technologia Hyperdrive, co pozwala na bardziej skomplikowane wyszukiwanie i optymalizację hiperparametrów. O tych możliwościach opowiem w następnym poście.

Przydatne zasoby

Aby dowiedzieć się więcej o Azure ML, pomocne mogą być następujące kursy Microsoft Learn:

Źródło: www.habr.com

Dodaj komentarz