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 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 Learning 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
- Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś
- Zestaw SDK usługi Azure Machine Learning dla języka Python (wersja 1) (>= 1.13.0)
- Obszar roboczy usługi Azure Machine Learning,
ws
- Docelowy obiekt obliczeniowy,
my_compute_target
. Tworzenie docelowego obiektu obliczeniowego
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:
- Tworzenie eksperymentu do uruchomienia
- Tworzenie środowiska, w którym jest uruchamiany skrypt
- Utwórz skryptRunConfig, który określa docelowy obiekt obliczeniowy i środowisko
- Przesyłanie zadania
- 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 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 skrycie ScriptRunConfig nie określono żadnego docelowego obiektu obliczeniowego 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 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 usługi Machine Learning z obsługą usługi Azure Arc
Utwórz środowisko
Ś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ć nadzorowanego środowiska 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, co zmniejsza koszt przygotowania zadania. Aby uzyskać pełną listę dostępnych środowisk wyselekcjonowanych, zobacz Azure Machine Learning Curated Environments (Środowiska nadzorowane w usłudze Azure Machine Learning).
W przypadku zdalnego celu obliczeniowego można użyć jednego z tych popularnych środowisk wyselekcjonowanych, aby rozpocząć od:
DOTYCZY: Zestaw SDK języka Python 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 Learning.
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 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_target
zobacz Wymagania wstępne i środowisko (myenv
zobacz 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 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 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 Learning. 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 biblioteki TensorBoard usługi Azure Machine Learning, pamiętaj, aby zapisać dzienniki 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 Learning.
Przykłady notesów
Zapoznaj się z tymi notesami, aby zapoznać się z przykładami konfigurowania zadań dla różnych scenariuszy szkoleniowych:
- Szkolenie dotyczące różnych celów obliczeniowych
- Trenowanie za pomocą platform uczenia maszynowego
- tutorials/img-classification-part1-training.ipynb
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-yaml
klasy ,azureml-core
zależność, która wprowadza zmianę powodującą niezgodność .azureml-core
Aby naprawić ten błąd, odinstalujruamel-yaml
, uruchamiającpip uninstall ruamel-yaml
i instalując inną wersjęruamel-yaml
programu ; obsługiwane wersje to v0.15.35 do wersji 0.17.4 (włącznie). Możesz to zrobić, uruchamiając poleceniepip install "ruamel-yaml>=0.15.35,<0.17.5"
.Zadanie kończy się niepowodzeniem z komunikatem
jwt.exceptions.DecodeError
o 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:
- Uruchom powłokę poleceń, aktywuj środowisko conda, w którym zainstalowano narzędzie azureml-core.
- Wprowadź
pip freeze
i wyszukajPyJWT
ciąg , jeśli zostanie znaleziona, wyświetlona wersja powinna mieć < wartość 2.0.0 - Jeśli wymieniona wersja nie jest obsługiwaną wersją,
pip uninstall PyJWT
w powłoce poleceń i wprowadź wartość y w celu potwierdzenia. - 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 Learning skrypt trenowania oczekuje zainstalowania pakietu, ale nie został dodany. Po podaniu nazwy pakietu usługa Azure Machine Learning zainstaluje 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 lubconda_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ń w pliku txt przy użyciuconda_dependencies_file
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 wspólny, aby można go było dodać w usłudze Azure Machine Learning obsługiwanych obrazów i środowisk, zgłoś problem z usługą GitHub w kontenerach usługi Azure Machine Learning.
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 kliencie usługi Azure Machine Learning 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 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 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 Learning 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
- Samouczek: trenowanie i wdrażanie modelu używa zarządzanego celu obliczeniowego do trenowania modelu.
- Zobacz, jak trenować modele przy użyciu określonych struktur uczenia maszynowego, takich jak Scikit-learn, TensorFlow i PyTorch.
- Dowiedz się, jak efektywnie dostroić hiperparametry w celu tworzenia lepszych modeli.
- Po wytrenowanym modelu dowiedz się , jak i gdzie wdrażać modele.
- Wyświetl dokumentację zestawu SDK klasy ScriptRunConfig.
- Korzystanie z usługi Azure Machine Learning z sieciami wirtualnymi platformy Azure