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).
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:
- Ladda ned en basavbildning och köra eventuella Docker-steg
- 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.
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
tillnumpy==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 taggenlatest
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:
- Basavbildningar för Azure Machine Learning GitHub-lagringsplats.
- Använda en anpassad container för att distribuera en modell till en onlineslutpunkt
- Hantera miljöer och containeravbildningar
Nästa steg
- Lär dig hur du skapar och använder miljöer i Azure Machine Learning.
- Se Python SDK-referensdokumentationen för miljöklassen.