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 Edukacja 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 Edukacja SDK w wersji 1 nie ma funkcji rejestrowania w zestawie SDK usługi Azure Machine Edukacja dla języka Python (wersja 2). Jeśli wcześniej użyto zestawu Azure Machine Edukacja SDK 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.
  • 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 Edukacja, takich jak limity przydziału, ukończone zadania szkoleniowe lub ukończone wdrożenia modelu, zobacz Monitorowanie usługi Azure Machine Edukacja.

Wymagania wstępne

  • Musisz mieć obszar roboczy usługi Azure Machine Edukacja. Jeśli go nie masz, zobacz Tworzenie zasobów obszaru roboczego.

  • Musisz mieć mlflow zainstalowane pakiety i azureml-mlflow . Jeśli tego nie zrobisz, użyj następującego polecenia, aby zainstalować je w środowisku projektowym:

    pip install mlflow azureml-mlflow
    
  • Jeśli wykonujesz zdalne śledzenie (śledzenie eksperymentów uruchamianych poza usługą Azure Machine Edukacja), skonfiguruj rozwiązanie MLflow do śledzenia eksperymentów. Aby uzyskać więcej informacji, zobacz Configure MLflow for Azure Machine Edukacja (Konfigurowanie platformy MLflow dla usługi Azure Machine Edukacja).

  • Aby rejestrować metryki, parametry, artefakty i modele w eksperymentach w usłudze Azure Machine Edukacja 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 Edukacja 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:

  1. Utwórz lub ustaw aktywny eksperyment.
  2. Uruchom zadanie.
  3. Użyj metod rejestrowania, aby rejestrować metryki i inne informacje.
  4. 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_runza pomocą polecenia może być przydatne wskazanie parametru run_name, który następnie przekłada się na nazwę przebiegu w usłudze Azure Machine Edukacja interfejsie użytkownika i pomaga zidentyfikować przebieg szybciej:

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 przypadku parametrów, są zawsze liczbowe. 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ąć, rejestrując partię metryk. Użyj metody mlflow.log_metrics , która akceptuje słownik ze wszystkimi metrykami, które chcesz rejestrować jednocześnie, lub użyj MLflowClient.log_batch , która akceptuje wiele typów elementów do rejestrowania. Zobacz Przykładowe krzywe dziennika lub lista wartoś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_modelmogą 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 Edukacja 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/uruchomieniach 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 Edukacja 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/uruchomieniach w programie Studio

Możesz przeglądać ukończone rekordy zadań, w tym zarejestrowane metryki, w usłudze Azure Machine Edukacja 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.

Zrzut ekranu przedstawiający widok metryk.

Wyświetlanie i pobieranie dzienników diagnostycznych

Pliki dziennika to podstawowy zasób do debugowania obciążeń usługi Azure Machine Edukacja. Po przesłaniu zadania szkoleniowego przejdź do określonego przebiegu, aby wyświetlić jego dzienniki i dane wyjściowe:

  1. Przejdź do karty Zadania .
  2. Wybierz identyfikator runID dla określonego przebiegu.
  3. Wybierz pozycję Dane wyjściowe i dzienniki w górnej części strony.
  4. Wybierz pozycję Pobierz wszystko , aby pobrać wszystkie dzienniki do folderu zip.
  5. Możesz również pobrać poszczególne pliki dziennika, wybierając plik dziennika i wybierając pozycję Pobierz

Zrzut ekranu przedstawiający sekcję Dane wyjściowe i dzienniki przebiegu.

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 Edukacja i jest domyślnie zamykane. 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 Edukacja rejestruje informacje z różnych źródeł podczas trenowania, takich 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.

Następne kroki