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

  1. Dodaj składnik DenseNet lub sieć ResNet do wersji roboczej potoku w projektancie.

  2. 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.

  3. 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.

  4. 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.

  5. W polu Rozmiar partii określ liczbę wystąpień do trenowania w partii domyślnie 16.

  6. 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.

  7. 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.

  8. 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.

  9. W obszarze Cierpliwość określ, ile epok do wczesnego zatrzymania trenowania, jeśli utrata walidacji nie spadnie z rzędu. domyślnie 3.

  10. W obszarze Częstotliwość drukowania określ częstotliwość drukowania dziennika trenowania dla iteracji w każdej epoki, domyślnie 10.

  11. 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".

Zrzut ekranu przedstawiający metryki trenowania

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.

  1. Wybierz składnik i otwórz prawy panel. Rozwiń sekcję Ustawienia zadania .

    Zrzut ekranu przedstawiający sposób ustawiania trenowania rozproszonego podczas uruchamiania

  2. Upewnij się, że wybrano środowisko obliczeniowe AML dla docelowego obiektu obliczeniowego.

  3. 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ń.

    Zrzut ekranu przedstawiający sposób sprawdzania klastra obliczeniowego

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.

Zrzut ekranu przedstawiający dziennik sterowników

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ń.

Zrzut ekranu przedstawiający dziennik mpi

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.