Konfigurowanie i przesyłanie zadań szkoleniowych

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

Z tego artykułu dowiesz się, jak skonfigurować i przesłać zadania usługi Azure Machine Edukacja w celu wytrenowania modeli. Fragmenty kodu wyjaśniają kluczowe części konfiguracji i przesyłania skryptu szkoleniowego. Następnie użyj jednego z przykładowych notesów , aby znaleźć kompleksowe przykłady pracy.

Podczas trenowania często rozpoczynanie pracy na komputerze lokalnym, a następnie skalowanie w poziomie do klastra opartego na chmurze. Usługa Azure Machine Edukacja umożliwia uruchamianie skryptu na różnych docelowych obiektach obliczeniowych bez konieczności zmiany skryptu trenowania.

Wystarczy zdefiniować środowisko dla każdego obiektu docelowego obliczeniowego w ramach konfiguracji zadania skryptu. Następnie, gdy chcesz uruchomić eksperyment szkoleniowy na innym docelowym obiekcie obliczeniowym, określ konfigurację zadania dla tego obliczenia.

Wymagania wstępne

Jaka jest konfiguracja uruchamiania skryptu?

Element ScriptRunConfig służy do konfigurowania informacji niezbędnych do przesyłania zadania szkoleniowego w ramach eksperymentu.

Możesz przesłać eksperyment szkoleniowy z obiektem ScriptRunConfig. Ten obiekt zawiera następujące elementy:

  • source_directory: katalog źródłowy zawierający skrypt szkoleniowy
  • script: skrypt trenowania do uruchomienia
  • compute_target: docelowy obiekt obliczeniowy do uruchomienia
  • environment: środowisko do użycia podczas uruchamiania skryptu
  • i niektóre dodatkowe opcje konfigurowalne (zobacz dokumentację referencyjną, aby uzyskać więcej informacji)

Szkolenie modelu

Wzorzec kodu do przesyłania zadania trenowania jest taki sam dla wszystkich typów obiektów docelowych obliczeniowych:

  1. Tworzenie eksperymentu do uruchomienia
  2. Tworzenie środowiska, w którym jest uruchamiany skrypt
  3. Utwórz skryptRunConfig, który określa docelowy obiekt obliczeniowy i środowisko
  4. Przesyłanie zadania
  5. Oczekiwanie na zakończenie zadania

Możesz też wykonać następujące czynności:

  • Prześlij uruchomienie funkcji HyperDrive na potrzeby dostrajania hiperparametrów.
  • Prześlij eksperyment za pośrednictwem rozszerzenia programu VS Code.

Tworzenie eksperymentu

Utwórz eksperyment w obszarze roboczym. Eksperyment jest lekkim kontenerem, który pomaga organizować przesyłanie zadań i śledzić kod.

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Wybierz docelowy obiekt obliczeniowy

Wybierz docelowy obiekt obliczeniowy, w którym zostanie uruchomiony skrypt trenowania. Jeśli w skryfikcie ScriptRunConfig nie określono żadnego docelowego obiektu obliczeniowego lub jeśli compute_target='local'Edukacja maszyny platformy Azure wykona skrypt lokalnie.

Przykładowy kod w tym artykule zakłada, że utworzono już docelowy obiekt my_compute_target obliczeniowy z sekcji "Wymagania wstępne".

Uwaga

  • Usługa Azure Databricks nie jest obsługiwana jako docelowy obiekt obliczeniowy do trenowania modelu. Usługi Azure Databricks można używać do przygotowywania i wdrażania danych.
  • Aby utworzyć i dołączyć docelowy obiekt obliczeniowy do trenowania w klastrze Kubernetes z włączoną usługą Azure Arc, zobacz Konfigurowanie maszyny z obsługą usługi Azure Arc Edukacja

Utwórz środowisko

Środowiska usługi Azure Machine Edukacja to hermetyzacja środowiska, w którym odbywa się trenowanie uczenia maszynowego. Określają pakiety języka Python, obraz platformy Docker, zmienne środowiskowe i ustawienia oprogramowania wokół skryptów trenowania i oceniania. Określają również środowiska uruchomieniowe (Python, Spark lub Docker).

Możesz zdefiniować własne środowisko lub użyć środowiska usługi Azure Machine Edukacja wyselekcjonowane. Wyselekcjonowane środowiska są domyślnie wstępnie zdefiniowane środowiska, które są dostępne w obszarze roboczym. Te środowiska są wspierane przez buforowane obrazy platformy Docker, co zmniejsza koszt przygotowania zadania. Aby uzyskać pełną listę dostępnych środowisk wyselekcjonowanych, zobacz Azure Machine Edukacja Curated Environments (Środowiska nadzorowane w usłudze Azure Machine).

W przypadku zdalnego celu obliczeniowego można użyć jednego z tych popularnych środowisk wyselekcjonowanych, aby rozpocząć od:

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Aby uzyskać więcej informacji i szczegółowe informacje o środowiskach, zobacz Tworzenie i używanie środowisk oprogramowania w usłudze Azure Machine Edukacja.

Lokalny docelowy obiekt obliczeniowy

Jeśli obiektem docelowym obliczeń jest komputer lokalny, odpowiadasz za zapewnienie, że wszystkie niezbędne pakiety są dostępne w środowisku języka Python, w którym jest uruchamiany skrypt. Użyj python.user_managed_dependencies polecenia , aby użyć bieżącego środowiska języka Python (lub języka Python w określonej ścieżce).

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

Tworzenie konfiguracji zadania skryptu

Teraz, gdy masz docelowy obiekt obliczeniowy (my_compute_targetzobacz Wymagania wstępne i środowisko (myenvzobacz Tworzenie środowiska), utwórz konfigurację zadania skryptu uruchamiającą skrypt szkoleniowy (train.py) znajdujący się w katalogu project_folder:

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

Jeśli nie określisz środowiska, zostanie utworzone domyślne środowisko.

Jeśli masz argumenty wiersza polecenia, które chcesz przekazać do skryptu trenowania, możesz określić je za pomocą arguments parametru konstruktora ScriptRunConfig, na przykład arguments=['--arg1', arg1_val, '--arg2', arg2_val].

Jeśli chcesz zastąpić domyślny maksymalny czas dozwolony dla zadania, możesz to zrobić za pomocą parametru max_run_duration_seconds . System próbuje automatycznie anulować zadanie, jeśli trwa dłużej niż ta wartość.

Określanie konfiguracji zadania rozproszonego

Jeśli chcesz uruchomić zadanie trenowania rozproszonego, podaj konfigurację specyficzną dla zadania rozproszonego do parametru distributed_job_config . Obsługiwane typy konfiguracji to MpiConfiguration, TensorflowConfiguration i PyTorchConfiguration.

Aby uzyskać więcej informacji i przykładów dotyczących uruchamiania rozproszonych zadań Horovod, TensorFlow i PyTorch, zobacz:

Przesyłanie eksperymentu

DOTYCZY: Zestaw SDK języka Python azureml w wersji 1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Ważne

Po przesłaniu zadania trenowania zostanie utworzona migawka katalogu zawierającego skrypty szkoleniowe i wysłana do docelowego obiektu obliczeniowego. Jest on również przechowywany w ramach eksperymentu w obszarze roboczym. Jeśli zmienisz pliki i ponownie prześlesz zadanie, zostaną przekazane tylko zmienione pliki.

Aby zapobiec dołączaniu niepotrzebnych plików do migawki, utwórz plik ignoruj (.gitignore lub .amlignore) w katalogu. Dodaj do tego pliku katalogi i pliki do wykluczenia. Aby uzyskać więcej informacji na temat składni używanej w tym pliku, zobacz składnię i wzorce dla programu .gitignore. Plik .amlignore używa tej samej składni. Jeśli oba pliki istnieją, .amlignore zostanie użyty plik, a .gitignore plik jest nieużywany.

Aby uzyskać więcej informacji na temat migawek, zobacz Migawki.

Ważne

Foldery specjalne Dwa foldery, dane wyjściowe i dzienniki otrzymują specjalne traktowanie przez usługę Azure Machine Edukacja. Podczas trenowania podczas zapisywania plików w folderach o nazwach danych wyjściowych i dziennikach powiązanych z katalogiem głównym (./outputs i ./logs, pliki zostaną automatycznie przekazane do historii zadań, aby mieć do nich dostęp po zakończeniu zadania.

Aby utworzyć artefakty podczas trenowania (np. pliki modelu, punkty kontrolne, pliki danych lub wykreśliczone obrazy), zapisz je w folderze ./outputs .

Podobnie można zapisywać dzienniki z zadania trenowania do ./logs folderu. Aby korzystać z integracji narzędzia TensorBoard z usługą Azure Machine Edukacja, pamiętaj, aby zapisać dzienniki narzędzia TensorBoard w tym folderze. Gdy zadanie jest w toku, będzie można uruchomić narzędzie TensorBoard i przesłać strumieniowo te dzienniki. Później będzie można również przywrócić dzienniki z dowolnego z poprzednich zadań.

Aby na przykład pobrać plik zapisany w folderze outputs na maszynę lokalną po zadaniu zdalnego trenowania: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Śledzenie i integracja z usługą Git

Po uruchomieniu zadania szkoleniowego, w którym katalog źródłowy jest lokalnym repozytorium Git, informacje o repozytorium są przechowywane w historii zadań. Aby uzyskać więcej informacji, zobacz Integracja z usługą Git dla usługi Azure Machine Edukacja.

Przykłady notesów

Zapoznaj się z tymi notesami, aby zapoznać się z przykładami konfigurowania zadań dla różnych scenariuszy szkoleniowych:

Instrukcję uruchamiania notesów znajdziesz w artykule Use Jupyter notebooks to explore this service (Eksplorowanie tej usługi za pomocą notesów Jupyter).

Rozwiązywanie problemów

  • AttributeError: obiekt RoundTripLoader nie ma atrybutu "comment_handling": ten błąd pochodzi z nowej wersji (v0.17.5) ruamel-yamlklasy , azureml-core zależność, która wprowadza zmianę powodującą niezgodność .azureml-core Aby naprawić ten błąd, odinstaluj ruamel-yaml , uruchamiając pip uninstall ruamel-yaml i instalując inną wersję ruamel-yamlprogramu ; obsługiwane wersje to v0.15.35 do wersji 0.17.4 (włącznie). Możesz to zrobić, uruchamiając polecenie pip install "ruamel-yaml>=0.15.35,<0.17.5".

  • Zadanie kończy się niepowodzeniem z komunikatem jwt.exceptions.DecodeErroro błędzie : Dokładny komunikat o błędzie: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Rozważ uaktualnienie do najnowszej wersji azureml-core: pip install -U azureml-core.

    Jeśli. Napotkasz ten problem w przypadku zadań lokalnych, sprawdź wersję PyJWT zainstalowaną w środowisku, w którym znajduje się . uruchamiasz zadania. Obsługiwane wersje PyJWT to < 2.0.0. Odinstaluj plik PyJWT ze środowiska, jeśli wersja to >2.0.0. Możesz sprawdzić wersję PyJWT, odinstalować i zainstalować odpowiednią wersję w następujący sposób:

    1. Uruchom powłokę poleceń, aktywuj środowisko conda, w którym zainstalowano narzędzie azureml-core.
    2. Wprowadź pip freeze i wyszukaj PyJWTciąg , jeśli zostanie znaleziona, wyświetlona wersja powinna mieć < wartość 2.0.0
    3. Jeśli wymieniona wersja nie jest obsługiwaną wersją, pip uninstall PyJWT w powłoce poleceń i wprowadź wartość y w celu potwierdzenia.
    4. Zainstaluj przy użyciu polecenia pip install 'PyJWT<2.0.0'

    Jeśli. Przesyłasz środowisko utworzone przez użytkownika za pomocą zadania, rozważ użycie najnowszej wersji azureml-core w tym środowisku. Wersje >= 1.18.0 rdzenia azureml już przypiąć PyJWT < 2.0.0. Jeśli musisz użyć wersji azureml-core < 1.18.0 w przesłanym środowisku, upewnij się, że w zależnościach potoku określ PyJWT < 2.0.0.

  • ModuleErrors (brak modułu o nazwie): Jeśli . Podczas przesyłania eksperymentów w usłudze Azure Machine Edukacja skrypt szkoleniowy oczekuje zainstalowania pakietu, ale nie został dodany. Po podaniu nazwy pakietu usługa Azure Machine Edukacja instaluje pakiet w środowisku używanym do zadania szkoleniowego.

    Jeśli. Używasz narzędzia do szacowania do przesyłania eksperymentów, możesz określić nazwę pakietu za pomocą pip_packages parametru lub conda_packages w narzędziu do szacowania na podstawie źródła, które chcesz zainstalować pakiet. Możesz również określić plik yml ze wszystkimi zależnościami przy użyciu lub wyświetlić listę wszystkich wymagań pip w pliku txt przy użyciu conda_dependencies_filepip_requirements_file parametru . Jeśli masz własny obiekt środowiska usługi Azure Machine Edukacja, który chcesz zastąpić domyślny obraz używany przez narzędzie do szacowania, możesz określić to środowisko za pomocą environment parametru konstruktora narzędzia do szacowania.

    Usługa Azure Machine Edukacja konserwowane obrazy platformy Docker i ich zawartość można zobaczyć w usłudze Azure Machine Edukacja Containers. Zależności specyficzne dla struktury są wymienione w odpowiedniej dokumentacji platformy:

    Uwaga

    Jeśli uważasz, że konkretny pakiet jest wystarczająco powszechny, aby można go było dodać w usłudze Azure Machine Edukacja konserwowane obrazy i środowiska, zgłoś problem z usługą GitHub w usłudze Azure Machine Edukacja Containers.

  • NameError (nie zdefiniowano nazwy), AttributeError (obiekt nie ma atrybutu): Ten wyjątek powinien pochodzić ze skryptów szkoleniowych. Aby uzyskać więcej informacji na temat niezdefiniowane nazwy lub błędu atrybutu, możesz zapoznać się z plikami dziennika w witrynie Azure Portal. Z zestawu SDK możesz użyć run.get_details() polecenia , aby wyświetlić komunikat o błędzie. Spowoduje to również wyświetlenie listy wszystkich plików dziennika wygenerowanych dla zadania. Pamiętaj, aby przyjrzeć się skryptowi szkoleniowemu i naprawić błąd przed ponownym przesłaniem zadania.

  • Usuwanie zadania lub eksperymentu: eksperymenty można zarchiwizować przy użyciu metody Experiment.archive lub w widoku karty Eksperyment w usłudze Azure Machine Edukacja studio za pomocą przycisku "Archiwum eksperymentu". Ta akcja ukrywa eksperyment przed zapytaniami i widokami listy, ale nie powoduje jego usunięcia.

    Trwałe usuwanie poszczególnych eksperymentów lub zadań nie jest obecnie obsługiwane. Aby uzyskać więcej informacji na temat usuwania zasobów obszaru roboczego, zobacz Eksportowanie lub usuwanie danych obszaru roboczego usługi Edukacja Maszyny.

  • Dokument metryki jest zbyt duży: usługa Azure Machine Edukacja ma wewnętrzne limity dotyczące rozmiaru obiektów metryk, które mogą być rejestrowane jednocześnie z zadania trenowania. Jeśli w trakcie rejestrowania metryki z wartościami listy wystąpi błąd „Dokument metryki jest za duży”, spróbuj podzielić listę na mniejsze fragmenty, na przykład:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Wewnętrznie usługa Azure Machine Edukacja łączy bloki z tą samą nazwą metryki w ciągłej liście.

  • Uruchamianie docelowego obiektu obliczeniowego trwa długo: obrazy platformy Docker dla celów obliczeniowych są ładowane z usługi Azure Container Registry (ACR). Domyślnie usługa Azure Machine Edukacja tworzy usługę ACR korzystającą z podstawowej warstwy usługi. Zmiana usługi ACR dla obszaru roboczego na warstwę Standardowa lub Premium może skrócić czas kompilowania i ładowania obrazów. Aby uzyskać więcej informacji, zobacz Warstwy usługi Azure Container Registry.

Następne kroki