Deze referentiearchitectuur laat zien hoe u continue integratie (CI), continue levering (CD) en pijplijn voor opnieuw trainen implementeert voor een AI-toepassing met behulp van Azure DevOps en Azure Machine Learning. De oplossing is gebaseerd op de diabetes-gegevensset scikit-learn, maar kan eenvoudig worden aangepast voor elk AI-scenario en andere populaire buildsystemen, zoals Jenkins of Jenkins.
Een referentie-implementatie voor deze architectuur is beschikbaar op GitHub.

Architectuur
Deze architectuur bestaat uit de volgende onderdelen:
Azure Pipelines. Dit build- en testsysteem is gebaseerd op Azure DevOps en wordt gebruikt voor de build- en release-pijplijnen. Azure Pipelines onderbreekt deze pijplijnen in logische stappen die taken worden genoemd. Met de Azure CLI-taak kunt u bijvoorbeeld gemakkelijker met Azure-resources werken.
Azure Machine Learning is een cloudservice voor het trainen, scoren, implementeren en beheren van machine learning modellen op schaal. Deze architectuur maakt gebruik van Azure Machine Learning Python SDK voor het maken van een werkruimte, rekenbronnen, machine learning pijplijn en de score-afbeelding. Een Azure Machine Learning werkruimte biedt de ruimte om te experimenteren, trainen en implementeren machine learning modellen.
Azure Machine Learning Compute is een cluster virtuele machines op aanvraag met opties voor automatisch schalen en GPU en CPU-knooppunt. De trainings job wordt uitgevoerd op dit cluster.
Azure Machine Learning pijplijnen bieden herbruikbare machine learning die kunnen worden hergebruikt in verschillende scenario's. Training, modelevaluatie, modelregistratie en het maken van afbeeldingen vinden plaats in afzonderlijke stappen binnen deze pijplijnen voor deze use-case. De pijplijn wordt aan het einde van de buildfase gepubliceerd of bijgewerkt en wordt geactiveerd bij het aankomt van nieuwe gegevens.
Azure Blob Storage. Blobcontainers worden gebruikt om de logboeken van de scoring-service op te slaan. In dit geval worden zowel de invoergegevens als de modelvoorspelling verzameld. Na een bepaalde transformatie kunnen deze logboeken worden gebruikt voor het opnieuw trainen van modellen.
Azure Container Registry. Het python-scorescript is verpakt als een Docker-afbeelding en in het register wordt versieversies van het script gebruikt.
Azure Container Instances. Als onderdeel van de release-pijplijn worden de QA- en faseringsomgeving nagebootst door de scorewebservice-afbeelding te implementeren in Container Instances. Dit biedt een eenvoudige, serverloze manier om een container uit te voeren.
Azure Kubernetes Service. Zodra de scorewebservice-afbeelding grondig is getest in de QA-omgeving, wordt deze geïmplementeerd in de productieomgeving op een beheerd Kubernetes-cluster.
Azure-toepassing Insights. Deze bewakingsservice wordt gebruikt om prestatieafwijkingen te detecteren.
MLOps-pijplijn
Deze oplossing demonstreert end-to-end automatisering van verschillende fasen van een AI-project met behulp van hulpprogramma's die al bekend zijn bij softwaretechnici. Het machine learning is eenvoudig om de focus te houden op de DevOps-pijplijn. De oplossing maakt gebruik van de diabetes-gegevensset scikit-learn en bouwt een lineair regressiemodel om de kans op diabetes te voorspellen. Zie Training van Python scikit-learn-modellen voor meer informatie.
Deze oplossing is gebaseerd op de volgende drie pijplijnen:
- Build-pijplijn. Bouwt de code en voert een reeks tests uit.
- Pijplijn opnieuw trainen. Het model opnieuw trainen volgens een schema of wanneer er nieuwe gegevens beschikbaar komen.
- Release-pijplijn. Operationaliseert de score-afbeelding en promovert deze veilig in verschillende omgevingen.
In de volgende secties worden deze pijplijnen beschreven.
Build-pipeline
De CI-pijplijn wordt steeds geactiveerd wanneer de code wordt ingecheckt. Er wordt een bijgewerkte Azure Machine Learning-pijplijn gepubliceerd na het bouwen van de code en het uitvoeren van een reeks tests. De build-pijplijn bestaat uit de volgende taken:
Codekwaliteit. Deze tests zorgen ervoor dat de code voldoet aan de normen van het team.
Eenheidstest. Deze tests zorgen ervoor dat de code werkt, voldoende codedekking heeft en stabiel is.
Gegevenstest. Deze tests controleren of de gegevensvoorbeelden voldoen aan het verwachte schema en de verdeling. Pas deze test aan voor andere gebruiksgevallen en voer deze uit als een afzonderlijke pijplijn voor gegevens sanity die wordt geactiveerd wanneer er nieuwe gegevens binnenkomen. Verplaats bijvoorbeeld de gegevenstesttaak naar een pijplijn voor gegevensin opname, zodat u deze eerder kunt testen.
Notitie
Overweeg de DevOps-procedures in te stellen voor de gegevens die worden gebruikt om de machine learning te trainen, maar dit wordt niet in dit artikel behandeld. Zie DevOpsvoor een pijplijn voor gegevensingestie voor meer informatie over de architectuur en best practices voor CI/CD van een pijplijn voor gegevensin opname.
De volgende een time-taken worden uitgevoerd bij het instellen van de infrastructuur voor Azure Machine Learning en de Python SDK:
- Maak de werkruimte die als host voor alle Azure Machine Learning resources host.
- Maak de rekenbronnen die de trainings job uitvoeren.
- Maak de machine learning pijplijn met het bijgewerkte trainingsscript.
- Publiceer de machine learning pijplijn als een REST-eindpunt om de trainingswerkstroom te beheren. In de volgende sectie wordt deze stap beschreven.
Pijplijn opnieuw trainen
De machine learning het proces van het opnieuw trainen van het model op een asynchrone manier. Opnieuw trainen kan worden geactiveerd volgens een planning of wanneer nieuwe gegevens beschikbaar komen door het gepubliceerde REST-eindpunt van de pijplijn uit de vorige stap aan te roepen.
Deze pijplijn beslaat de volgende stappen:
Model trainen. Het Python-trainingsscript wordt uitgevoerd op de Azure Machine Learning Compute-resource om een nieuw modelbestand op te halen dat is opgeslagen in de uitvoeringsgeschiedenis. Omdat training de meest rekenintensieve taak in een AI-project is, gebruikt de oplossing Azure Machine Learning Compute.
Model evalueren. Een eenvoudige evaluatietest vergelijkt het nieuwe model met het bestaande model. Alleen wanneer het nieuwe model beter is, wordt het gepromoveerd. Anders is het model niet geregistreerd en wordt de pijplijn geannuleerd.
Model registreren. Het opnieuw getrainde model wordt geregistreerd bij het Azure ML Model-register. Deze service biedt versiebeheer voor de modellen, samen met metagegevenstags, zodat ze eenvoudig kunnen worden gereproduceerd.
Release-pijplijn
Deze pijplijn laat zien hoe u de score-afbeelding operationeel maakt en deze veilig promovert in verschillende omgevingen. Deze pijplijn is onderverdeeld in twee omgevingen: QA en productie:
QA-omgeving
Trigger voor modelartefact. Release-pijplijnen worden steeds geactiveerd wanneer een nieuw artefact beschikbaar is. Een nieuw model dat is geregistreerd Azure Machine Learning Modelbeheer wordt behandeld als een release-artefact. In dit geval wordt een pijplijn geactiveerd voor elk nieuw model dat wordt geregistreerd.
Maak een scoreafbeelding. Het geregistreerde model wordt samen met een scorescript en Python-afhankelijkheden(Conda YAML-bestand)verpakt in een Docker-operationalisatie-afbeelding. Er wordt automatisch versiebeheer uitgevoerd op de installatiekopie via Azure Container Registry.
Implementeer op Container Instances. Deze service wordt gebruikt om een niet-productieomgeving te maken. De score-afbeelding wordt hier ook geïmplementeerd en wordt meestal gebruikt voor het testen. Container Instances biedt een eenvoudige en snelle manier om de Docker-afbeelding te testen.
Webservice testen. Een eenvoudige API-test zorgt ervoor dat de afbeelding is geïmplementeerd.
Productieomgeving
Implementeer op Azure Kubernetes Service. Deze service wordt gebruikt voor het implementeren van een score-afbeelding als webservice op schaal in een productieomgeving.
Webservice testen. Een eenvoudige API-test zorgt ervoor dat de afbeelding is geïmplementeerd.
Schaalbaarheidsoverwegingen
Een build-pijplijn in Azure DevOps kan worden geschaald voor toepassingen van elke grootte. Build-pijplijnen hebben een maximale time-out die varieert, afhankelijk van de agent waar ze op worden uitgevoerd. Builds kunnen altijd worden uitgevoerd op zelf-hostende agents (privéagents). Voor door Microsoft gehoste agents voor een openbaar project kunnen builds zes uur worden uitgevoerd. Voor privéprojecten is de limiet 30 minuten.
Als u de maximale time-out wilt gebruiken, stelt u de volgende eigenschap in uw YAML-bestand van Azure Pipelines in:
jobs:
- job: <job_name>
timeoutInMinutes: 0
In het ideale moment kunt u uw build-pijplijn snel voltooien en alleen eenheidstests en een subset van andere tests uitvoeren. Hierdoor kunt u de wijzigingen snel valideren en deze oplossen als er problemen optreden. Langlopende tests uitvoeren buiten werkuren.
De release-pijplijn publiceert een realtime scoring-webservice. Een release voor de QA-omgeving wordt uitgevoerd met Container Instances voor het gemak, maar u kunt een ander Kubernetes-cluster gebruiken dat wordt uitgevoerd in de QA-/faseringsomgeving.
Schaal de productieomgeving op basis van de grootte van uw Azure Kubernetes Service cluster. De grootte van het cluster is afhankelijk van de belasting die u verwacht voor de geïmplementeerde scorewebservice. Voor realtime scoring-architecturen is doorvoer een belangrijke metrische gegevensoptimalisatie. Voor niet-deep learning-scenario's moet de CPU voldoende zijn om de belasting te verwerken; Voor deep learning-workloads bieden GPU's echter over het algemeen betere prestaties in vergelijking met CPU's wanneer snelheid een knelpunt is. Azure Kubernetes Service ondersteunt zowel CPU- als GPU-knooppunttypen. Dit is de reden waarom deze oplossing deze gebruikt voor de implementatie van installatie afbeeldingen. Zie GPU's versus CPU's voor de implementatie van Deep Learning-modellen voor meer informatie.
Schaal de pijplijn voor opnieuw trainen omhoog en omlaag, afhankelijk van het aantal knooppunten in uw Azure Machine Learning Compute-resource, en gebruik de optie voor automatisch schalen om het cluster te beheren. Deze architectuur maakt gebruik van CPU's. Voor deep learning-workloads zijn GPU's een betere keuze en worden ze ondersteund door Azure Machine Learning Compute.
Overwegingen ten aanzien van het beheer
Controleer de taak voor opnieuw trainen. Machine learning-pijplijnen orkestreren opnieuw trainen in een cluster van machines en bieden een eenvoudige manier om ze te bewaken. Gebruik de Azure Machine Learning gebruikersinterface en zoek in de sectie Pijplijnen naar de logboeken. Deze logboeken worden ook naar de blob geschreven en kunnen daar ook worden gelezen met hulpprogramma's zoals Azure Storage Explorer.
Logboekregistratie. Azure Machine Learning biedt een eenvoudige manier om elke stap van de machine learning te loggen. De logboeken worden opgeslagen in een blobcontainer. Zie Logboekregistratie inschakelen in Azure Machine Learning voor meer Azure Machine Learning. Configureer application Insights de logboeken te gebruiken voor uitgebreidere bewaking.
Veiligheid. Alle geheimen en referenties worden opgeslagen in Azure Key Vault en worden gebruikt in Azure Pipelines met behulp van variabele groepen.
Kostenoverwegingen
Azure DevOps is gratis voor opensource-projecten en kleine projecten met maximaal vijf gebruikers. Voor grotere teams koopt u een abonnement op basis van het aantal gebruikers.
Compute is de grootste kostendrijf in deze architectuur en de kosten variëren afhankelijk van de use-case. Deze architectuur maakt gebruik Azure Machine Learning Compute, maar er zijn andere opties beschikbaar. Azure Machine Learning voegt geen extra kosten toe boven op de kosten van de virtuele machines die uw berekeningscluster prioriteren. Configureer uw rekencluster zo dat het minimaal 0 knooppunten heeft, zodat het, wanneer het niet in gebruik is, omlaag kan schalen naar 0 knooppunten en geen kosten in rekening kan brengen. De rekenkosten zijn afhankelijk van het knooppunttype, een aantal knooppunten en de inrichtingsmodus (lage prioriteit of toegewezen). U kunt de kosten voor uw Machine Learning en andere services schatten met behulp van de Azure-prijscalculator.
De oplossing implementeren
Als u deze referentiearchitectuur wilt implementeren, volgt u de stappen die worden beschreven in de Aan de slag in de GitHub-repo.
Volgende stappen
- Wilt u meer leren? Bekijk het gerelateerde Leertraject: Microsoft Learn de levenscyclus van machine learning mlops starten