Vad är Azure Machine Learning-miljöer?

Azure Machine Learning-miljöer är en inkapsling av miljön där maskininlärningsträningen sker. De anger Python-paket, miljövariabler och programvaruinställningar kring dina tränings- och bedömningsskript. De anger även körningsmiljöer (Python, Spark eller Docker). Miljöerna är hanterade och versionshanterade entiteter på din Machine Learning-arbetsyta som möjliggör reproducerbara, granskningsbara och portabla maskininlärningsarbetsflöden i flera olika beräkningsmål.

Du kan använda ett Environment -objekt på din lokala beräkning för att:

  • Utveckla ditt träningsskript.
  • Återanvänd samma miljö på Azure Machine Learning Compute för modellträning i stor skala.
  • Distribuera din modell med samma miljö.
  • Gå tillbaka till miljön där en befintlig modell har tränats.

Följande diagram illustrerar hur du kan använda ett enda Environment objekt i både jobbkonfigurationen (för träning) och din slutsatsdragning och distributionskonfiguration (för webbtjänstdistributioner).

Diagram över en miljö i arbetsflödet för maskininlärning

Miljön, beräkningsmålet och träningsskriptet utgör tillsammans jobbkonfigurationen: den fullständiga specifikationen för ett träningsjobb.

Typer av miljöer

Miljöer kan i stort sett delas in i tre kategorier: organiserade, användarhanterade och systemhanterade.

Organiserade miljöer tillhandahålls av Azure Machine Learning och är tillgängliga på din arbetsyta som standard. De är avsedda att användas som de är och innehåller samlingar av Python-paket och inställningar som hjälper dig att komma igång med olika ramverk för maskininlärning. Dessa förskapade miljöer ger också snabbare distributionstid. En fullständig lista finns i artikeln om organiserade miljöer.

I användarhanterade miljöer ansvarar du för att konfigurera din miljö och installera alla paket som träningsskriptet behöver på beräkningsmålet. Se också till att inkludera eventuella beroenden som behövs för modelldistribution.

Du använder systemhanterade miljöer när du vill att Conda ska hantera Python-miljön åt dig. En ny conda-miljö materialiseras från din conda-specifikation ovanpå en basavbildning för docker.

Skapa och hantera miljöer

Du kan skapa miljöer från klienter som Azure Machine Learning Python SDK, Azure Machine Learning CLI, sidan Miljöer i Azure Machine Learning-studio och VS Code-tillägget. Med varje klient kan du anpassa basavbildningen, Dockerfile- och Python-lagret om det behövs.

Specifika kodexempel finns i avsnittet "Skapa en miljö" i Så här använder du miljöer.

Miljöer hanteras också enkelt via din arbetsyta, vilket gör att du kan:

  • Registrera miljöer.
  • Hämta miljöer från din arbetsyta som ska användas för träning eller distribution.
  • Skapa en ny instans av en miljö genom att redigera en befintlig.
  • Visa ändringar i dina miljöer över tid, vilket garanterar reproducerbarhet.
  • Skapa Docker-avbildningar automatiskt från dina miljöer.

"Anonyma" miljöer registreras automatiskt på din arbetsyta när du skickar ett experiment. De visas inte men kan hämtas efter version.

Kodexempel finns i avsnittet "Hantera miljöer" i Så här använder du miljöer.

Miljöskapande, cachelagring och återanvändning

Azure Machine Learning skapar miljödefinitioner i Docker-avbildningar och Conda-miljöer. Den cachelagrar också miljöerna så att de kan återanvändas i efterföljande träningsjobb och distributioner av tjänstslutpunkter. Att köra ett träningsskript via fjärranslutning kräver att en Docker-avbildning skapas, men ett lokalt jobb kan använda en conda-miljö direkt.

Skicka ett jobb med hjälp av en miljö

När du först skickar ett fjärrjobb med hjälp av en miljö anropar Azure Machine Learning-tjänsten en ACR Build-uppgift på den Azure Container Registry (ACR) som är associerad med arbetsytan. Den skapade Docker-avbildningen cachelagras sedan på arbetsytans ACR. Organiserade miljöer backas upp av Docker-avbildningar som cachelagras i Global ACR. I början av jobbkörningen hämtas avbildningen av beräkningsmålet från relevant ACR.

För lokala jobb skapas en Docker- eller conda-miljö baserat på miljödefinitionen. Skripten körs sedan på målberäkningen – en lokal körningsmiljö eller en lokal Docker-motor.

Skapa miljöer som Docker-avbildningar

Om avbildningen för en viss miljödefinition inte redan finns i arbetsytans ACR skapas en ny avbildning. Avbildningsversionen består av två steg:

  1. Ladda ned en basavbildning och köra eventuella Docker-steg
  2. Skapa en conda-miljö enligt conda-beroenden som anges i miljödefinitionen.

Det andra steget är valfritt och miljön kan i stället komma från Docker-kompileringskontexten eller basavbildningen. I det här fallet ansvarar du för att installera python-paket genom att inkludera dem i basavbildningen eller ange anpassade Docker-steg. Du ansvarar också för att ange rätt plats för den körbara Python-filen. Det är också möjligt att använda en anpassad Docker-basavbildning.

Cachelagring och återanvändning av bilder

Om du använder samma miljödefinition för ett annat jobb återanvänder Azure Machine Learning den cachelagrade avbildningen från arbetsytans ACR för att spara tid.

Om du vill visa information om en cachelagrad bild går du till sidan Miljöer i Azure Machine Learning-studio eller använder MLClient.environments för att hämta och inspektera miljön.

För att avgöra om du ska återanvända en cachelagrad avbildning eller skapa en ny beräknar Azure Machine Learning ett hash-värde från miljödefinitionen och jämför det med hashvärdena för befintliga miljöer. Hashen baseras på miljödefinitionens:

  • Basavbildning
  • Anpassade Docker-steg
  • Python-paket
  • Spark-paket

Hashen påverkas inte av miljönamnet eller versionen. Om du byter namn på din miljö eller skapar en ny med samma inställningar och paket som en annan miljö förblir hash-värdet detsamma. Men miljödefinitionsändringar som att lägga till eller ta bort ett Python-paket eller ändra en paketversion resulterar i att det resulterande hashvärdet ändras. Om du ändrar ordning på beroenden eller kanaler i en miljö ändras även hashen och en ny avbildningsversion krävs. På samma sätt kommer alla ändringar i en granskad miljö att resultera i att en ny "icke-granskad" miljö skapas.

Anteckning

Du kommer inte att kunna skicka några lokala ändringar till en granskad miljö utan att ändra namnet på miljön. Prefixen "AzureML-" och "Microsoft" är endast reserverade för organiserade miljöer och din jobböverföring misslyckas om namnet börjar med någon av dem.

Miljöns beräknade hashvärde jämförs med värdena i arbetsytan och globala ACR, eller på beräkningsmålet (endast lokala jobb). Om det finns en matchning hämtas och används den cachelagrade avbildningen, annars utlöses en avbildningsversion.

Följande diagram visar tre miljödefinitioner. Två av dem har olika namn och versioner men identiska basavbildningar och Python-paket, vilket resulterar i samma hash och motsvarande cachelagrade avbildning. Den tredje miljön har olika Python-paket och -versioner, vilket leder till en annan hash- och cachelagrad avbildning.

Diagram över cachelagring av miljöer och Docker-avbildningar

Faktiska cachelagrade avbildningar i arbetsytans ACR har namn som azureml/azureml_e9607b2514b066c851012848913ba19f med hashen som visas i slutet.

Viktigt

  • Om du skapar en miljö med ett ej fäst paketberoende (till exempel numpy) använder miljön den paketversion som var tillgänglig när miljön skapades. Alla framtida miljöer som använder en matchande definition använder den ursprungliga versionen.

    Om du vill uppdatera paketet anger du ett versionsnummer för att framtvinga återskapande av avbildning. Ett exempel på detta skulle vara att ändra numpy till numpy==1.18.1. Nya beroenden – inklusive kapslade – installeras och de kan bryta ett tidigare arbetsscenario.

  • Om du använder en ofäst basavbildning som mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 i din miljödefinition återskapas avbildningen varje gång taggen latest uppdateras. Detta hjälper avbildningen att ta emot de senaste korrigeringarna och systemuppdateringarna.

Bildkorrigering

Microsoft ansvarar för att korrigera basavbildningarna för kända säkerhetsproblem. Uppdateringar för bilder som stöds släpps varannan vecka, utan att det finns några odefinierade säkerhetsrisker som är äldre än 30 dagar i den senaste versionen av avbildningen. Korrigerade avbildningar släpps med en ny oföränderlig tagg och taggen :latest uppdateras till den senaste versionen av den korrigerade avbildningen.

Du måste uppdatera associerade Azure Machine Learning-tillgångar för att använda den nyligen korrigerade avbildningen. När du till exempel arbetar med en hanterad onlineslutpunkt måste du distribuera om slutpunkten för att använda den korrigerade avbildningen.

Om du anger egna avbildningar ansvarar du för att uppdatera dem och uppdatera de Azure Machine Learning-tillgångar som använder dem.

Mer information om basavbildningarna finns på följande länkar:

Nästa steg