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-paketen och programvaruinställningarna kring dina tränings- och bedömningsskript. Miljöerna är hanterade och versionshanterade entiteter på din Machine Learning-arbetsyta som möjliggör reproducerbara, granskningsbara och portabla arbetsflöden för maskininlärning mellan olika beräkningsmål.

Du kan använda ett Environment objekt 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 visar hur du kan använda ett enda Environment objekt i både din jobbkonfiguration (för träning) och din slutsatsdragning och distributionskonfiguration (för webbtjänstdistributioner).

Diagram of an environment in machine learning workflow

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

Miljötyper

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

Utvalda 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 med 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. Kuraterade miljöer finns i AzureML Registry. En fullständig lista finns i miljöerna i azureml-registret.

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. Användarhanterad miljö kan vara BYOC (Bring Your Own Container) eller Docker Build Context baserat på att delegera bildmaterialisering till AzureML.

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 bas docker-avbildning.

Skapa och hantera miljöer

Du kan skapa miljöer från klienter som Azure Machine Learning Python SDK, Azure Machine Learning CLI, miljösidan 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. Den cachelagrar också miljöerna så att de kan återanvändas i efterföljande träningsjobb och tjänstslutpunktsdistributioner. Om du kör ett träningsskript via fjärranslutning måste du skapa en Docker-avbildning. Som standard hanterar AzureML avbildningsbyggmålet på den tillgängliga arbetsytans serverlösa beräkningskvot om ingen dedikerad beräkningsuppsättning har angetts för arbetsytan.

Kommentar

Eventuella nätverksbegränsningar i AzureML-arbetsytan kan kräva dedikerad beräkningskonfiguration för användarhanterad avbildningsversion. Följ stegen för att skydda arbetsyteresurser.

Skicka ett jobb med hjälp av en miljö

När du först skickar ett fjärrjobb med hjälp av en miljö eller skapar en miljöinstans manuellt skapar Azure Machine Learning en avbildning för den angivna specifikationen. Resultatavbildningen cachelagras i containerregisterinstansen som är associerad med arbetsytan. Utvalda miljöer cachelagras redan i AzureML-registret. I början av jobbkörningen hämtas avbildningen av beräkningsmålet från det relevanta containerregistret.

Skapa miljöer som Docker-avbildningar

Om avbildningen för en viss miljödefinition inte redan finns i containerregisterinstansen som är associerad med AzureML-arbetsytan skapas en ny avbildning. För systemhanterade miljöer består avbildningsversionen av två steg:

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

För användarhanterade miljöer skapas docker-kontexten som den är. I det här fallet ansvarar du för att installera python-paket genom att inkludera dem i basavbildningen eller ange anpassade Docker-steg.

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 containerregistret som är associerat med din arbetsyta.

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 i befintliga miljöer. Hashen fungerar som en unik identifierare för en miljö och baseras på miljödefinitionens:

  • Basavbildning
  • Anpassade docker-steg
  • Python-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. Miljödefinitionsändringar som att lägga till eller ta bort ett Python-paket eller ändra en paketversion ändrar dock det resulterande hashvärdet. Om du ändrar ordningen på beroenden eller kanaler i en miljö ändras även hashen och en ny avbildningsversion krävs. På samma sätt resulterar alla ändringar i en kurerad miljö i skapandet av en anpassad miljö.

Kommentar

Du kommer inte att kunna skicka några lokala ändringar till en kurerad miljö utan att ändra namnet på miljön. Prefixen "AzureML-" och "Microsoft" är endast reserverade för utvalda 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ärdet i arbetsytans containerregister. 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 of environment caching and Docker images

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

Viktigt!

  • Om du skapar en miljö med ett icke-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 en återskapad avbildning. Ett exempel på detta skulle ändras 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 kan det leda till att avbildningen återskapas 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äkerhetsrisker. Uppdateringar för bilder som stöds släpps varannan vecka, med ett åtagande om att inga okopplade säkerhetsrisker är äldre än 30 dagar i den senaste versionen av avbildningen. Korrigerade bilder 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 i följande länkar:

Nästa steg