Trenowanie modelu PyTorch

W tym artykule opisano sposób używania składnika Train PyTorch Model w projektancie Azure Machine Learning do trenowania modeli PyTorch, takich jak DenseNet. Trenowanie odbywa się po zdefiniowaniu modelu i ustawieniu jego parametrów oraz wymaga danych oznaczonych etykietą.

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ć obliczenia dla określonego składnika w okienku po prawej stronie składnika, ustawiając ustawienie Użyj innego obiektu docelowego obliczeniowego.

  3. Po lewej stronie danych wejściowych dołącz nietrenowany model. Dołącz zestaw danych trenowania i zestaw danych weryfikacji do środkowego i prawego wejścia train PyTorch Model.

    W przypadku nietrenowanego 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 artykułem Konwertowanie na katalog obrazów , aby 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 Epochs określ liczbę epok, które chcesz trenować. Cały zestaw danych będzie iterowany w każdej epoce, domyślnie 5.

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

  6. W polu Numer kroku rozgrzewki określ, ile epok chcesz rozgrzać szkolenia, w przypadku gdy początkowy współczynnik uczenia jest nieco zbyt duży, aby rozpocząć zbieżność, domyślnie 0.

  7. W przypadku współczynnika Edukacja określ wartość współczynnika nauki, a wartość domyślna to 0,001. Edukacja szybkość kontroluje 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 szybkość większa, można szybciej zbiegać się z ryzykiem przekroczenia wartości rzeczywistej minima.

    Uwaga

    Jeśli utrata pociągu staje się nan podczas trenowania, co może być spowodowane zbyt dużym współczynnikiem uczenia się, zmniejszenie szybkości nauki może pomóc. W trenowaniu rozproszonym, aby zachować stabilny spadek 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. Współczynnik uczenia wielomianowego jest stosowany i może pomóc w lepszej wydajności modelu.

  8. W polu Losowe nasion opcjonalnie wpisz wartość całkowitą, która ma być używana jako nasion. Użycie nasion jest zalecane, jeśli chcesz zapewnić powtarzalność eksperymentu między przebiegami.

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

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

  11. Prześlij potok. Jeśli zestaw danych ma większy rozmiar, zalecane będzie użycie zasobów obliczeniowych procesora GPU.

Trenowanie rozproszone

W rozproszonym trenowaniu obciążenia w celu trenowania modelu jest podzielony i współużytkowany między wiele mini procesorów, nazywanych węzłami procesu roboczego. 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 ~3200 Obrazy/s 68.83% 88.84%
8 procesorów GPU V100 12h21min ~1670 Obrazy/s 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ść top 1".

Screenshot showing training metrics

Jak włączyć trenowanie rozproszone

Aby włączyć trenowanie rozproszone dla składnika Train PyTorch Model , można ustawić w obszarze Ustawienia uruchamiania w okienku po prawej stronie składnika. W przypadku trenowania rozproszonego obsługiwane jest tylko AML klastra obliczeniowego.

Uwaga

Do aktywowania trenowania rozproszonego wymagane jest 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 uruchamiania .

    Screenshot showing how to set distributed training in runsetting

  2. Upewnij się, że wybrano AML obliczenia 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 jedno zadanie węzła.

    • Liczba procesów na węzeł: liczba procesów wyzwolonych na węzeł. Powinna być mniejsza niż lub równa jednostce przetwarzania zasobów obliczeniowych. Domyślnie jest to 1, co oznacza jedno zadanie procesu.

    Możesz sprawdzić maksymalną liczbę węzłów i jednostkę przetwarzania zasobów obliczeniowych, klikając nazwę obliczeniową na stronie szczegółów obliczeń.

    Screenshot showing how to check compute cluster

Więcej informacji na temat trenowania rozproszonego można znaleźć w Azure Machine Learning tutaj.

Rozwiązywanie problemów z trenowaniem rozproszonym

W przypadku włączenia trenowania rozproszonego dla tego składnika będą dostępne 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łędu każdego procesu na karcie Dane wyjściowe i dzienniki w okienku po prawej stronie.

Screenshot showing driver log

Jeśli trenowanie rozproszone włączone przez składnik nie powiedzie się 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ększa niż jednostka przetwarzania obliczeń.

Screenshot showing mpi log

Aby uzyskać więcej informacji na temat rozwiązywania problemów ze składnikami, zapoznaj się z tym artykułem .

Wyniki

Po zakończeniu uruchamiania potoku, aby użyć modelu do oceniania, połącz model Train PyTorch z score Image Model (Generowanie wyników modelu obrazu), aby przewidzieć wartości dla nowych przykładów wejściowych.

Uwagi techniczne

Oczekiwane dane wejściowe

Nazwa Typ Opis
Nietrenowany model UntrainedModelDirectory Nietrenowany model, wymagaj PyTorch
Zestaw danych trenowania ImageDirectory Zestaw danych trenowania
Zestaw danych weryfikacji ImageDirectory Zestaw danych weryfikacji do oceny w każdej epoki

Parametry składnika

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 rozgrzewania >=0 Liczba całkowita 0 Ile epok rozgrzać trening
Tempo nauki >=double. Epsilon Float 0.1 Początkowy współczynnik uczenia dla optymalizatora stochastycznego spadku gradientu.
Inicjator losowy Dowolne Liczba całkowita 1 Inicjator 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 do Azure Machine Learning.