Rozproszone trenowanie modeli uczenia głębokiego na platformie Azure

Blob Storage
Container Registry
Usługa Machine Learning

Ta architektura referencyjna przedstawia sposób przeprowadzania rozproszonego trenowania modeli uczenia głębokiego w klastrach maszyn wirtualnych z obsługą procesora GPU. Scenariusz jest klasyfikacją obrazów, ale rozwiązanie można uogólnić do innych scenariuszy uczenia głębokiego, takich jak segmentacja lub wykrywanie obiektów.

Implementacja referencyjna dla tej architektury jest dostępna w usłudze GitHub.

Architektura

Diagram architektury przedstawiający rozproszone uczenie głębokie.

Pobierz plik programu Visio z tą architekturą.

Przepływ pracy

Ta architektura składa się z następujących usług:

Usługa Azure Machine Learning Compute odgrywa kluczową rolę w tej architekturze przez skalowanie zasobów w górę i w dół zgodnie z potrzebami. Azure Machine Learning Compute to usługa, która pomaga aprowizować klastry maszyn wirtualnych i zarządzać nimi, planować zadania, zbierać wyniki, skalować zasoby i obsługiwać błędy. Obsługuje ona maszyny wirtualne z obsługą procesora GPU na potrzeby obciążeń uczenia głębokiego.

Usługa Blob Storage w warstwie Standardowa służy do przechowywania dzienników i wyników. Usługa Blob Storage w warstwie Premium służy do przechowywania danych treningowych i jest instalowana w węzłach klastra szkoleniowego przy użyciu systemu blobfuse. Warstwa Premium usługi Blob Storage zapewnia lepszą wydajność niż warstwa Standardowa i jest zalecana w przypadku scenariuszy trenowania rozproszonego. Podczas instalacji przy użyciu systemu blobfuse podczas pierwszej epoki dane szkoleniowe są pobierane na dyski lokalne klastra szkoleniowego i buforowane. Dla każdej kolejnej epoki dane są odczytywane z dysków lokalnych, co jest najbardziej wydajną opcją.

Azure Container Registry służy do przechowywania obrazu platformy Docker używanego przez usługę Azure Machine Learning Compute do uruchomienia szkolenia.

Składniki

  • Usługa Azure Machine Learning to otwarta platforma do zarządzania opracowywaniem i wdrażaniem modeli uczenia maszynowego na dużą skalę. Platforma obsługuje powszechnie używane otwarte struktury i oferuje zautomatyzowane cechowanie i wybór algorytmów. Usługa Machine Learning umożliwia wdrażanie modeli w różnych miejscach docelowych, w tym Azure Container Instances.
  • Azure Blob Storage to usługa, która jest częścią usługi Azure Storage. Usługa Blob Storage oferuje zoptymalizowany magazyn obiektów w chmurze dla dużych ilości danych bez struktury.
  • Container Registry to oparta na chmurze usługa rejestru prywatnego. Usługa Container Registry umożliwia przechowywanie prywatnych obrazów kontenerów platformy Docker i powiązanych artefaktów oraz zarządzanie nimi.

Szczegóły scenariusza

Scenariusz: Klasyfikowanie obrazów jest powszechnie stosowaną techniką przetwarzania obrazów, często zajmowaną przez trenowanie splotowej sieci neuronowej (CNN). W przypadku szczególnie dużych modeli z dużymi zestawami danych proces trenowania może potrwać kilka tygodni lub miesięcy na jednym procesorze GPU. W niektórych sytuacjach modele są tak duże, że nie można dopasować rozsądnych rozmiarów partii do procesora GPU. Korzystanie z trenowania rozproszonego w takich sytuacjach może skrócić czas trenowania.

W tym konkretnym scenariuszu model sieci CNN ResNet50 jest trenowany przy użyciu struktury Horovod w zestawie danych ImageNet i na danych syntetycznych. Implementacja referencyjna pokazuje, jak wykonać to zadanie przy użyciu biblioteki TensorFlow.

Istnieje kilka sposobów trenowania modelu uczenia głębokiego w sposób rozproszony, w tym podejścia równoległe i równoległe do modelu oparte na aktualizacjach synchronicznych lub asynchronicznych. Obecnie najbardziej typowym scenariuszem jest trenowanie równoległe danych za pomocą aktualizacji synchronicznych. Takie podejście jest najłatwiejsze do zaimplementowania i jest wystarczające dla większości przypadków użycia.

W przypadku równoległego trenowania rozproszonego danych za pomocą aktualizacji synchronicznych model jest replikowany na n urządzeniach sprzętowych. Minisadowa partia próbek szkoleniowych jest podzielona na n mikrosadów. Każde urządzenie wykonuje przekazywanie do przodu i do tyłu dla mikrosadowej. Gdy urządzenie zakończy proces, udostępnia aktualizacje innym urządzeniom. Te wartości są używane do obliczania zaktualizowanych wag całej minisadowej, a wagi są synchronizowane między modelami. Ten scenariusz został omówiony w skojarzonym repozytorium GitHub .

Trenowanie rozproszone równoległe danych.

Ta architektura może być również używana w przypadku aktualizacji równoległych i asynchronicznych. W trenowaniu rozproszonym równoległym modelu model jest podzielony na n urządzeń sprzętowych, a każde urządzenie przechowuje część modelu. W najprostszej implementacji każde urządzenie przechowuje warstwę sieci, a informacje są przekazywane między urządzeniami podczas przekazywania do przodu i do tyłu. Większe sieci neuronowe można wytrenować w ten sposób, ale kosztem wydajności, ponieważ urządzenia stale czekają na siebie, aby ukończyć przekazywanie do przodu lub do tyłu. Niektóre zaawansowane techniki próbują częściowo złagodzić ten problem przy użyciu gradientów syntetycznych.

Kroki trenowania są następujące:

  1. Tworzenie skryptów uruchamianych w klastrze i trenowanie modelu.
  2. Zapisywanie danych szkoleniowych w usłudze Blob Storage.
  3. Utwórz obszar roboczy usługi Machine Learning. Ten krok umożliwia również utworzenie wystąpienia usługi Container Registry do hostowania obrazów platformy Docker.
  4. Utwórz klaster z obsługą procesora GPU usługi Machine Learning.
  5. Przesyłanie zadań szkoleniowych. Dla każdego zadania z unikatowymi zależnościami nowy obraz platformy Docker jest kompilowany i wypychany do rejestru kontenerów. Podczas wykonywania odpowiedni obraz platformy Docker jest uruchamiany i wykonywany skrypt.
  6. Wszystkie wyniki i dzienniki są zapisywane w usłudze Blob Storage.

Zagadnienia dotyczące klastra szkoleniowego

Platforma Azure udostępnia kilka typów maszyn wirtualnych z obsługą procesora GPU , które są odpowiednie do trenowania modeli uczenia głębokiego. Wahają się w cenie i szybkości od niskiej do wysokiej w następujący sposób:

Seria maszyn wirtualnych platformy Azure NVIDIA GPU
NC K80
Nds P40
NCsv2 P100
NCsv3 Wersja 100
NDv2 8x V100 (NVLink)
ND A100 v4 8x A100 (NVLink)

Zalecamy skalowanie w górę trenowania przed skalowaniem w pęk. Na przykład spróbuj użyć pojedynczej wersji 100 przed próbą klastra K80s. Podobnie rozważ użycie pojedynczej maszyny wirtualnej NDv2 zamiast ośmiu maszyn wirtualnych NCsv3.

Na poniższym wykresie przedstawiono różnice wydajności dla różnych typów procesorów GPU na podstawie testów porównawczych przeprowadzonych przy użyciu bibliotek TensorFlow i Horovod. Wykres przedstawia przepływność 32 klastrów gpu w różnych modelach na różnych typach procesora GPU i wersjach MPI. Modele zostały zaimplementowane w systemie TensorFlow 1.9

Wyniki przepływności dla modeli TensorFlow w klastrach gpu.

Każda seria maszyn wirtualnych przedstawiona w poprzedniej tabeli zawiera konfigurację z rozwiązaniem InfiniBand. Użyj konfiguracji InfiniBand podczas uruchamiania trenowania rozproszonego, aby przyspieszyć komunikację między węzłami. InfiniBand zwiększa również wydajność skalowania trenowania dla struktur, które mogą z niej korzystać. Aby uzyskać szczegółowe informacje, zobacz porównanie testów porównawczych Infiniband.

Zagadnienia do rozważenia

Te zagadnienia implementują filary platformy Azure Well-Architected Framework, która jest zestawem wytycznych, których można użyć do poprawy jakości obciążenia. Aby uzyskać więcej informacji, zobacz Microsoft Azure Well-Architected Framework.

Storage

Podczas trenowania modeli uczenia głębokiego często pomijany jest aspekt przechowywania danych treningowych. Jeśli magazyn jest zbyt powolny, aby nadążyć za wymaganiami procesorów GPU, wydajność trenowania może ulec pogorszeniu.

Usługa Azure Machine Learning Compute obsługuje wiele opcji magazynu. Aby uzyskać najlepszą wydajność, pobierz dane lokalnie do każdego węzła. Jednak ten proces może być uciążliwy, ponieważ trzeba pobrać dane do każdego węzła z usługi Blob Storage. W przypadku zestawu danych ImageNet ten proces może zająć dużo czasu. Domyślnie usługa Machine Learning instaluje magazyn tak, aby buforował dane lokalnie. W związku z tym, w praktyce, po pierwszej epoki, dane są odczytywane z magazynu lokalnego. W połączeniu z usługą Premium Blob Storage rozwiązanie to zapewnia dobry kompromis między łatwością użycia a wydajnością.

Mimo że usługa Azure Machine Learning Compute może zainstalować usługę Blob Storage w warstwie Standardowa przy użyciu karty blobfuse , nie zalecamy używania warstwy Standardowa do trenowania rozproszonego, ponieważ wydajność zwykle nie jest wystarczająco dobra, aby obsłużyć niezbędną przepływność. Użyj warstwy Premium jako magazynu na potrzeby danych szkoleniowych, jak pokazano wcześniej na diagramie architektury. Aby zapoznać się z wpisem w blogu z porównaniem przepływności i opóźnień między dwiema warstwami, zobacz Premium Block Blob Storage — nowy poziom wydajności.

Container Registry

Za każdym razem, gdy obszar roboczy usługi Machine Learning jest aprowizacji, aprowizowany jest również zestaw zasobów zależnych — blob Storage, Key Vault, Container Registry i Application Insights. Alternatywnie możesz użyć istniejących zasobów platformy Azure i skojarzyć je z nowym obszarem roboczym usługi Machine Learning podczas jego tworzenia.

Domyślnie usługa Container Registry w warstwie Podstawowa jest aprowizowana. W przypadku uczenia głębokiego na dużą skalę zalecamy dostosowanie obszaru roboczego do korzystania z usługi Container Registry w warstwie Premium. Oferuje znacznie wyższą przepustowość, która umożliwia szybkie ściąganie obrazów platformy Docker między węzłami klastra szkoleniowego.

Format danych

W przypadku dużych zestawów danych często zaleca się używanie formatów danych, takich jak TFRecords lub Petastorm , które zapewniają lepszą wydajność we/wy niż wiele małych plików obrazów.

Zabezpieczenia

Zabezpieczenia zapewniają ochronę przed celowymi atakami i nadużyciami cennych danych i systemów. Aby uzyskać więcej informacji, zobacz Omówienie filaru zabezpieczeń.

Korzystanie z obszaru roboczego z obsługą wysokiego wpływu na działalność biznesową

W scenariuszach korzystających z danych poufnych należy rozważyć wyznaczenie obszaru roboczego usługi Machine Learning jako wartości HBI (High Business Impact), ustawiając flagę hbi_workspace na true podczas tworzenia. Obszar roboczy z obsługą karty HBI, między innymi, szyfruje lokalne dyski tymczasowe klastrów obliczeniowych, umożliwia filtrowanie adresów IP i zmniejsza ilość danych diagnostycznych, które Microsoft zbiera. Aby uzyskać więcej informacji, zobacz Szyfrowanie danych za pomocą usługi Azure Machine Learning.

Szyfrowanie danych magazynowanych i przesyłanych

Szyfruj poufne dane magazynowane — czyli w magazynie obiektów blob. Za każdym razem, gdy dane są przenoszone z jednej lokalizacji do drugiej, użyj protokołu SSL, aby zabezpieczyć transfer danych. Aby uzyskać więcej informacji, zobacz Przewodnik po zabezpieczeniach usługi Azure Storage.

Zabezpieczanie danych w sieci wirtualnej

W przypadku wdrożeń produkcyjnych rozważ wdrożenie klastra usługi Machine Learning w podsieci określonej sieci wirtualnej. Dzięki tej konfiguracji węzły obliczeniowe w klastrze mogą bezpiecznie komunikować się z innymi maszynami wirtualnymi lub z siecią lokalną. Możesz również użyć usługi lub prywatnych punktów końcowych dla wszystkich skojarzonych zasobów, aby udzielić dostępu z sieci wirtualnej.

Optymalizacja kosztów

Optymalizacja kosztów dotyczy sposobów zmniejszenia niepotrzebnych wydatków i poprawy wydajności operacyjnej. Aby uzyskać więcej informacji, zobacz Omówienie filaru optymalizacji kosztów.

Użyj kalkulatora cen platformy Azure , aby oszacować koszt uruchamiania obciążenia uczenia głębokiego. Aby zapoznać się z zagadnieniami dotyczącymi planowania kosztów i zarządzania specyficznymi dla usługi Machine Learning, zobacz Planowanie zarządzania kosztami usługi Azure Machine Learning. Aby uzyskać więcej informacji, zobacz Omówienie filaru optymalizacji kosztów.

Premium Blob Storage

Usługa Blob Storage w warstwie Premium ma wysoki koszt magazynowania danych, ale koszt transakcji jest niższy niż koszt przechowywania danych w warstwie Gorąca usługi Blob Storage w warstwie Standardowa. Dzięki temu usługa Blob Storage w warstwie Premium może być tańsza w przypadku obciążeń o wysokich stawkach transakcji. Aby uzyskać więcej informacji, zobacz Azure Blob Storage cennik.

Container Registry

Usługa Container Registry oferuje warstwy Podstawowa, Standardowa i Premium. Wybierz warstwę w zależności od potrzebnego magazynu. Wybierz warstwę Premium, jeśli potrzebujesz replikacji geograficznej lub rozszerzonej przepływności na potrzeby ściągania platformy Docker między węzłami współbieżnych. Ponadto obowiązują standardowe opłaty za sieć. Aby uzyskać więcej informacji, zobacz Azure Container Registry cennik.

Środowisko obliczeniowe usługi Azure Machine Learning

W tej architekturze usługa Azure Machine Learning Compute jest prawdopodobnie głównym czynnikiem kosztu. Implementacja wymaga klastra węzłów obliczeniowych procesora GPU. Cena tych węzłów zależy od ich liczby i wybranego rozmiaru maszyny wirtualnej. Aby uzyskać więcej informacji na temat rozmiarów maszyn wirtualnych, które obejmują procesory GPU, zobacz Rozmiary maszyn wirtualnych zoptymalizowane pod kątem procesora GPU i Cennik usługi Azure Virtual Machines.

Zwykle obciążenia uczenia głębokiego śledzą postęp po każdej epoki lub co kilka epok. Ta praktyka ogranicza wpływ nieoczekiwanych przerw w trenowaniu. Możesz sparować tę praktykę z użyciem maszyn wirtualnych o niskim priorytcie dla klastrów obliczeniowych usługi Machine Learning. Maszyny wirtualne o niskim priorytcie używają nadmiarowej pojemności platformy Azure ze znacznie obniżonymi stawkami, ale mogą zostać wywłaszczone, jeśli zapotrzebowanie na pojemność wzrośnie.

Efektywność operacyjna

Doskonałość operacyjna obejmuje procesy operacyjne, które wdrażają aplikację i działają w środowisku produkcyjnym. Aby uzyskać więcej informacji, zobacz Omówienie filaru doskonałości operacyjnej.

Podczas uruchamiania zadania ważne jest monitorowanie postępu i upewnienie się, że elementy działają zgodnie z oczekiwaniami. Jednak monitorowanie klastra aktywnych węzłów może być wyzwaniem.

Usługa Machine Learning oferuje wiele sposobów instrumentowania eksperymentów. Strumienie stdout i stderr ze skryptów są rejestrowane automatycznie. Te dzienniki są automatycznie synchronizowane z magazynem obiektów blob obszaru roboczego. Możesz wyświetlić te pliki za pośrednictwem Azure Portal lub pobrać je lub przesłać strumieniowo przy użyciu zestawu SDK języka Python lub interfejsu wiersza polecenia usługi Machine Learning. Jeśli rejestrujesz eksperymenty przy użyciu narzędzia Tensorboard, te dzienniki są automatycznie synchronizowane. Dostęp do nich można uzyskać bezpośrednio lub użyć zestawu MACHINE Learning SDK do przesyłania strumieniowego ich do sesji tablicy Tensorboard.

Efektywność wydajności

Efektywność wydajności to możliwość skalowania obciążenia w celu zaspokojenia zapotrzebowania użytkowników w wydajny sposób. Aby uzyskać więcej informacji, zobacz Omówienie filaru wydajności wydajności.

Wydajność skalowania trenowania rozproszonego jest zawsze mniejsza niż 100 procent ze względu na obciążenie sieci — synchronizacja całego modelu między urządzeniami staje się wąskim gardłem. W związku z tym trenowanie rozproszone najlepiej nadaje się do:

  • Duże modele, których nie można wytrenować przy użyciu rozsądnego rozmiaru partii na jednym procesorze GPU.
  • Problemy, których nie można rozwiązać, rozpowszechniając model w prosty, równoległy sposób.

Trenowanie rozproszone nie jest zalecane w przypadku uruchamiania wyszukiwań hiperparametrycznych. Wydajność skalowania wpływa na wydajność i sprawia, że podejście rozproszone jest mniej wydajne niż oddzielne trenowanie wielu konfiguracji modelu.

Jednym ze sposobów zwiększenia wydajności skalowania jest zwiększenie rozmiaru partii. Należy jednak dokładnie wprowadzić tę korektę. Zwiększenie rozmiaru partii bez dostosowywania innych parametrów może pogorszyć ostateczną wydajność modelu.

Wdrażanie tego scenariusza

Implementacja referencyjna tej architektury jest dostępna w usłudze GitHub. Wykonaj opisane tam kroki, aby przeprowadzić rozproszone trenowanie modeli uczenia głębokiego w klastrach maszyn wirtualnych z obsługą procesora GPU.

Współautorzy

Ten artykuł jest obsługiwany przez Microsoft. Został pierwotnie napisany przez następujących współautorów.

Autorzy zabezpieczeń:

Aby wyświetlić niepublice profile serwisu LinkedIn, zaloguj się do serwisu LinkedIn.

Następne kroki

Dane wyjściowe z tej architektury to wytrenowany model zapisany w magazynie obiektów blob. Ten model można operacjonalizować na potrzeby oceniania w czasie rzeczywistym lub oceniania wsadowego. Aby uzyskać więcej informacji, zobacz następujące architektury referencyjne:

W przypadku architektur obejmujących trenowanie rozproszone lub uczenie głębokie, zobacz następujące zasoby: