Spåra modellutveckling med MLflow
Med MLflow-spårning kan du logga notebook-filer och träningsdatauppsättningar, parameters, mått, taggar och artefakter som rör träning av en maskininlärnings- eller djupinlärningsmodell. Ett exempel på en anteckningsbok som get startat med MLflow finns i Självstudie: ML-modeller från slutpunkt till slutpunkt på Azure Databricks.
MLflow-spårning med experiment och körningar
Modellutvecklingsprocessen är iterativ och det kan vara svårt att hålla reda på ditt arbete när du utvecklar och optimize en modell. I Azure Databricks kan du använda MLflow-spårning för att hålla reda på modellutvecklingsprocessen, inklusive parameterinställningar eller kombinationer som du har provat och hur de påverkade modellens prestanda.
MLflow-spårning använder experiment och körningar för att logga och spåra ML- och djupinlärningsmodellens utveckling. En körning är en enkel utförande av modellkod. Under en MLflow-körning kan du logga modell parameters och resultat. Ett experiment är en samling relaterade tester. I ett experiment kan du jämföra och filtrera körningar för att förstå hur din modell presterar och hur dess prestanda beror på parameterinställningarna, indata och så vidare.
Kommentar
Från och med den 27 mars 2024 inför MLflow en kvot limit på antalet totala parameters, taggar och metriska steg för alla befintliga och nya körningar och antalet totala körningar för alla befintliga och nya experiment, se Resursbegränsningar. Om du når kvoten för körningar per experiment rekommenderar Databricks att du tar bort körningar som du inte längre behöver med api:et för borttagningskörningar i Python. Om du når andra kvotgränser rekommenderar Databricks att du justerar loggningsstrategin för att hålla dig under limit. Om du behöver en ökning av det här limit, kontakta ditt Databricks-kontoteam med en kort förklaring av ditt användningsfall, varför de föreslagna åtgärdsmetoderna inte fungerar och den nya limit du begär.
API för MLflow-spårning
MLflow Tracking API loggar parameters, mått, taggar och artefakter från en modellkörning. Spårnings-API:et kommunicerar med en MLflow-spårningsserver. När du använder Databricks loggar en Databricks-värdbaserad spårningsserver data. Den värdbaserade MLflow-spårningsservern har Python-, Java- och R-API:er.
MLflow är förinstallerat på Databricks Runtime ML-kluster. Om du vill använda MLflow i ett Databricks Runtime-kluster måste du installera mlflow
biblioteket. Anvisningar om hur du installerar ett bibliotek på ett kluster finns i Installera ett bibliotek i ett kluster.
Where MLflow-körningar loggas
Alla MLflow-körningar loggas till det aktiva experimentet, vilket kan set på något av följande sätt:
- Använd kommandot mlflow.set_experiment().
- Använd parametern
experiment_id
i kommandot mlflow.start_run(). - Set en av MLflow-miljövariablerna MLFLOW_EXPERIMENT_NAME eller MLFLOW_EXPERIMENT_ID.
Om inget aktivt experiment är set, loggas körningar till det notebook-experimentet.
Om du vill logga experimentresultatet till en fjärrhanterad MLflow Tracking-server på en annan arbetsyta än den där du kör experimentet set spårnings-URI:n för att referera till fjärrarbetsytan med mlflow.set_tracking_uri()
och set sökvägen till experimentet på fjärrarbetsytan med hjälp av mlflow.set_experiment()
.
mlflow.set_tracking_uri(<uri-of-remote-workspace>)
mlflow.set_experiment("path to experiment in remote workspace")
Om du kör experiment lokalt och vill logga experimentresultat till Databricks MLflow Tracking-servern anger du din databricks-arbetsyteinstans (DATABRICKS_HOST
) och Databricks personliga åtkomsttoken (DATABRICKS_TOKEN
). Sedan kan du set spårnings-URI:n för att referera till arbetsytan med mlflow.set_tracking_uri()
och set sökvägen till experimentet med hjälp av mlflow.set_experiment()
. Mer information om where för att hitta values för miljövariablerna DATABRICKS_HOST
och DATABRICKS_TOKEN
finns i Utföra autentisering med personlig åtkomsttoken för Azure Databricks.
Följande kodexempel visar hur du ställer in dessa values:
os.environ["DATABRICKS_HOST"] = "https://dbc-1234567890123456.cloud.databricks.com" # set to your server URI
os.environ["DATABRICKS_TOKEN"] = "dapixxxxxxxxxxxxx"
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/your-experiment")
loggen körs till ett experiment
MLflow kan automatiskt logga träningskod som skrivits i många ramverk för maskininlärning och djupinlärning. Det här är det enklaste sättet att get började använda MLflow-spårning. Se exempelnotebook .
Om du vill ha mer kontroll över vilka parameters och mått som loggas eller om du vill logga ytterligare artefakter, till exempel CSV-filer eller diagram, använder du MLflow-loggnings-API:et. Se exempelnotebook .
Använda automatisk loggning för att spåra modellutveckling
Det här exemplet på notebook-filen visar hur du använder automatisk loggning med scikit-learn. Information om automatisk loggning med andra Python-bibliotek finns i dokumentationen för automatisk MLflow-loggning.
Python-notebook för MLflow-autologgning
Använda loggnings-API:et för att spåra modellutveckling
I den här notebook-filen visas hur du använder Python-loggnings-API:et. MLflow har också REST-, R- och Java-API:er.
Python-notebook för MLflow loggnings-API
Loggkörningar till ett arbetsyteexperiment
När du tränar en modell i en Databricks-notebook loggas körningar som standard till experimentet i notebooken. Endast MLflow-körningar som initieras i en notebook-fil kan loggas till notebook-experimentet.
MLflow-körningar som startas från valfri notebook-fil eller från API:erna kan loggas till ett arbetsyteexperiment. Om du vill registrera körningar i ett experiment i en arbetsyta kan du använda kod liknande denna i din notebook eller API-anrop:
experiment_name = "/Shared/name_of_experiment/"
mlflow.set_experiment(experiment_name)
Anvisningar om hur du skapar ett arbetsyteexperiment finns i Skapa arbetsyteexperiment. Information om hur du visar loggade körningar finns i Visa notebook-experiment och Visa arbetsyteexperiment.
Få åtkomst till MLflow-spårningsservern utanför Azure Databricks
Du kan också skriva till och läsa från spårningsservern utanför Azure Databricks, till exempel med hjälp av MLflow CLI. Se Åtkomst till MLflow-spårningsservern utanför Azure Databricks.
Analysera MLflow-körningar programmatiskt
Du kan komma åt MLflow-körningsdata programmatiskt med hjälp av följande två DataFrame-API:er:
- MLflow Python-klienten search_runs-API :et returnerar en Pandas DataFrame.
- Datakällan för MLflow-experimentet returnerar en Apache Spark DataFrame.
Det här exemplet visar hur du använder MLflow Python-klienten för att skapa en instrumentpanel som visualiserar ändringar i utvärderingsmått över tid, spårar antalet körningar som startats av en specifik användare och mäter det totala antalet körningar för alla användare:
Varför modellträningsmått och utdata kan variera
Många av de algoritmer som används i ML har ett slumpmässigt element, till exempel sampling eller slumpmässiga initiala villkor i själva algoritmen. När du tränar en modell med någon av dessa algoritmer kanske resultatet inte är detsamma för varje körning, även om du startar körningen med samma villkor. Många bibliotek erbjuder en seeding-mekanism för att åtgärda de inledande villkoren för dessa stokastiska element. Det kan dock finnas andra varianter som inte kontrolleras av frön. Vissa algoritmer är känsliga för dataordningen och distribuerade ML-algoritmer kan också påverkas av hur data partitioneras. I allmänhet är den här variationen inte betydande och inte viktig i modellutvecklingsprocessen.
Om du vill kontrollera variationer som orsakas av skillnader i ordning och partitionering använder du PySpark-funktionernas ompartition och sortWithinPartitions.
Exempel på MLflow-spårning
Följande notebook-filer visar hur du spårar modellutveckling med MLflow.