Trenowanie modelu PyTorch
W tym artykule opisano sposób używania składnika Train PyTorch Model w projektancie usługi Azure Machine Learning do trenowania modeli PyTorch, takich jak DenseNet. Trenowanie odbywa się po zdefiniowaniu modelu i ustawieniu jego parametrów i wymaga danych oznaczonych etykietami.
Obecnie składnik Train PyTorch Model obsługuje zarówno jeden węzeł, jak i trenowanie rozproszone.
Jak używać trenowania modelu PyTorch
Dodaj składnik DenseNet lub sieć ResNet do wersji roboczej potoku w projektancie.
Dodaj składnik Train PyTorch Model (Trenowanie modelu PyTorch ) do potoku. Ten składnik można znaleźć w kategorii Trenowanie modelu . Rozwiń węzeł Train (Trenowanie), a następnie przeciągnij składnik Train PyTorch Model (Trenowanie modelu PyTorch ) do potoku.
Uwaga
Trenowanie składnika modelu PyTorch jest lepiej uruchamiane na obliczeniach typu procesora GPU dla dużego zestawu danych. W przeciwnym razie potok zakończy się niepowodzeniem. Możesz wybrać środowisko obliczeniowe dla określonego składnika w okienku po prawej stronie składnika, ustawiając opcję Użyj innego obiektu docelowego obliczeniowego.
Po lewej stronie danych wejściowych dołącz nieuszkodzony model. Dołącz zestaw danych trenowania i zestaw danych walidacji do środkowego i prawego elementu wejściowego trenowania modelu PyTorch.
W przypadku nieuszkodzonego modelu musi to być model PyTorch, taki jak DenseNet; W przeciwnym razie zostanie zgłoszony błąd "InvalidModelDirectoryError".
W przypadku zestawu danych zestaw danych trenowania musi być katalogiem obrazów oznaczonym etykietą. Zapoznaj się z tematem Konwertowanie na katalog obrazów , aby dowiedzieć się, jak uzyskać katalog obrazów z etykietą. Jeśli nie zostanie oznaczona etykietą, zostanie zgłoszony błąd "NotLabeledDatasetError".
Zestaw danych trenowania i zestaw danych weryfikacji mają te same kategorie etykiet. W przeciwnym razie zostanie zgłoszony błąd InvalidDatasetError.
W obszarze Epoki określ liczbę epok, które chcesz trenować. Cały zestaw danych będzie iterowany w każdej epoki, domyślnie 5.
W polu Rozmiar partii określ liczbę wystąpień do trenowania w partii domyślnie 16.
W polu Numer kroku Rozgrzewka określ, ile epok chcesz rozgrzać trenowanie, na wypadek, gdy początkowa szybkość uczenia jest nieco zbyt duża, aby rozpocząć zbieżnie, domyślnie 0.
W polu Wskaźnik nauki określ wartość współczynnika nauki, a wartość domyślna to 0,001. Szybkość nauki określa rozmiar kroku, który jest używany w optymalizatorze, takim jak sgd za każdym razem, gdy model jest testowany i poprawiany.
Ustawiając szybkość mniejszą, testujesz model częściej, z ryzykiem, że możesz utknąć w lokalnym plateau. Ustawiając większy współczynnik, można szybciej się zbiegać, z ryzykiem przekroczenia prawdziwego minima.
Uwaga
Jeśli utrata pociągu stanie się nan podczas trenowania, co może być spowodowane zbyt dużą szybkością nauki, zmniejszenie szybkości nauki może pomóc. W trenowaniu rozproszonym, aby zachować stabilność spadku gradientu, rzeczywista szybkość uczenia jest obliczana przez
lr * torch.distributed.get_world_size()
, ponieważ rozmiar partii grupy procesów to czasy rozmiaru świata pojedynczego procesu. Stosuje się rozkład współczynnika uczenia wielomianowego i może pomóc w lepszej wydajności modelu.W przypadku inicjatora losowego opcjonalnie wpisz wartość całkowitą, która ma być używana jako inicjator. Użycie inicjatora jest zalecane, jeśli chcesz zapewnić powtarzalność eksperymentu między zadaniami.
W obszarze Cierpliwość określ, ile epok do wczesnego zatrzymania trenowania, jeśli utrata walidacji nie spadnie z rzędu. domyślnie 3.
W obszarze Częstotliwość drukowania określ częstotliwość drukowania dziennika trenowania dla iteracji w każdej epoki, domyślnie 10.
Prześlij potok. Jeśli zestaw danych ma większy rozmiar, zalecane będzie trochę czasu, a obliczenia procesora GPU są zalecane.
Trenowanie rozproszone
W rozproszonym trenowaniu obciążenia w celu wytrenowania modelu jest podzielony i współużytkowany między wiele mini procesorów nazywanych węzłami roboczymi. Te węzły robocze działają równolegle, aby przyspieszyć trenowanie modelu. Obecnie projektant obsługuje trenowanie rozproszone dla składnika Train PyTorch Model .
Czas trenowania
Trenowanie rozproszone umożliwia trenowanie na dużym zestawie danych, takich jak ImageNet (1000 klas, 1,2 miliona obrazów) w ciągu zaledwie kilku godzin przez trenowanie modelu PyTorch. W poniższej tabeli przedstawiono czas trenowania i wydajność podczas trenowania 50 epok resnet50 w sieci ImageNet od podstaw na podstawie różnych urządzeń.
Urządzenia | Czas trenowania | Przepływność trenowania | Dokładność walidacji top-1 | Dokładność walidacji top-5 |
---|---|---|---|---|
16 V100 procesorów GPU | 6h22min | Ok. 3200 obrazów na sekundę | 68.83% | 88.84% |
8 procesorów GPU V100 | 12h21 min | ~1670 Obrazy na sekundę | 68.84% | 88.74% |
Kliknij kartę "Metryki" tego składnika i zobacz wykresy metryk trenowania, takie jak "Trenowanie obrazów na sekundę" i "Dokładność 1 pierwszych".
Jak włączyć trenowanie rozproszone
Aby włączyć trenowanie rozproszone dla składnika Trenowanie modelu PyTorch , można ustawić w obszarze Ustawienia zadania w okienku po prawej stronie składnika. Tylko klaster obliczeniowy AML jest obsługiwany na potrzeby trenowania rozproszonego.
Uwaga
Do aktywowania trenowania rozproszonego jest wymaganych wiele procesorów GPU, ponieważ składnik trenowania PyTorch modelu NCCL wymaga cuda.
Wybierz składnik i otwórz prawy panel. Rozwiń sekcję Ustawienia zadania .
Upewnij się, że wybrano środowisko obliczeniowe AML dla docelowego obiektu obliczeniowego.
W sekcji Układ zasobu należy ustawić następujące wartości:
Liczba węzłów: liczba węzłów w docelowym obiekcie obliczeniowym używanym do trenowania. Powinna być mniejsza lub równamaksymalnej liczbie węzłów klastra obliczeniowego. Domyślnie jest to 1, co oznacza jednowęźle zadanie.
Liczba procesów na węzeł: liczba procesów wyzwolonych na węzeł. Powinna być mniejsza lub równajednostce przetwarzania obliczeń. Domyślnie jest to 1, co oznacza jedno zadanie procesu.
Możesz sprawdzić maksymalną liczbę węzłów i jednostkę przetwarzania obliczeń, klikając nazwę obliczeniową na stronie szczegółów obliczeń.
Więcej informacji na temat trenowania rozproszonego można znaleźć tutaj.
Rozwiązywanie problemów z trenowaniem rozproszonym
Jeśli włączysz trenowanie rozproszone dla tego składnika, będą istnieć dzienniki sterowników dla każdego procesu. 70_driver_log_0
jest przeznaczony dla procesu głównego. Dzienniki sterowników można sprawdzić pod kątem szczegółów błędów poszczególnych procesów na karcie Dane wyjściowe i dzienniki w okienku po prawej stronie.
Jeśli trenowanie rozproszone włączone przez składnik zakończy się niepowodzeniem bez żadnych 70_driver
dzienników, możesz sprawdzić 70_mpi_log
szczegóły błędu.
W poniższym przykładzie przedstawiono typowy błąd, który to liczba procesów na węzeł jest większy niż jednostka przetwarzania obliczeń.
Więcej informacji na temat rozwiązywania problemów ze składnikami można znaleźć w tym artykule .
Wyniki
Po zakończeniu zadania potoku, aby użyć modelu do oceniania, połącz model Train PyTorch (Trenowanie modelu PyTorch ) z elementem Score Image Model (Generowanie wyników dla modelu obrazu), aby przewidzieć wartości dla nowych przykładów wejściowych.
Uwagi techniczne
Oczekiwane dane wejściowe
Nazwa | Typ | Opis |
---|---|---|
Model niewytrenowany | UntrainedModelDirectory | Nietrenowany model, wymagaj PyTorch |
Zestaw danych trenowania | ImageDirectory | Zestaw danych trenowania |
Zestaw danych weryfikacji | ImageDirectory | Zestaw danych weryfikacji do oceny każdej epoki |
Parametry składników
Nazwa | Zakres | Typ | Domyślny | Opis |
---|---|---|---|---|
Epok | >0 | Liczba całkowita | 5 | Wybierz kolumnę zawierającą etykietę lub kolumnę wyniku |
Rozmiar partii | >0 | Liczba całkowita | 16 | Ile wystąpień do trenowania w partii |
Numer kroku rozgrzewki | >=0 | Liczba całkowita | 0 | Ile epok do rozgrzewki trenować |
Tempo nauki | >=double. Epsilon | Float | 0.1 | Początkowy współczynnik uczenia optymalizatora stochastycznego spadku gradientu. |
Losowe nasion | Dowolne | Liczba całkowita | 1 | Nasion dla generatora liczb losowych używanych przez model. |
Cierpliwość | >0 | Liczba całkowita | 3 | Ile epok do wczesnego zatrzymania trenowania |
Częstotliwość drukowania | >0 | Liczba całkowita | 10 | Częstotliwość drukowania dziennika trenowania nad iteracjami w każdej epoki |
Dane wyjściowe
Nazwa | Typ | Opis |
---|---|---|
Wytrenowany model | ModelDirectory | Wytrenowany model |
Następne kroki
Zobacz zestaw składników dostępnych dla usługi Azure Machine Learning.