Konfigurowanie i przesyłanie zadań szkoleniowych

DOTYCZY:Zestaw SDK języka Python w wersji 1

Z tego artykułu dowiesz się, jak skonfigurować i przesłać zadania usługi Azure Machine Learning do trenowania 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 zaczyna się na komputerze lokalnym, a następnie skaluj w poziomie do klastra opartego na chmurze. Usługa Azure Machine Learning umożliwia uruchamianie skryptu na różnych miejscach docelowych obliczeniowych bez konieczności zmiany skryptu szkoleniowego.

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

Wymagania wstępne

Co to jest konfiguracja uruchamiania skryptu?

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

Możesz przesłać eksperyment treningowy 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
  • środowisko: ś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 szkoleniowego jest taki sam dla wszystkich typów obiektów docelowych obliczeniowych:

  1. Tworzenie eksperymentu do uruchomienia
  2. Tworzenie środowiska, w którym skrypt zostanie uruchomiony
  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:

Tworzenie eksperymentu

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

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 będzie uruchamiany skrypt trenowania. Jeśli w skrycie ScriptRunConfig nie określono żadnego docelowego obiektu docelowego lub jeśli compute_target='local'usługa Azure Machine Learning 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 cel obliczeniowy do trenowania modelu. Usługi Azure Databricks można używać do przygotowywania i wdrażania danych.

Uwaga

Aby utworzyć i dołączyć docelowy obiekt obliczeniowy do trenowania w klastrze Kubernetes z obsługą usługi Azure Arc, zobacz Konfigurowanie usługi Machine Learning z obsługą usługi Azure Arc

Tworzenie środowiska

Środowiska usługi Azure Machine Learning 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 wyselekcjonowanego usługi Azure Machine Learning. 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, które zmniejszają koszt przygotowania zadania. Zobacz Azure Machine Learning Curated Environments (Środowiska wyselekcjonowane usługi Azure Machine Learning ), aby uzyskać pełną listę dostępnych środowisk wyselekcjonowanych.

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

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 & środowisk oprogramowania w usłudze Azure Machine Learning.

Lokalny obiekt docelowy 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 polecenia python.user_managed_dependencies , aby użyć bieżącego środowiska języka Python (lub języka Python w określonej ścieżce).

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 (zobacz Wymagania wstępne i środowisko (myenvmy_compute_targetzobacz Tworzenie środowiska), utwórz konfigurację zadania skryptu, która uruchamia skrypt trenowania (train.py) znajdujący się w project_folder katalogu:

from azureml.core import ScriptRunConfig

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

# Set compute target
# Skip this if you are running on your local computer
script_run_config.run_config.target = my_compute_target

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 je określić za pomocą arguments parametru konstruktora ScriptRunConfig, np. 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 podejmie próbę automatycznego anulowania zadania, 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

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

Ważne

Po przesłaniu zadania szkoleniowego 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 .gitignoreprogramu . Plik .amlignore używa tej samej składni. Jeśli oba pliki istnieją, .amlignore jest używany 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 Learning. Podczas trenowania podczas zapisywania plików w folderach o nazwach danych wyjściowych i dziennikach względem katalogu głównego (./outputs i ./logs, odpowiednio), pliki zostaną automatycznie przekazane do historii zadań, aby mieć do nich dostęp po zakończeniu zadania.

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

Podobnie można zapisywać wszystkie dzienniki z zadania trenowania ./logs do folderu. Aby korzystać z integracji platformy TensorBoard usługi Azure Machine Learning, pamiętaj o zapisie dzienników tensorBoard do tego folderu. 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 usługi Git z usługą Azure Machine Learning.

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 , zależność, która wprowadza zmianę powodującą azureml-core niezgodność do azureml-core. Aby rozwiązać 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 o jwt.exceptions.DecodeErrorbłę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 wystąpi ten problem w przypadku zadań lokalnych, sprawdź wersję PyJWT zainstalowaną w środowisku, w którym uruchamiasz zadania. Obsługiwane wersje PyJWT to < 2.0.0. Odinstaluj plik PyJWT ze środowiska, jeśli wersja to >2.0.0. Sprawdzić wersję pakietu PyJWT oraz go odinstalować i zainstalować właściwą wersję można w następujący sposób:

    1. Uruchom powłokę poleceń, aktywuj środowisko conda, w którym zainstalowano środowisko azureml-core.
    2. Wprowadź pip freeze i wyszukaj PyJWTciąg , jeśli zostanie znaleziona, wyświetlana 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 przy użyciu 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 nazwanego modułu): Jeśli podczas przesyłania eksperymentów w usłudze Azure Machine Learning wystąpi błąd moduleErrors, skrypt trenowania oczekuje zainstalowania pakietu, ale nie zostanie dodany. Po podaniu nazwy pakietu usługa Azure Machine Learning 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ą narzędzia pip_packages do szacowania lub conda_packages w oparciu o źródło, na podstawie którego źródła chcesz zainstalować pakiet. Możesz również określić plik yml ze wszystkimi zależnościami przy użyciu conda_dependencies_filelub wyświetlić listę wszystkich wymagań pip w pliku txt przy użyciu pip_requirements_file parametru . Jeśli masz własny obiekt środowiska Azure Machine Learning Environment, 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.

    Obrazy platformy Docker obsługiwane przez usługę Azure Machine Learning i ich zawartość można zobaczyć w kontenerach usługi Azure Machine Learning. 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 dodać do usługi Azure Machine Learning obsługiwane obrazy i środowiska, zgłoś problem z usługą GitHub w kontenerach usługi Azure Machine Learning.

  • NameError (nazwa nie zdefiniowana), AttributeError (obiekt nie ma atrybutu): Ten wyjątek powinien pochodzić ze skryptów szkoleniowych. Możesz przyjrzeć się plikom dziennika z Azure Portal, aby uzyskać więcej informacji o określonej nazwie, która nie jest zdefiniowana lub błąd atrybutu. Z zestawu SDK można 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 zapoznać się ze skryptem szkoleniowym i naprawić błąd przed ponownym przesłaniem zadania.

  • Zadanie lub usunięcie eksperymentu: eksperymenty można zarchiwizować przy użyciu metody Experiment.archive lub z widoku karty Eksperymenty w kliencie Azure Machine Learning studio za pomocą przycisku "Archiwum eksperymentu". Ta akcja ukrywa eksperyment przed zapytaniami i widokami listy, ale nie usuwa go.

    Trwałe usuwanie pojedynczych 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 Machine Learning Service.

  • Dokument metryki jest zbyt duży: usługa Azure Machine Learning ma wewnętrzne limity dotyczące rozmiaru obiektów metryk, które można rejestrować jednocześnie z zadania szkoleniowego. 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 Learning łączy bloki o tej samej nazwie metryki z ciągłą listą.

  • Uruchamianie docelowego obiektu obliczeniowego trwa długo: obrazy platformy Docker dla celów obliczeniowych są ładowane z Azure Container Registry (ACR). Domyślnie usługa Azure Machine Learning tworzy usługę ACR korzystającą z podstawowej warstwy usług. 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