Wat zijn Azure Machine Learning omgevingen?

Azure Machine Learning omgevingen zijn een inkapsling van de omgeving waarin uw machine learning wordt getraind. Ze geven de Python-pakketten, omgevingsvariabelen en software-instellingen rond uw trainings- en scorescripts op. Ze geven ook run times op (Python, Spark of Docker). De omgevingen zijn beheerde en geversiereerde entiteiten binnen uw Machine Learning-werkruimte die reproduceerbare, controleerbare en draagbare machine learning-werkstromen voor verschillende rekendoelen mogelijk maken.

U kunt een Environment -object op uw lokale rekenkracht gebruiken om het volgende te doen:

  • Ontwikkel uw trainingsscript.
  • Gebruik dezelfde omgeving opnieuw op Azure Machine Learning Compute voor modeltraining op schaal.
  • Implementeer uw model met dezelfde omgeving.
  • Bekijk opnieuw de omgeving waarin een bestaand model is getraind.

In het volgende diagram ziet u hoe u één object kunt gebruiken in zowel uw uitvoeringsconfiguratie (voor training) als uw deferentie- en implementatieconfiguratie Environment (voor webservice-implementaties).

Diagram van een omgeving in machine learning werkstroom

De omgeving, het rekendoel en het trainingsscript vormen samen de uitvoeringsconfiguratie: de volledige specificatie van een trainingsrun.

Typen omgevingen

Omgevingen kunnen in grote lijnen worden onderverdeeld in drie categorieën: gecureerde, door de gebruiker beheerde en door het systeem beheerde.

Gecureerde omgevingen worden geleverd door Azure Machine Learning en zijn standaard beschikbaar in uw werkruimte. Ze zijn bedoeld om te worden gebruikt zoals ze zijn en bevatten verzamelingen Python-pakketten en -instellingen om u te helpen aan de slag te gaan met verschillende machine learning frameworks. Deze vooraf gemaakte omgevingen zorgen ook voor een snellere implementatietijd. Zie het artikel over gecureerde omgevingen voor een volledige lijst.

In door de gebruiker beheerde omgevingen bent u verantwoordelijk voor het instellen van uw omgeving en het installeren van elk pakket dat uw trainingsscript nodig heeft op het rekendoel. Conda controleert uw omgeving niet en installeert niets voor u. Als u uw eigen omgeving definit, moet u een azureml-defaults lijst met versies als >= 1.0.45 pip-afhankelijkheid gebruiken. Dit pakket bevat de functionaliteit die nodig is om het model als webservice te hosten.

U gebruikt door het systeem beheerde omgevingen wanneer u wilt dat Conda de Python-omgeving en de scriptafhankelijkheden voor u beheert. Er wordt een nieuwe Conda-omgeving gebouwd op basis van het object conda-afhankelijkheden. De Azure Machine Learning-service gaat standaard uit van dit type omgeving, vanwege het nut ervan voor externe rekendoelen die niet handmatig kunnen worden geconfigureerd.

Omgevingen maken en beheren

U kunt omgevingen maken door:

  • Het definiëren van Environment nieuwe objecten, met behulp van een gecureerde omgeving of door uw eigen afhankelijkheden te definiëren.
  • Bestaande objecten Environment uit uw werkruimte gebruiken. Deze aanpak maakt consistentie en reproduceerbaarheid met uw afhankelijkheden mogelijk.
  • Importeren vanuit een bestaande Anaconda-omgevingsdefinitie.
  • De cli Azure Machine Learning gebruiken
  • De VS Code-extensie gebruiken

Zie de sectie 'Een omgeving maken' van Omgevingen gebruiken voor specifieke codevoorbeelden. Omgevingen kunnen ook eenvoudig worden beheerd via uw werkruimte. Ze bevatten de volgende functionaliteit:

  • Omgevingen worden automatisch geregistreerd bij uw werkruimte wanneer u een experiment indient. Ze kunnen ook handmatig worden geregistreerd.
  • U kunt omgevingen ophalen uit uw werkruimte om te gebruiken voor training of implementatie, of om de omgevingsdefinitie te bewerken.
  • Met versieversies kunt u na een periode wijzigingen in uw omgevingen zien, waardoor reproduceerbaarheid wordt gegarandeerd.
  • U kunt Docker-afbeeldingen automatisch bouwen vanuit uw omgevingen.

Zie de sectie Omgevingen beheren van Omgevingen gebruiken voor codevoorbeelden.

Omgeving bouwen, opslaan in deaching en hergebruik

De Azure Machine Learning-service bouwt omgevingsdefinities in Docker-afbeeldingen en Conda-omgevingen. De omgevingen worden ook in de cache opgeslagen, zodat ze opnieuw kunnen worden gebruikt in volgende trainings- en service-eindpuntimplementaties. Voor het uitvoeren van een trainingsscript op afstand moet een Docker-afbeelding worden gemaakt, terwijl een lokale run rechtstreeks een Conda-omgeving kan gebruiken.

Een run verzenden met behulp van een omgeving

Wanneer u voor het eerst een externe run indient met behulp van een omgeving, roept de Azure Machine Learning-service een ACR Build-taak aan op de Azure Container Registry (ACR) die is gekoppeld aan de werkruimte. De gebouwde Docker-afbeelding wordt vervolgens in de cache opgeslagen in de werkruimte-ACR. Gecureerde omgevingen worden gebruikt door Docker-afbeeldingen die in de cache worden opgeslagen in Global ACR. Aan het begin van de uitvoering wordt de afbeelding opgehaald door het rekendoel van de relevante ACR.

Voor lokale runs wordt een Docker- of Conda-omgeving gemaakt op basis van de omgevingsdefinitie. De scripts worden vervolgens uitgevoerd op de doelreken- een lokale runtime-omgeving of lokale Docker-engine.

Omgevingen bouwen als Docker-afbeeldingen

Als de omgevingsdefinitie nog niet bestaat in de ACR van de werkruimte, wordt er een nieuwe afbeelding gemaakt. De build van de afbeelding bestaat uit twee stappen:

  1. Een basisafbeelding downloaden en eventuele Docker-stappen uitvoeren
  2. Het bouwen van een Conda-omgeving volgens conda-afhankelijkheden die zijn opgegeven in de omgevingsdefinitie.

De tweede stap wordt weggelaten als u door de gebruiker beheerde afhankelijkheden opgeeft. In dit geval bent u verantwoordelijk voor het installeren van Python-pakketten, door ze op te nemen in uw basisafbeelding of door in de eerste stap aangepaste Docker-stappen op te geven. U bent ook verantwoordelijk voor het opgeven van de juiste locatie voor het uitvoerbare Python-bestand. Het is ook mogelijk om een aangepaste Docker-basisafbeelding te gebruiken.

Opslaan in de caching en hergebruik van afbeeldingen

Als u dezelfde omgevingsdefinitie gebruikt voor een andere run, gebruikt Azure Machine Learning service de in de cache opgeslagen afbeelding opnieuw vanuit de werkruimte-ACR.

Als u de details van een afbeelding in de cache wilt weergeven, gebruikt u Environment.get_image_details methode.

Om te bepalen of een in de cache opgeslagen afbeelding opnieuw moet worden gebruikt of een nieuwe moet worden gemaakt, berekent de service een hash-waarde uit de omgevingsdefinitie en vergelijkt deze met de hashes van bestaande omgevingen. De hash is gebaseerd op:

  • Eigenschapswaarde basisafbeelding
  • Eigenschapswaarde voor aangepaste Docker-stappen
  • Lijst met Python-pakketten in Conda-definitie
  • Lijst met pakketten in Spark-definitie

De hash is niet afhankelijk van de naam of versie van de omgeving. Als u de naam van uw omgeving wijzigt of een nieuwe omgeving maakt met de exacte eigenschappen en pakketten van een bestaande omgeving, blijft de hashwaarde hetzelfde. Wijzigingen in de omgevingsdefinitie, zoals het toevoegen of verwijderen van een Python-pakket of het wijzigen van de pakketversie, zorgen er echter voor dat de hash-waarde wordt gewijzigd. Het wijzigen van de volgorde van afhankelijkheden of kanalen in een omgeving leidt tot een nieuwe omgeving en vereist daarom een nieuwe build van de afbeelding. Het is belangrijk te weten dat elke wijziging in een gecureerde omgeving de hash ongeldig maakt en resulteert in een nieuwe 'niet-gecureerde' omgeving.

De berekende hashwaarde wordt vergeleken met die in de werkruimte en globale ACR (of op het rekendoel voor lokale runs). Als er een overeenkomst is, wordt de in de cache opgeslagen afbeelding getrokken, anders wordt een build van de afbeelding geactiveerd. De duur voor het pullen van een in de cache opgeslagen afbeelding omvat de downloadtijd, terwijl de duur voor het pullen van een nieuw gebouwde afbeelding zowel de buildtijd als de downloadtijd bevat.

In het volgende diagram ziet u drie omgevingsdefinities. Twee hebben verschillende namen en versies, maar identieke basisafbeeldingen en Python-pakketten. Maar ze hebben dezelfde hash en komen dus overeen met dezelfde afbeelding in de cache. De derde omgeving heeft verschillende Python-pakketten en -versies en komt daarom overeen met een andere afbeelding in de cache.

Diagram van omgevings caching als Docker-afbeeldingen

Belangrijk

Als u bijvoorbeeld een omgeving maakt met een losgemaakte pakketafhankelijkheid, blijft die omgeving de pakketversie gebruiken die is geïnstalleerd op het moment dat de numpy omgeving wordt gemaakt. Ook in een toekomstige omgeving met overeenkomende definities wordt de oude versie gebruikt.

Als u het pakket wilt bijwerken, geeft u een versienummer op om het opnieuw bouwen van de afbeelding af te dwingen, bijvoorbeeld numpy==1.18.1 . Nieuwe afhankelijkheden, inclusief geneste afhankelijkheden, worden geïnstalleerd die een eerder werkend scenario kunnen breken.

Waarschuwing

Met de methode Environment.build wordt de afbeelding in de cache opnieuw opgebouwd, met mogelijk neveneffect van het bijwerken van losgemaakte pakketten en het verbreken van de reproduceerbaarheid voor alle omgevingsdefinities die overeenkomen met die afbeelding in de cache.

Volgende stappen