Zbieranie plików dziennika potoku uczenia maszynowego w usłudze Application Szczegółowe informacje na potrzeby alertów i debugowania

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

Bibliotekę OpenCensus języka Python można użyć do kierowania dzienników do Szczegółowe informacje aplikacji ze skryptów. Agregowanie dzienników z przebiegów potoku w jednym miejscu umożliwia tworzenie zapytań i diagnozowanie problemów. Korzystanie z Szczegółowe informacje aplikacji umożliwia śledzenie dzienników w czasie i porównywanie dzienników potoków między przebiegami.

Posiadanie dzienników w miejscu zapewni historię wyjątków i komunikatów o błędach. Ponieważ Szczegółowe informacje aplikacji integruje się z alertami platformy Azure, można również tworzyć alerty na podstawie zapytań Szczegółowe informacje aplikacji.

Wymagania wstępne

Wprowadzenie

Ta sekcja jest wprowadzeniem specyficznym dla używania biblioteki OpenCensus z potoku usługi Azure Machine Edukacja. Aby uzyskać szczegółowy samouczek, zobacz OpenCensus Azure Monitor Exporters (Eksporterzy usługi Azure Monitor w usłudze OpenCensus)

Dodaj skrypt PythonScriptStep do potoku usługi Azure Machine Edukacja. Skonfiguruj konfigurację RunConfiguration przy użyciu zależności od polecenia opencensus-ext-azure. Skonfiguruj zmienną APPLICATIONINSIGHTS_CONNECTION_STRING środowiskową.

from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import RunConfiguration
from azureml.pipeline.core import Pipeline
from azureml.pipeline.steps import PythonScriptStep

# Connecting to the workspace and compute target not shown

# Add pip dependency on OpenCensus
dependencies = CondaDependencies()
dependencies.add_pip_package("opencensus-ext-azure>=1.0.1")
run_config = RunConfiguration(conda_dependencies=dependencies)

# Add environment variable with Application Insights Connection String
# Replace the value with your own connection string
run_config.environment.environment_variables = {
    "APPLICATIONINSIGHTS_CONNECTION_STRING": 'InstrumentationKey=00000000-0000-0000-0000-000000000000'
}

# Configure step with runconfig
sample_step = PythonScriptStep(
        script_name="sample_step.py",
        compute_target=compute_target,
        runconfig=run_config
)

# Submit new pipeline run
pipeline = Pipeline(workspace=ws, steps=[sample_step])
pipeline.submit(experiment_name="Logging_Experiment")

Utwórz plik o nazwie sample_step.py. Zaimportuj klasę AzureLogHandler, aby skierować dzienniki do Szczegółowe informacje aplikacji. Należy również zaimportować bibliotekę rejestrowania języka Python.

from opencensus.ext.azure.log_exporter import AzureLogHandler
import logging

Następnie dodaj program AzureLogHandler do rejestratora języka Python.

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())

# Assumes the environment variable APPLICATIONINSIGHTS_CONNECTION_STRING is already set
logger.addHandler(AzureLogHandler())
logger.warning("I will be sent to Application Insights")

Rejestrowanie przy użyciu wymiarów niestandardowych

Domyślnie dzienniki przekazywane do aplikacji Szczegółowe informacje nie będą miały wystarczającego kontekstu, aby śledzić przebieg lub eksperyment. Aby umożliwić działanie dzienników w celu diagnozowania problemów, potrzebne są więcej pól.

Aby dodać te pola, można dodać wymiary niestandardowe w celu zapewnienia kontekstu do komunikatu dziennika. Jednym z przykładów jest to, że ktoś chce wyświetlić dzienniki w wielu krokach w tym samym przebiegu potoku.

Wymiary niestandardowe tworzą słownik par klucz-wartość (przechowywany jako ciąg, ciąg). Słownik jest następnie wysyłany do aplikacji Szczegółowe informacje i wyświetlany jako kolumna w wynikach zapytania. Jego poszczególne wymiary mogą być używane jako parametry zapytania.

Przydatny kontekst do uwzględnienia

Pole Rozumowanie/przykład
parent_run_id Może wykonywać zapytania dotyczące dzienników dla tych z tymi samymi parent_run_id, aby wyświetlić dzienniki w czasie dla wszystkich kroków, zamiast zagłębić się w poszczególne kroki
step_id Może wysyłać zapytania o dzienniki dla tych z tymi samymi step_id, aby zobaczyć, gdzie wystąpił problem z wąskim zakresem tylko do pojedynczego kroku
step_name Może wykonywać zapytania dotyczące dzienników, aby zobaczyć wydajność kroku w czasie. Pomaga również znaleźć step_id dla ostatnich przebiegów bez nurkowania w interfejsie użytkownika portalu
experiment_name Może wykonywać zapytania w dziennikach, aby zobaczyć wydajność eksperymentu w czasie. Pomaga również znaleźć parent_run_id lub step_id dla ostatnich przebiegów bez przechodzenia do interfejsu użytkownika portalu
run_url Może podać link bezpośrednio do przebiegu na potrzeby badania.

Inne przydatne pola

Te pola mogą wymagać dodatkowej instrumentacji kodu i nie są dostarczane przez kontekst uruchamiania.

Pole Rozumowanie/przykład
build_url/build_version W przypadku wdrażania przy użyciu ciągłej integracji/ciągłego wdrażania to pole może skorelować dzienniki z wersją kodu, która dostarczyła logikę kroku i potoku. Ten link może dodatkowo pomóc w diagnozowaniu problemów lub identyfikowaniu modeli z określonymi cechami (wartości dzienników/metryk)
run_type Może rozróżniać różne typy modeli lub przebiegi trenowania a oceniania

Tworzenie słownika wymiarów niestandardowych

from azureml.core import Run

run = Run.get_context(allow_offline=False)

custom_dimensions = {
    "parent_run_id": run.parent.id,
    "step_id": run.id,
    "step_name": run.name,
    "experiment_name": run.experiment.name,
    "run_url": run.parent.get_portal_url(),
    "run_type": "training"
}

# Assumes AzureLogHandler was already registered above
logger.info("I will be sent to Application Insights with Custom Dimensions", extra= {"custom_dimensions":custom_dimensions})

Zagadnienia dotyczące rejestrowania języka Python w usłudze OpenCensus

Program AzureLogHandler openCensus służy do kierowania dzienników języka Python do Szczegółowe informacje aplikacji. W związku z tym należy wziąć pod uwagę niuanse rejestrowania języka Python. Po utworzeniu rejestratora ma domyślny poziom dziennika i będzie wyświetlać dzienniki większe lub równe tym poziomom. Dobrym rozwiązaniem do korzystania z funkcji rejestrowania języka Python jest książka kucharka rejestrowania.

Zmienna APPLICATIONINSIGHTS_CONNECTION_STRING środowiskowa jest wymagana dla biblioteki OpenCensus. Zalecamy ustawienie tej zmiennej środowiskowej zamiast przekazywania jej jako parametru potoku, aby uniknąć przekazywania po parametry połączenia zwykłego tekstu.

Wykonywanie zapytań dotyczących dzienników w Szczegółowe informacje aplikacji

Dzienniki kierowane do Szczegółowe informacje aplikacji będą wyświetlane w obszarze "ślady" lub "wyjątki". Pamiętaj, aby dostosować przedział czasu, aby uwzględnić przebieg potoku.

Application Insights Query result

W wyniku Szczegółowe informacje aplikacji zostanie wyświetlony komunikat dziennika i poziom, ścieżka pliku i numer wiersza kodu. Spowoduje to również wyświetlenie wszystkich uwzględnionych wymiarów niestandardowych. Na tym obrazie słownik customDimensions przedstawia pary klucz/wartość z poprzedniego przykładu kodu.

Inne przydatne zapytania

Niektóre z poniższych zapytań używają polecenia "customDimensions.Level". Te poziomy ważności odpowiadają poziomowi, z którego pierwotnie został wysłany dziennik języka Python. Aby uzyskać więcej informacji na temat zapytań, zobacz Zapytania dzienników usługi Azure Monitor.

Przypadek użycia Zapytanie
Wyniki dziennika dla określonego wymiaru niestandardowego, na przykład "parent_run_id"
ślady | 
where customDimensions.parent_run_id == '931024c2-3720-11ea-b247-c49deda841c1
Wyniki dziennika dla wszystkich przebiegów treningowych w ciągu ostatnich siedmiu dni
ślady | 
gdzie znacznik > czasu temu (7d)
and customDimensions.run_type == 'training'
Wyniki dziennika o ważnościLevel Błąd z ostatnich siedmiu dni
ślady | 
gdzie znacznik > czasu temu (7d)
i customDimensions.Level == "ERROR"
Liczba wyników dziennika o ważnościLevel Błąd w ciągu ostatnich siedmiu dni
ślady | 
gdzie znacznik > czasu temu (7d)
and customDimensions.Level == 'ERROR' |
summarize count()

Następne kroki

Po zalogowaniu się w wystąpieniu usługi Application Szczegółowe informacje można ich użyć do ustawiania alertów usługi Azure Monitor na podstawie wyników zapytania.

Możesz również dodawać wyniki z zapytań do pulpitu nawigacyjnego platformy Azure, aby uzyskać więcej szczegółowych informacji.