Udostępnij za pośrednictwem


Śledzenie modeli uczenia maszynowego za pomocą platformy MLflow i usługi Azure Machine Learning

DOTYCZY: Zestaw SDK języka Python w wersji 1

W tym artykule dowiesz się, jak włączyć śledzenie MLflow w celu połączenia usługi Azure Machine Learning jako zaplecza eksperymentów MLflow .

MLflow to biblioteka typu open source do zarządzania cyklem życia eksperymentów uczenia maszynowego. MLflow Tracking to składnik platformy MLflow, który rejestruje i śledzi metryki przebiegu trenowania i artefakty modelu, niezależnie od środowiska eksperymentu — lokalnie na komputerze, na zdalnym obiekcie docelowym obliczeniowym, maszynie wirtualnej lub klastrze usługi Azure Databricks.

Zobacz MLflow i Azure Machine Learning , aby zapoznać się ze wszystkimi obsługiwanymi funkcjami MLflow i Azure Machine Learning, w tym obsługą projektu MLflow (wersja zapoznawcza) i wdrażaniem modelu.

Napiwek

Jeśli chcesz śledzić eksperymenty uruchomione w usłudze Azure Databricks lub Azure Synapse Analytics, zobacz dedykowane artykuły Track Azure Databricks ML experiments with MLflow and Azure Machine Learning or Track Azure Synapse Analytics ML experiments with MLflow and Azure Machine Learning (Śledzenie eksperymentów usługi Azure Synapse Analytics ML przy użyciu platform MLflow i Azure Machine Learning).

Uwaga

Informacje przedstawione w tym dokumencie są przeznaczone głównie dla analityków danych i deweloperów, którzy chcą monitorować proces trenowania modelu. Jeśli jesteś administratorem zainteresowany monitorowaniem 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

Śledzenie przebiegów z komputera lokalnego lub zdalnego przetwarzania

Śledzenie przy użyciu biblioteki MLflow z usługą Azure Machine Learning umożliwia przechowywanie zarejestrowanych metryk i przebiegów artefaktów wykonanych na maszynie lokalnej w obszarze roboczym usługi Azure Machine Learning.

Konfigurowanie środowiska śledzenia

Aby śledzić przebieg, który nie jest uruchomiony w środowisku obliczeniowym usługi Azure Machine Learning (od tej pory nazywanym "lokalnymi obliczeniami"), musisz wskazać lokalne zasoby obliczeniowe identyfikatorowi URI śledzenia usługi Azure Machine Learning MLflow.

Uwaga

W przypadku uruchamiania w usłudze Azure Compute (Azure Notebooks, notesy Jupyter Notebooks hostowane w wystąpieniach obliczeniowych platformy Azure lub klastrach obliczeniowych) nie trzeba konfigurować identyfikatora URI śledzenia. Jest ona automatycznie konfigurowana.

DOTYCZY: Zestaw SDK języka Python w wersji 1

Identyfikator URI śledzenia usługi Azure Machine Learning MLflow można uzyskać przy użyciu zestawu Azure Machine Learning SDK w wersji 1 dla języka Python. Upewnij się, że biblioteka azureml-sdk jest zainstalowana w używanym klastrze. Poniższy przykład pobiera unikatowy identyfikator URI śledzenia MLFLow skojarzony z obszarem roboczym. Następnie metoda set_tracking_uri() wskazuje identyfikator URI śledzenia MLflow na ten identyfikator URI.

  1. Za pomocą pliku konfiguracji obszaru roboczego:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Napiwek

    Plik konfiguracji obszaru roboczego można pobrać, wykonując następujące czynności:

    1. Przejdź do usługi Azure Machine Learning Studio
    2. Kliknij prawy róg strony —> pobierz plik konfiguracji.
    3. Zapisz plik config.json w tym samym katalogu, nad którym pracujesz.
  2. Przy użyciu identyfikatora subskrypcji, nazwy grupy zasobów i nazwy obszaru roboczego:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Ustawianie nazwy eksperymentu

Wszystkie przebiegi platformy MLflow są rejestrowane w aktywnym eksperymencie. Domyślnie przebiegi są rejestrowane w eksperymencie o nazwie Default , który jest automatycznie tworzony. Aby skonfigurować eksperyment, na którym chcesz pracować, użyj polecenia mlflow.set_experiment()MLflow .

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Napiwek

Podczas przesyłania zadań przy użyciu zestawu SDK usługi Azure Machine Learning można ustawić nazwę eksperymentu przy użyciu właściwości experiment_name podczas przesyłania. Nie trzeba go konfigurować na skry skrycie szkoleniowym.

Uruchamianie przebiegu trenowania

Po ustawieniu nazwy eksperymentu MLflow możesz rozpocząć przebieg trenowania za pomocą polecenia start_run(). Następnie użyj polecenia log_metric() , aby aktywować interfejs API rejestrowania platformy MLflow i rozpocząć rejestrowanie metryk przebiegu trenowania.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Aby uzyskać szczegółowe informacje na temat rejestrowania metryk, parametrów i artefaktów w przebiegu przy użyciu biblioteki MLflow, zobacz Jak rejestrować i wyświetlać metryki.

Śledzenie przebiegów uruchomionych w usłudze Azure Machine Learning

DOTYCZY: Zestaw SDK języka Python w wersji 1

Zdalne przebiegi (zadania) umożliwiają trenowanie modeli w bardziej niezawodny i powtarzalny sposób. Mogą również korzystać z bardziej zaawansowanych obliczeń, takich jak klastry obliczeniowe usługi Machine Learning. Aby dowiedzieć się więcej o różnych opcjach obliczeniowych, zobacz Use compute targets for model training (Używanie docelowych obiektów obliczeniowych na potrzeby trenowania modelu).

Podczas przesyłania przebiegów usługa Azure Machine Learning automatycznie konfiguruje rozwiązanie MLflow do pracy z obszarem roboczym, w którym działa przebieg. Oznacza to, że nie ma potrzeby konfigurowania identyfikatora URI śledzenia MLflow. Ponadto eksperymenty są automatycznie nazwane na podstawie szczegółów przesyłania eksperymentu.

Ważne

Podczas przesyłania zadań szkoleniowych do usługi Azure Machine Learning nie musisz konfigurować identyfikatora URI śledzenia MLflow w logice trenowania, ponieważ jest już skonfigurowany. Nie musisz konfigurować nazwy eksperymentu w swojej procedurze treningowej.

Tworzenie procedury trenowania

Najpierw należy utworzyć src podkatalog i utworzyć plik z kodem treningowym train.py w pliku w podkatalogu src . Cały kod trenowania przejdzie do podkatalogu src , w tym train.py.

Kod szkoleniowy jest pobierany z tego przykładu MLflow w repozytorium przykładu usługi Azure Machine Learning.

Skopiuj ten kod do pliku:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Konfigurowanie eksperymentu

Aby przesłać eksperyment do usługi Azure Machine Learning, musisz użyć języka Python. W notesie lub pliku języka Python skonfiguruj środowisko obliczeniowe i środowisko uruchamiania trenowania przy użyciu Environment klasy .

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

Następnie skonstruuj ScriptRunConfig obliczenia zdalne jako docelowy obiekt obliczeniowy.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

W przypadku tej konfiguracji uruchamiania obliczeniowego i trenowania użyj Experiment.submit() metody , aby przesłać przebieg. Ta metoda automatycznie ustawia identyfikator URI śledzenia MLflow i kieruje rejestrowanie z biblioteki MLflow do obszaru roboczego.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Wyświetlanie metryk i artefaktów w obszarze roboczym

Metryki i artefakty z rejestrowania MLflow są śledzone w obszarze roboczym. Aby wyświetlić je w dowolnym momencie, przejdź do obszaru roboczego i znajdź eksperyment według nazwy w obszarze roboczym w usłudze Azure Machine Learning Studio. Możesz też uruchomić poniższy kod.

Pobieranie metryki uruchamiania przy użyciu biblioteki MLflow get_run().

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Aby wyświetlić artefakty przebiegu, możesz użyć MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Aby pobrać artefakt do bieżącego katalogu, możesz użyć MLFlowClient.download_artifacts()

client.download_artifacts(run_id, "helloworld.txt", ".")

Aby uzyskać więcej informacji na temat pobierania informacji z eksperymentów i przebiegów w usłudze Azure Machine Learning przy użyciu widoku MLflow Zarządzanie eksperymentami i przebiegami za pomocą platformy MLflow.

Porównanie i wykonywanie zapytań

Porównaj i wykonaj zapytanie dotyczące wszystkich przebiegów platformy MLflow w obszarze roboczym usługi Azure Machine Learning przy użyciu następującego kodu. Dowiedz się więcej o sposobie wykonywania zapytań za pomocą biblioteki MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

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. Obsługiwane są różne popularne biblioteki uczenia maszynowego.

Aby włączyć automatyczne rejestrowanie , wstaw następujący kod przed kodem treningowym:

mlflow.autolog()

Dowiedz się więcej o automatycznym rejestrowaniu za pomocą biblioteki MLflow.

Zarządzanie modelami

Zarejestruj i śledź modele w rejestrze modeli usługi Azure Machine Learning, który obsługuje rejestr modeli MLflow. Modele usługi Azure Machine Learning są dopasowane do schematu modelu MLflow, co ułatwia eksportowanie i importowanie tych modeli w różnych przepływach pracy. Metadane związane z platformą MLflow, takie jak identyfikator przebiegu, są również śledzone przy użyciu zarejestrowanego modelu w celu śledzenia. Użytkownicy mogą przesyłać przebiegi szkoleniowe, rejestrować i wdrażać modele utworzone na podstawie przebiegów platformy MLflow.

Jeśli chcesz wdrożyć i zarejestrować model gotowy do produkcji w jednym kroku, zobacz Wdrażanie i rejestrowanie modeli MLflow.

Aby zarejestrować i wyświetlić model z przebiegu, wykonaj następujące kroki:

  1. Po zakończeniu przebiegu wywołaj metodę register_model() .

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Wyświetl zarejestrowany model w obszarze roboczym za pomocą usługi Azure Machine Learning Studio.

    W poniższym przykładzie zarejestrowany model my-model ma oznaczone metadane śledzenia MLflow.

    register-mlflow-model

  3. Wybierz kartę Artefakty , aby wyświetlić wszystkie pliki modelu, które są zgodne ze schematem modelu MLflow (conda.yaml, MLmodel, model.pkl).

    schemat modelu

  4. Wybierz pozycję MLmodel, aby wyświetlić plik MLmodel wygenerowany przez przebieg.

    Schemat modelu MLmodel

Czyszczenie zasobów

Jeśli nie planujesz używania zarejestrowanych metryk i artefaktów w obszarze roboczym, możliwość ich usunięcia indywidualnie jest obecnie niedostępna. Zamiast tego usuń grupę zasobów zawierającą konto magazynu i obszar roboczy, aby nie ponosić żadnych opłat:

  1. W witrynie Azure Portal na końcu z lewej strony wybierz pozycję Grupy zasobów.

    Usuwanie w witrynie Azure Portal

  2. Wybierz utworzoną grupę zasobów z listy.

  3. Wybierz pozycję Usuń grupę zasobów.

  4. Wpisz nazwę grupy zasobów. Następnie wybierz Usuń.

Przykładowe notesy

Notesy MLflow z usługą Azure Machine Learning pokazują i rozszerzają koncepcje przedstawione w tym artykule. Zobacz również repozytorium oparte na społeczności, AzureML-Examples.

Następne kroki