Metryki, parametry i pliki dziennika za pomocą biblioteki MLflow
DOTYCZY: Zestaw PYTHON SDK azure-ai-ml w wersji 2 (bieżąca)
Usługa Azure Machine Learning obsługuje rejestrowanie i śledzenie eksperymentów przy użyciu rozwiązania MLflow Tracking. Modele, metryki, parametry i artefakty można rejestrować za pomocą biblioteki MLflow lokalnie na komputerze lub w środowisku chmury.
Ważne
W przeciwieństwie do zestawu Azure Machine Learning SDK w wersji 1 nie ma funkcji rejestrowania w zestawie SDK usługi Azure Machine Learning dla języka Python (wersja 2). Jeśli wcześniej użyto zestawu Sdk usługi Azure Machine Learning w wersji 1, zalecamy użycie biblioteki MLflow do śledzenia eksperymentów. Aby uzyskać szczegółowe wskazówki, zobacz Migrowanie rejestrowania z zestawu SDK w wersji 1 do biblioteki MLflow .
Dzienniki mogą ułatwić diagnozowanie błędów i ostrzeżeń lub śledzenie metryk wydajności, takich jak parametry i wydajność modelu. W tym artykule wyjaśniono, jak włączyć rejestrowanie w następujących scenariuszach:
- Metryki dzienników, parametry i modele podczas przesyłania zadań.
- Śledzenie przebiegów podczas interaktywnego trenowania.
- Metryki dzienników asynchronicznie.
- Wyświetlanie informacji diagnostycznych dotyczących trenowania.
Napiwek
W tym artykule pokazano, jak monitorować proces trenowania modelu. Jeśli interesuje Cię monitorowanie użycia zasobów i zdarzeń z usługi Azure Machine Learning, takich jak limity przydziału, ukończone zadania szkoleniowe lub ukończone wdrożenia modelu, zobacz Monitorowanie usługi Azure Machine Learning.
Wymagania wstępne
Musisz mieć obszar roboczy usługi Azure Machine Learning. Jeśli go nie masz, zobacz Tworzenie zasobów obszaru roboczego.
Musisz mieć
mlflow
zainstalowane pakiety iazureml-mlflow
. Jeśli tego nie zrobisz, użyj następującego polecenia, aby zainstalować je w środowisku projektowym:pip install mlflow azureml-mlflow
Uwaga
W przypadku asynchronicznego rejestrowania metryk należy mieć
MLflow
wersję 2.8.0 lub nowszą iazureml-mlflow
wersję 1.55 lub nowszą.Jeśli wykonujesz zdalne śledzenie (śledzenie eksperymentów uruchamianych poza usługą Azure Machine Learning), skonfiguruj rozwiązanie MLflow do śledzenia eksperymentów. Aby uzyskać więcej informacji, zobacz Konfigurowanie platformy MLflow dla usługi Azure Machine Learning.
Aby rejestrować metryki, parametry, artefakty i modele w eksperymentach w usłudze Azure Machine Learning przy użyciu biblioteki MLflow, po prostu zaimportuj rozwiązanie MLflow do skryptu:
import mlflow
Konfigurowanie eksperymentów
Platforma MLflow organizuje informacje w eksperymentach i przebiegach (w usłudze Azure Machine Learning przebiegi są nazywane zadaniami). Istnieją pewne różnice w sposobie ich konfigurowania w zależności od sposobu uruchamiania kodu:
Podczas trenowania interakcyjnego, takiego jak w notesie Jupyter Notebook, należy użyć następującego wzorca:
- Utwórz lub ustaw aktywny eksperyment.
- Uruchom zadanie.
- Użyj metod rejestrowania, aby rejestrować metryki i inne informacje.
- Zakończ zadanie.
Na przykład poniższy fragment kodu konfiguruje eksperyment, a następnie rejestruje podczas zadania:
import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")
# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run
mlflow.end_run()
Napiwek
Technicznie nie musisz wywoływać start_run()
, ponieważ zostanie utworzone nowe uruchomienie, jeśli nie istnieje i wywołasz interfejs API rejestrowania. W takim przypadku możesz użyć mlflow.active_run()
polecenia , aby pobrać aktualnie używany przebieg. Aby uzyskać więcej informacji, zobacz mlflow.active_run().
Możesz również użyć paradygmatu menedżera kontekstu:
import mlflow
mlflow.set_experiment("mlflow-experiment")
# Start the run, log metrics, end the run
with mlflow.start_run() as run:
# Run started when context manager is entered, and ended when context manager exits
mlflow.log_metric('mymetric', 1)
mlflow.log_metric('anothermetric',1)
pass
Po uruchomieniu nowego przebiegu mlflow.start_run
za pomocą polecenia może być przydatne wskazanie parametru run_name
, który następnie przekłada się na nazwę przebiegu w interfejsie użytkownika usługi Azure Machine Learning i ułatwia szybsze identyfikowanie przebiegu:
with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
mlflow.log_metric('mymetric', 1)
mlflow.log_metric('anothermetric',1)
Aby uzyskać więcej informacji na temat interfejsów API rejestrowania MLflow, zobacz dokumentację platformy MLflow.
Parametry dziennika
Platforma MLflow obsługuje parametry rejestrowania używane przez eksperymenty. Parametry mogą być dowolnego typu i mogą być rejestrowane przy użyciu następującej składni:
mlflow.log_param("num_epochs", 20)
Platforma MLflow oferuje również wygodny sposób rejestrowania wielu parametrów, wskazując wszystkie z nich przy użyciu słownika. Kilka struktur może również przekazywać parametry do modeli przy użyciu słowników, dlatego jest to wygodny sposób rejestrowania ich w eksperymencie.
params = {
"num_epochs": 20,
"dropout_rate": .6,
"objective": "binary_crossentropy"
}
mlflow.log_params(params)
Metryki dzienników
Metryki, podobnie jak w przeciwieństwie do parametrów, są zawsze liczbowe i mogą być rejestrowane synchronicznie lub asynchronicznie. Gdy metryki są rejestrowane, są natychmiast dostępne do użycia po powrocie wywołania. W poniższej tabeli opisano sposób rejestrowania określonych typów liczbowych:
Zarejestrowana wartość | Przykładowy kod | Uwagi |
---|---|---|
Rejestrowanie wartości liczbowej (int lub float) | mlflow.log_metric("my_metric", 1) |
|
Rejestrowanie wartości liczbowej (int lub float) w czasie | mlflow.log_metric("my_metric", 1, step=1) |
Użyj parametru step , aby wskazać krok, w którym rejestrujesz wartość metryki. Może to być dowolna liczba całkowita. Wartość domyślna to zero. |
Rejestrowanie wartości logicznej | mlflow.log_metric("my_metric", 0) |
0 = Prawda, 1 = Fałsz |
Ważne
Zagadnienia dotyczące wydajności: jeśli musisz rejestrować wiele metryk (lub wiele wartości dla tej samej metryki), unikaj wykonywania wywołań mlflow.log_metric
w pętlach. Lepszą wydajność można osiągnąć przy użyciu rejestrowania asynchronicznego z usługą mlflow.log_metric("metric1", 9.42, synchronous=False)
lub przez rejestrowanie partii metryk.
Asynchroniczne metryki dzienników
Rozwiązanie MLflow umożliwia również rejestrowanie metryk w sposób asynchroniczny. Rejestrowanie metryki asynchronicznej jest szczególnie przydatne w przypadkach, gdy duże zadania szkoleniowe z dziesiątkami węzłów obliczeniowych mogą być uruchomione i próbuje rejestrować metryki jednocześnie. Jest to również przydatne, gdy niewielka liczba węzłów próbuje zarejestrować dużą liczbę metryk.
Rejestrowanie metryki asynchronicznej umożliwia natychmiastowe rejestrowanie metryk, unikając oczekiwania na zmaterializowanie ich w usłudze zaplecza. Takie podejście skaluje do dużych procedur szkoleniowych, które rejestrują setki tysięcy wartości metryk i jest to zalecane podejście.
Usługa MLflow domyślnie synchronizuje metryki, jednak w dowolnym momencie można zmienić to zachowanie:
import mlflow
mlflow.config.enable_async_logging()
Tę samą właściwość można ustawić przy użyciu zmiennej środowiskowej:
export MLFLOW_ENABLE_ASYNC_LOGGING=True
Aby rejestrować określone metryki asynchronicznie, użyj interfejsu API rejestrowania MLflow, jak zwykle, ale dodaj dodatkowy parametr synchronous=False
.
import mlflow
with mlflow.start_run():
# (...)
mlflow.log_metric("metric1", 9.42, synchronous=False)
# (...)
Gdy używasz log_metric(synchronous=False)
metody , kontrolka jest automatycznie zwracana do elementu wywołującego po zaakceptowaniu operacji, ale wartość nie jest dostępna do odczytu wmediately. Asynchroniczne rejestrowanie metryk gwarantuje kolejność i są utrwalane ze znacznikiem czasu rejestrowania.
Ważne
Nawet w przypadku usługi synchronous=False
Azure Machine Learning gwarantuje kolejność metryk.
Jeśli musisz poczekać na utrwalone określoną wartość w zapleczu, możesz użyć operacji metryki zwróconej do oczekiwania, jak pokazano w poniższym przykładzie:
import mlflow
with mlflow.start_run():
# (...)
run_operation = mlflow.log_metric("metric1", 9.42, synchronous=False)
# (...)
run_operation.wait()
# (...)
Możesz asynchronicznie rejestrować jedną metrykę jednocześnie lub rejestrować partię metryk, jak pokazano w poniższym przykładzie:
import mlflow
import time
from mlflow.entities import Metric
with mlflow.start_run() as current_run:
mlflow_client = mlflow.tracking.MlflowClient()
metrics = {"metric-0": 3.14, "metric-1": 6.28}
timestamp = int(time.time() * 1000)
metrics_arr = [Metric(key, value, timestamp, 0) for key, value in metrics.items()]
run_operation = mlflow_client.log_batch(
run_id=current_run.info.run_id,
metrics=metrics_arr,
synchronous=False,
)
Operacja wait()
jest również dostępna podczas rejestrowania partii metryk:
run_operation.wait()
Nie musisz wywoływać wait()
procedur, jeśli nie potrzebujesz natychmiastowego dostępu do wartości metryk. Usługa Azure Machine Learning automatycznie czeka, gdy zadanie zakończy się, aby sprawdzić, czy istnieje oczekująca metryka, która ma zostać utrwalone. Po zakończeniu zadania w usłudze Azure Machine Learning wszystkie metryki mają gwarancję trwałości.
Krzywe dziennika lub lista wartości
Krzywe (lub lista wartości liczbowych) można rejestrować za pomocą biblioteki MLflow, rejestrując tę samą metrykę wiele razy. W poniższym przykładzie pokazano, jak to zrobić:
list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time
client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id,
metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])
Rejestrowanie obrazów
Platforma MLflow obsługuje dwa sposoby rejestrowania obrazów. Oba sposoby utrwalają dany obraz jako artefakt wewnątrz przebiegu.
Zarejestrowana wartość | Przykładowy kod | Uwagi |
---|---|---|
Rejestrowanie metryk numpy lub obiektów obrazów PIL | mlflow.log_image(img, "figure.png") |
img powinien być wystąpieniem numpy.ndarray elementu lub PIL.Image.Image . figure.png to nazwa artefaktu wygenerowanego wewnątrz przebiegu. Nie musi to być istniejący plik. |
Wykres matlotlib dziennika lub plik obrazu | mlflow.log_figure(fig, "figure.png") |
figure.png to nazwa artefaktu wygenerowanego wewnątrz przebiegu. Nie musi to być istniejący plik. |
Plik dzienników
Ogólnie rzecz biorąc, pliki w MLflow są nazywane artefaktami. Artefakty można rejestrować na wiele sposobów w usłudze Mlflow:
Zarejestrowana wartość | Przykładowy kod | Uwagi |
---|---|---|
Tekst dziennika w pliku tekstowym | mlflow.log_text("text string", "notes.txt") |
Tekst jest utrwalany wewnątrz przebiegu w pliku tekstowym o nazwie notes.txt. |
Słowniki dziennika jako pliki JSON i YAML | mlflow.log_dict(dictionary, "file.yaml" |
dictionary jest obiektem słownika zawierającym całą strukturę, którą chcesz zachować jako plik JSON lub YAML. |
Rejestrowanie pliku trywialnego już istniejącego | mlflow.log_artifact("path/to/file.pkl") |
Pliki są zawsze rejestrowane w katalogu głównym przebiegu. Jeśli artifact_path zostanie podany, plik jest rejestrowany w folderze, jak wskazano w tym parametrze. |
Rejestrowanie wszystkich artefaktów w istniejącym folderze | mlflow.log_artifacts("path/to/folder") |
Struktura folderów jest kopiowana do przebiegu, ale wskazany folder główny nie jest uwzględniony. |
Napiwek
Podczas rejestrowania dużych plików za pomocą log_artifact
polecenia lub log_model
mogą wystąpić błędy przekroczenia limitu czasu przed zakończeniem przekazywania pliku. Rozważ zwiększenie wartości limitu czasu przez dostosowanie zmiennej środowiskowej AZUREML_ARTIFACTS_DEFAULT_TIMEOUT
. Wartość domyślna to 300 (sekundy).
Modele dzienników
MLflow wprowadza koncepcję modeli jako sposób tworzenia pakietów wszystkich artefaktów wymaganych do działania danego modelu. Modele w narzędziu MLflow są zawsze folderem z dowolną liczbą plików, w zależności od struktury używanej do generowania modelu. Modele rejestrowania mają zaletę śledzenia wszystkich elementów modelu jako pojedynczej jednostki, którą można zarejestrować , a następnie wdrożyć. Ponadto modele MLflow korzystają z zalet wdrażania bez kodu i mogą być używane z pulpitem nawigacyjnym odpowiedzialnej sztucznej inteligencji w programie Studio. Aby uzyskać więcej informacji, zobacz From artifacts to models in MLflow (Od artefaktów do modeli w usłudze MLflow).
Aby zapisać model z przebiegu trenowania, użyj interfejsu log_model()
API dla platformy, z którą pracujesz. Na przykład mlflow.sklearn.log_model(). Aby uzyskać więcej informacji, zobacz Rejestrowanie modeli MLflow. Aby przeprowadzić migrację istniejących modeli do platformy MLflow, zobacz Konwertowanie modeli niestandardowych na MLflow.
Napiwek
Podczas rejestrowania dużych modeli może wystąpić błąd Failed to flush the queue within 300 seconds
. Zwykle oznacza to, że operacja przekracza limit czasu przed ukończeniem przekazywania artefaktów modelu. Rozważ zwiększenie wartości limitu czasu przez dostosowanie zmiennej środowiskowej AZUREML_ARTIFACTS_DEFAULT_TIMEOUT
.
Automatyczne rejestrowanie
Dzięki usłudze Azure Machine Learning i MLflow użytkownicy mogą rejestrować metryki, parametry modelu i artefakty modelu automatycznie podczas trenowania modelu. Każda struktura decyduje o tym, co ma być śledzone automatycznie. Obsługiwane są różne popularne biblioteki uczenia maszynowego. Dowiedz się więcej o automatycznym rejestrowaniu za pomocą biblioteki MLflow.
Aby włączyć automatyczne rejestrowanie, wstaw następujący kod przed kodem treningowym:
mlflow.autolog()
Napiwek
Możesz kontrolować, co jest automatycznie rejestrowane za pomocą autologu. Na przykład, jeśli wskazujesz mlflow.autolog(log_models=False)
, MLflow rejestruje wszystko, ale modele dla Ciebie. Taka kontrola jest przydatna w przypadkach, w których chcesz ręcznie rejestrować modele, ale nadal korzystaj z automatycznego rejestrowania metryk i parametrów. Należy również zauważyć, że niektóre struktury mogą wyłączyć automatyczne rejestrowanie modeli, jeśli wytrenowany model wykracza poza określone granice. Takie zachowanie zależy od używanego smaku i zalecamy wyświetlenie dokumentacji, jeśli tak jest.
Wyświetlanie informacji o zadaniach lub przebiegach za pomocą biblioteki MLflow
Zarejestrowane informacje można wyświetlić za pomocą biblioteki MLflow za pośrednictwem obiektu MLflow.entities.Run :
import mlflow
run = mlflow.get_run(run_id="<RUN_ID>")
Metryki, parametry i tagi przebiegu można wyświetlić w polu danych obiektu przebiegu.
metrics = run.data.metrics
params = run.data.params
tags = run.data.tags
Uwaga
Słownik metryk zwracany przez mlflow.get_run
lub mlflow.search_runs
zwraca tylko ostatnio zarejestrowaną wartość dla danej nazwy metryki. Jeśli na przykład rejestrujesz metrykę o nazwie iteration
wiele razy z wartościami, 1, 2, a następnie 3, a następnie 4, tylko 4 jest zwracane podczas wywoływania .run.data.metrics['iteration']
Aby uzyskać wszystkie metryki zarejestrowane dla konkretnej nazwy metryki, możesz użyć MlFlowClient.get_metric_history()
polecenia zgodnie z opisem w przykładzie Pobieranie parametrów i metryk z przebiegu.
Napiwek
Platforma MLflow może pobierać metryki i parametry z wielu przebiegów w tym samym czasie, co pozwala na szybkie porównania w wielu próbach. Aby dowiedzieć się więcej, zobacz Zapytania i porównanie eksperymentów i przebiegów za pomocą biblioteki MLflow.
Platforma MLflow może wykonywać zapytania dotyczące dowolnego artefaktu zarejestrowanego przez przebieg. Nie można uzyskać dostępu do artefaktów przy użyciu samego obiektu run, a zamiast tego należy użyć klienta MLflow:
client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")
Ta metoda wyświetla listę wszystkich artefaktów zarejestrowanych w przebiegu, ale pozostają przechowywane w magazynie artefaktów (Azure Machine Learning Storage). Aby pobrać dowolny z nich, użyj metody download_artifact
:
file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")
Aby uzyskać więcej informacji, zobacz Pobieranie metryk, parametrów, artefaktów i modeli.
Wyświetlanie informacji o zadaniach lub uruchomieniach w programie Studio
Możesz przeglądać ukończone rekordy zadań, w tym zarejestrowane metryki, w usłudze Azure Machine Learning Studio.
Przejdź do karty Zadania. Aby wyświetlić wszystkie zadania w obszarze roboczym w ramach eksperymentów, wybierz kartę Wszystkie zadania. Zadania dla określonych eksperymentów można przejść do szczegółów, stosując filtr Eksperyment na górnym pasku menu. Wybierz interesujące zadanie, aby wprowadzić widok szczegółów, a następnie wybierz kartę Metryki .
Wybierz zarejestrowane metryki, aby renderować wykresy po prawej stronie. Wykresy można dostosować, stosując wygładzenie, zmianę koloru lub kreślenie wielu metryk na jednym grafie. Możesz również zmienić rozmiar i zmienić układ zgodnie z życzeniem. Po utworzeniu żądanego widoku możesz zapisać go do użytku w przyszłości i udostępnić go kolegom z zespołu przy użyciu linku bezpośredniego.
Wyświetlanie i pobieranie dzienników diagnostycznych
Pliki dziennika to podstawowy zasób do debugowania obciążeń usługi Azure Machine Learning. Po przesłaniu zadania szkoleniowego przejdź do określonego przebiegu, aby wyświetlić jego dzienniki i dane wyjściowe:
- Przejdź do karty Zadania .
- Wybierz identyfikator runID dla określonego przebiegu.
- Wybierz pozycję Dane wyjściowe i dzienniki w górnej części strony.
- Wybierz pozycję Pobierz wszystko , aby pobrać wszystkie dzienniki do folderu zip.
- Możesz również pobrać poszczególne pliki dziennika, wybierając plik dziennika i wybierając pozycję Pobierz
folder user_logs
Ten folder zawiera informacje o dziennikach wygenerowanych przez użytkownika. Ten folder jest domyślnie otwarty, a std_log.txt dziennik jest zaznaczony. Std_log.txt to miejsce, w którym są wyświetlane dzienniki kodu (na przykład instrukcje drukowania). Ten plik zawiera stdout
dzienniki i stderr
dzienniki ze skryptu sterującego i skryptu trenowania— jeden na proces. W większości przypadków dzienniki są monitorowane tutaj.
folder system_logs
Ten folder zawiera dzienniki generowane przez usługę Azure Machine Learning i są domyślnie zamknięte. Dzienniki generowane przez system są pogrupowane w różne foldery na podstawie etapu zadania w środowisku uruchomieniowym.
Inne foldery
W przypadku zadań szkoleniowych w klastrach z wieloma obliczeniami dzienniki są obecne dla każdego węzła IP. Struktura dla każdego węzła jest taka sama jak zadania pojedynczego węzła. Istnieje jeszcze jeden folder dzienników dla ogólnych dzienników wykonywania, stderr i stdout dzienników.
Usługa Azure Machine Learning rejestruje informacje z różnych źródeł podczas trenowania, takie jak Rozwiązanie AutoML lub kontener platformy Docker, który uruchamia zadanie trenowania. Wiele z tych dzienników nie jest udokumentowanych. Jeśli napotkasz problemy i skontaktujesz się z pomocą techniczną firmy Microsoft, mogą one być w stanie użyć tych dzienników podczas rozwiązywania problemów.