Dela via


Vad är Azure Machine Learning-miljöer?

Azure Machine Learning-miljöer är en inkapsling av miljön där din maskininlärningsträning eller slutsatsdragning 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 ö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.

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. Utvalda miljöer finns i AzureML-registret, som är ett maskininlärningsregister som hanteras av Microsoft. 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 Azure Machine Learning. På samma sätt som i utvalda miljöer kan du dela användarhanterade miljöer mellan arbetsytor med hjälp av ett maskininlärningsregister som du skapar och hanterar.

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 Azure Machine Learning Python SDK, Azure Machine Learning CLI, 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 du kan använda versionen för att hämta dem.

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 Azure Machine Learning avbildningsbyggmålet på den tillgängliga kvoten för serverlös beräkning på arbetsytan om ingen dedikerad beräkningsuppsättning har angetts för arbetsytan.

Kommentar

Eventuella nätverksbegränsningar på Azure Machine Learning-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 Azure Machine Learning Registry. I början av jobbkörningen hämtar beräkningsmålet avbildningen 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 Azure Machine Learning-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 tillhandahålls docker-kontextbyggen som de ä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. Därefter jämförs hashen med hashvärden för befintliga miljöer. Hashen fungerar som en unik identifierare för en miljö och baseras på miljödefinitionens:

  • Basavbildning
  • Anpassade docker-steg
  • Python-paket

Miljönamnet och versionen påverkar inte hashen. 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. Ändra ordningen på beroenden eller kanaler i en miljö ändrar hashen och kräver en ny avbildningsversion. 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 hashvärdena 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 över miljöcachelagring och Docker-avbildningar

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 icke-kopplade 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: