Sdílet prostřednictvím


Sledování experimentů Azure Databricks ML s využitím MLflow a Azure Machine Learning

MLflow je opensourcová knihovna pro správu životního cyklu experimentů strojového učení. Pomocí MLflow můžete integrovat Azure Databricks se službou Azure Machine Learning, abyste měli jistotu, že z obou produktů získáte to nejlepší.

V tomto článku se dozvíte:

Požadavky

Příklady poznámkových bloků

Modely trénování v Azure Databricks a jejich nasazení ve službě Azure Machine Learning ukazují, jak trénovat modely v Azure Databricks a nasazovat je ve službě Azure Machine Learning. Zahrnuje také způsob zpracování případů, kdy chcete také sledovat experimenty a modely s instancí MLflow v Azure Databricks a využívat Azure Machine Learning k nasazení.

Instalace knihoven

Pokud chcete do clusteru nainstalovat knihovny, přejděte na kartu Knihovny a vyberte Nainstalovat nový.

Mlflow s využitím Azure Databricks

Do pole Balíček zadejte azureml-mlflow a pak vyberte nainstalovat. Tento krok podle potřeby opakujte, pokud chcete do clusteru pro experiment nainstalovat další balíčky.

Instalace knihovny mlflow ve službě Azure DB

Sledování spuštění Azure Databricks s využitím MLflow

Azure Databricks je možné nakonfigurovat tak, aby sledoval experimenty pomocí MLflow dvěma způsoby:

Ve výchozím nastavení je pro vás při propojení pracovního prostoru Azure Databricks nakonfigurované duální sledování.

Duální sledování ve službě Azure Databricks a Azure Machine Learning

Propojení pracovního prostoru ADB s pracovním prostorem Azure Machine Learning umožňuje současně sledovat data experimentu v pracovním prostoru Azure Machine Learning a pracovním prostoru Azure Databricks. Označuje se jako duální sledování.

Upozorňující

V tuto chvíli se nepodporuje duální sledování v pracovním prostoru Azure Machine Learning s povoleným privátním propojením. Místo toho nakonfigurujte výhradní sledování s pracovním prostorem Azure Machine Learning.

Upozorňující

Duální sledování v Microsoft Azure provozovaném společností 21Vianet v tuto chvíli nepodporuje. Místo toho nakonfigurujte výhradní sledování s pracovním prostorem Azure Machine Learning.

Pokud chcete pracovní prostor ADB propojit s novým nebo existujícím pracovním prostorem služby Azure Machine Learning,

  1. Přihlaste se na portál Azure.
  2. Přejděte na stránku Přehled pracovního prostoru ADB.
  3. V pravém dolním rohu vyberte tlačítko Propojit pracovní prostor Azure Machine Learning.

Propojení pracovních prostorů Azure DB a Azure Machine Learning

Po propojení pracovního prostoru Azure Databricks s pracovním prostorem Azure Machine Learning se sledování MLflow automaticky nastaví tak, aby se sledovalo na všech následujících místech:

  • Propojený pracovní prostor Azure Machine Learning.
  • Váš původní pracovní prostor ADB

Tok ML můžete v Azure Databricks použít stejným způsobem jako vy. Následující příklad nastaví název experimentu, protože se obvykle provádí v Azure Databricks a začne protokolovat některé parametry:

import mlflow 

experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}" 
mlflow.set_experiment(experimentName) 

with mlflow.start_run():
   mlflow.log_param('epochs', 20)
   pass

Poznámka:

Stejně jako u sledování nepodporují registry modelů registraci modelů současně ve službě Azure Machine Learning i Azure Databricks. Jeden nebo druhý se musí použít. Další podrobnosti najdete v části Registrace modelů v registru pomocí MLflow .

Sledování výhradně v pracovním prostoru Azure Machine Learning

Pokud dáváte přednost správě sledovaných experimentů v centralizované lokalitě, můžete nastavit sledování MLflow tak, aby se sledovalo jenom v pracovním prostoru Azure Machine Learning. Tato konfigurace má výhodu, že umožňuje snadnější cestu k nasazení pomocí možností nasazení služby Azure Machine Learning.

Upozorňující

V případě pracovního prostoru Azure Machine Learning s povoleným privátním propojením musíte nasadit Azure Databricks ve vlastní síti (injektáž virtuální sítě), abyste zajistili správné připojení.

Musíte nakonfigurovat identifikátor URI pro sledování MLflow tak, aby odkazoval výhradně na Azure Machine Learning, jak je znázorněno v následujícím příkladu:

Konfigurace identifikátoru URI sledování

  1. Získejte identifikátor URI sledování pro váš pracovní prostor:

    PLATÍ PRO: Rozšíření Azure CLI ml v2 (aktuální)

    1. Přihlaste se a nakonfigurujte pracovní prostor:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Identifikátor URI sledování můžete získat pomocí az ml workspace příkazu:

      az ml workspace show --query mlflow_tracking_uri
      
  2. Konfigurace identifikátoru URI sledování:

    Pak metoda set_tracking_uri() odkazuje identifikátor URI sledování MLflow na tento identifikátor URI.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Tip

    Při práci na sdílených prostředích, jako je cluster Azure Databricks, cluster Azure Synapse Analytics nebo podobný, je užitečné nastavit proměnnou MLFLOW_TRACKING_URI prostředí na úrovni clusteru, aby automaticky nakonfiguroval identifikátor URI pro sledování MLflow tak, aby odkazoval na Azure Machine Learning pro všechny relace spuštěné v clusteru, a ne na základě jednotlivých relací.

    Konfigurace proměnných prostředí v clusteru Azure Databricks

    Jakmile je proměnná prostředí nakonfigurovaná, všechny experimenty spuštěné v tomto clusteru se budou sledovat ve službě Azure Machine Learning.

Konfigurace ověřování

Jakmile je sledování nakonfigurované, budete také muset nakonfigurovat, jak se ověřování musí stát s přidruženým pracovním prostorem. Modul plug-in Azure Machine Learning pro MLflow ve výchozím nastavení provede interaktivní ověřování otevřením výchozího prohlížeče a zobrazí výzvu k zadání přihlašovacích údajů. Informace o konfiguraci MLflow pro Azure Machine Learning: Konfigurace ověřování pro další způsoby konfigurace ověřování pro MLflow v pracovních prostorech Azure Machine Learning

U interaktivních úloh, kde je uživatel připojený k relaci, můžete spoléhat na interaktivní ověřování, a proto není potřeba provádět žádnou další akci.

Upozorňující

Interaktivní ověřování prohlížeče zablokuje provádění kódu při zobrazení výzvy k zadání přihlašovacích údajů. Není to vhodná možnost pro ověřování v bezobslužných prostředích, jako jsou trénovací úlohy. Doporučujeme nakonfigurovat jiný režim ověřování.

V těchto scénářích, ve kterých se vyžaduje bezobslužné spuštění, budete muset nakonfigurovat instanční objekt pro komunikaci se službou Azure Machine Learning.

import os

os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"

Tip

Při práci na sdílených prostředích je vhodné nakonfigurovat tyto proměnné prostředí na výpočetních prostředcích. Osvědčeným postupem je spravovat jako tajné kódy v instanci služby Azure Key Vault, kdykoli je to možné. V Azure Databricks můžete například použít tajné kódy v proměnných prostředí následujícím způsobem v konfiguraci clusteru: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}} Informace o tom, jak to udělat v Azure Databricks, najdete v tématu Referenční informace o tajném kódu v proměnné prostředí nebo se podívejte na podobnou dokumentaci ve vaší platformě.

Názvy experimentů ve službě Azure Machine Learning

Pokud je MLflow nakonfigurovaný tak, aby experimenty sledovaly výhradně v pracovním prostoru Azure Machine Learning, musí zásady vytváření názvů experimentu dodržovat zásady vytváření názvů, které používá Azure Machine Learning. V Azure Databricks jsou experimenty pojmenovány cestou k umístění, kde je experiment uložen, například /Users/alice@contoso.com/iris-classifier. Ve službě Azure Machine Learning ale musíte zadat název experimentu přímo. Stejně jako v předchozím příkladu by stejný experiment byl pojmenován iris-classifier přímo:

mlflow.set_experiment(experiment_name="experiment-name")

Sledování parametrů, metrik a artefaktů

Tok ML můžete v Azure Databricks použít stejným způsobem jako vy. Podrobnosti najdete v tématu Protokol a zobrazení metrik a souborů protokolů.

Protokolování modelů pomocí MLflow

Po vytrénování modelu ho můžete pomocí metody protokolovat na sledovací server mlflow.<model_flavor>.log_model() . <model_flavor>, odkazuje na architekturu přidruženou k modelu. Zjistěte, jaké typy modelů jsou podporované. V následujícím příkladu je zaregistrovaný model vytvořený pomocí knihovny Spark MLLib:

mlflow.spark.log_model(model, artifact_path = "model")

Stojí za zmínku, že příchuť spark neodpovídá skutečnosti, že trénujeme model v clusteru Spark, ale kvůli použité trénovací platformě (model můžete dokonale vytrénovat pomocí TensorFlow se Sparkem, a proto by se použila příchuť k použití tensorflow).

Modely se protokolují uvnitř sledovaného spuštění. To znamená, že modely jsou dostupné v Azure Databricks i Azure Machine Learning (výchozí) nebo výhradně ve službě Azure Machine Learning, pokud jste nakonfigurovali identifikátor URI sledování tak, aby na něj odkazoval.

Důležité

Všimněte si, že parametr zde registered_model_name nebyl zadán. Další podrobnosti o dopadech tohoto parametru a fungování registru najdete v části Registrace modelů v registru pomocí MLflow .

Registrace modelů v registru pomocí MLflow

Stejně jako u sledování nemůžou registry modelů fungovat současně ve službě Azure Databricks a Azure Machine Learning. Jeden nebo druhý se musí použít. Ve výchozím nastavení se pracovní prostor Azure Databricks používá pro registry modelů; pokud jste se rozhodli nastavit sledování MLflow tak, aby se sledovalo jenom v pracovním prostoru Služby Azure Machine Learning, registr modelů je pracovní prostor Azure Machine Learning.

Při zvažování, že používáte výchozí konfiguraci, následující řádek protokoluje model uvnitř odpovídajících spuštění Azure Databricks i Azure Machine Learning, ale zaregistruje ho jenom v Azure Databricks:

mlflow.spark.log_model(model, artifact_path = "model", 
                       registered_model_name = 'model_name')  
  • Pokud zaregistrovaný model s názvem neexistuje, metoda zaregistruje nový model, vytvoří verzi 1 a vrátí objekt ModelVersion MLflow.

  • Pokud zaregistrovaný model s názvem již existuje, metoda vytvoří novou verzi modelu a vrátí objekt verze.

Použití registru služby Azure Machine Learning s MLflow

Pokud chcete místo Azure Databricks používat registr modelů Služby Azure Machine Learning, doporučujeme nastavit sledování MLflow tak, aby se sledovalo jenom v pracovním prostoru Azure Machine Learning. Tím se odstraní nejednoznačnost míst, kde se modely registrují, a zjednoduší se tím složitost.

Pokud ale chcete dál používat možnosti duálního sledování, ale zaregistrovat modely ve službě Azure Machine Learning, můžete MLflow instruovat, aby pro registry modelů používal Azure Machine Learning a konfiguroval identifikátor URI registru modelů MLflow. Tento identifikátor URI má stejný formát a hodnotu jako identifikátor URI sledování MLflow.

mlflow.set_registry_uri(azureml_mlflow_uri)

Poznámka:

Hodnota azureml_mlflow_uri byla získána stejným způsobem, jakým byla degradovaná v nastavení sledování MLflow, aby se sledovala pouze v pracovním prostoru Azure Machine Learning.

Úplný příklad tohoto scénáře najdete v ukázkových modelech trénování v Azure Databricks a jejich nasazení ve službě Azure Machine Learning.

Nasazení a využívání modelů zaregistrovaných ve službě Azure Machine Learning

Modely zaregistrované ve službě Azure Machine Learning Service pomocí MLflow je možné využívat jako:

  • Koncový bod služby Azure Machine Learning (v reálném čase a dávka): Toto nasazení umožňuje využívat možnosti nasazení služby Azure Machine Learning pro odvozování v reálném čase i dávkové odvozování ve službě Azure Container Instances (ACI), Azure Kubernetes (AKS) nebo našich spravovaných koncových bodů odvozování.

  • Objekty modelu MLFlow nebo uživatelem definované funkce Pandas, které je možné použít v poznámkových blocích Azure Databricks ve streamovaných nebo dávkových kanálech.

Nasazení modelů do koncových bodů služby Azure Machine Learning

Modul plug-in můžete využít azureml-mlflow k nasazení modelu do pracovního prostoru Azure Machine Learning. Podívejte se , jak nasadit stránku modelů MLflow, kde najdete podrobné informace o tom, jak nasadit modely do různých cílů.

Důležité

Aby bylo možné je nasadit, musí být modely zaregistrované v registru služby Azure Machine Learning. Pokud se vaše modely zaregistrují v instanci MLflow v Azure Databricks, budete je muset znovu zaregistrovat ve službě Azure Machine Learning. V takovém případě si projděte ukázkové modely trénování v Azure Databricks a nasaďte je ve službě Azure Machine Learning.

Nasazení modelů do ADB pro dávkové vyhodnocování s využitím uživatelem definovaných funkcí

Pro dávkové vyhodnocování můžete zvolit clustery Azure Databricks. Pomocí mlflow můžete přeložit libovolný model z registru, ke kterému jste připojení. Obvykle použijete jednu z následujících dvou metod:

  • Pokud jste model natrénovali a vytvořili pomocí knihoven Sparku (například MLLib), použijte mlflow.pyfunc.spark_udf ho k načtení modelu a jeho použití jako uživatelem definovaného uživatelem Spark Pandas k určení skóre nových dat.
  • Pokud váš model nebyl vytrénovaný nebo sestavený pomocí knihoven Sparku, použijte mlflow.pyfunc.load_model nebo mlflow.<flavor>.load_model načtěte model v ovladači clusteru. Všimnětesich Všimněte si také, že MLflow neinstaluje žádnou knihovnu, kterou model vyžaduje ke spuštění. Tyto knihovny musí být před spuštěním nainstalované v clusteru.

Následující příklad ukazuje, jak načíst model z registru s názvem uci-heart-classifier a použít ho jako uživatelem definovaného uživatelem Spark Pandas k určení skóre nových dat.

from pyspark.sql.types import ArrayType, FloatType 

model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"

#Create a Spark UDF for the MLFlow model 
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri) 

Po načtení modelu můžete použít k určení skóre nových dat:

#Load Scoring Data into Spark Dataframe 
scoreDf = spark.table({table_name}).where({required_conditions}) 

#Make Prediction 
preds = (scoreDf 
           .withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …)) 
        ) 

display(preds) 

Vyčištění prostředků

Pokud chcete zachovat pracovní prostor Azure Databricks, ale už ho nepotřebujete, můžete pracovní prostor Azure Machine Learning odstranit. Výsledkem této akce je zrušení propojení pracovního prostoru Azure Databricks a pracovního prostoru Azure Machine Learning.

Pokud nemáte v úmyslu používat protokolované metriky a artefakty ve vašem pracovním prostoru, možnost je odstranit jednotlivě, není v tuto chvíli dostupná. Místo toho odstraňte skupinu prostředků, která obsahuje účet úložiště a pracovní prostor, takže vám nebudou účtovány žádné poplatky:

  1. Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků.

    Odstranění na webu Azure Portal

  2. V seznamu vyberte skupinu prostředků, kterou jste vytvořili.

  3. Vyberte Odstranit skupinu prostředků.

  4. Zadejte název skupiny prostředků. Poté vyberte Odstranit.

Další kroky