Deze referentiearchitectuur laat zien hoe u Python-modellen implementeert als webservices om realtime voorspellingen te doen met behulp van Azure Kubernetes Service. Machine learning-modellen die in Azure Kubernetes zijn geïmplementeerd, zijn goed voor grootschalige productie-implementaties.
In dit artikel worden twee scenario's behandeld: het implementeren van reguliere Python-modellen en de specifieke vereisten voor het implementeren van deep learning-modellen. In beide scenario's wordt de weergegeven architectuur gebruikt. Daarnaast zijn er twee referentie-implementaties voor deze scenario's beschikbaar op GitHub, één voor reguliere Python-modellen en één voor deep learning-modellen.

Scenario: Stack Overflow veelgestelde vragen
In dit scenario ziet u hoe u een model met veelgestelde vragen (FAQ) implementeert als een webservice om voorspellingen te doen voor vragen van gebruikers. Voor dit scenario verwijst Invoergegevens in het architectuurdiagram naar tekstreeksen met gebruikersvragen die moeten overeenkomen met een lijst met veelgestelde vragen. Dit scenario is ontworpen voor de scikit-learn machine learning-bibliotheek voor Python, maar kan worden ge generaliseerd naar elk scenario waarin Python-modellen worden gebruikt om realtime voorspellingen te doen.
In dit scenario wordt gebruikgemaakt van een subset Stack Overflow vraaggegevens die oorspronkelijke vragen bevatten die zijn gelabeld als JavaScript, hun dubbele vragen en hun antwoorden. Het traint een scikit-learn-pijplijn om de overeenkomende waarschijnlijkheid van een dubbele vraag te voorspellen met elk van de oorspronkelijke vragen. Deze voorspellingen worden in realtime gedaan met behulp van een REST API eindpunt.
De toepassingsstroom voor deze architectuur is als volgt:
- Het getrainde model wordt geregistreerd in het machine learning modelregister.
- Azure Machine Learning maakt een Docker-afbeelding die het model en scoring-script bevat.
- Azure Machine Learning implementeert de score-afbeelding op Azure Kubernetes Service (AKS) als een webservice.
- De client verzendt een HTTP POST-aanvraag met de gecodeerde vraaggegevens.
- De webservice die is gemaakt Azure Machine Learning extraheert de vraag uit de aanvraag.
- De vraag wordt verzonden naar het pijplijnmodel scikit-learn voor featurization en scoring.
- De overeenkomende veelgestelde vragen met hun scores worden geretourneerd naar de client.
Hier is een schermopname van de voorbeeld-app die de resultaten verbruikt:

Scenario: Afbeeldingsclassificatie met een convolutioneel neuraal netwerk
In dit scenario ziet u hoe u een CNN-model (Convolutional Neural Network) implementeert als een webservice om voorspellingen te doen over afbeeldingen. Voor dit scenario verwijst Invoergegevens in het architectuurdiagram naar afbeeldingsbestanden. CNN's zijn effectief in Computer Vision voor taken zoals afbeeldingsclassificatie en objectdetectie. Dit scenario is ontworpen voor de frameworks TensorFlow, Keras (met de TensorFlow-back-end) en PyTorch. Het kan echter worden ge generaliseerd naar elk scenario waarin deep learning-modellen worden gebruikt om realtime voorspellingen te doen.
In dit scenario wordt een vooraf getraind ResNet-152-model gebruikt dat is getraind met de gegevensset ImageNet-1K (1000 klassen) om te voorspellen tot welke categorie (zie afbeelding hieronder) een afbeelding behoort. Deze voorspellingen worden in realtime gedaan met behulp van een REST API eindpunt.

De toepassingsstroom voor het Deep Learning-model is als volgt:
- Het deep learning-model is geregistreerd in het machine learning modelregister.
- Azure Machine Learning maakt een Docker-afbeelding met inbegrip van het model en scoring-script.
- Azure Machine Learning implementeert de score-afbeelding op Azure Kubernetes Service (AKS) als een webservice.
- De client verzendt een HTTP POST-aanvraag met de gecodeerde afbeeldingsgegevens.
- De webservice die is gemaakt door Azure Machine Learning verwerkt de afbeeldingsgegevens voor en verzendt deze naar het model om te scoren.
- De voorspelde categorieën met hun scores worden geretourneerd naar de client.
Architectuur
Deze architectuur bestaat uit de volgende onderdelen.
Azure Machine Learning is een cloudservice die wordt gebruikt voor het trainen, implementeren, automatiseren en beheren van machine learning-modellen, allemaal op de grote schaal die de cloud biedt. Het wordt in deze architectuur gebruikt voor het beheren van de implementatie van modellen en verificatie, routering en taakverdeling van de webservice.
Virtuele machine (VM). De VM wordt weergegeven als een voorbeeld van een apparaat( lokaal of in de cloud) dat een HTTP-aanvraag kan verzenden.
Azure Kubernetes Service (AKS) wordt gebruikt om de toepassing te implementeren in een Kubernetes-cluster. AKS vereenvoudigt de implementatie en bewerkingen van Kubernetes. Het cluster kan worden geconfigureerd met alleen CPU-VM's voor gewone Python-modellen of VM's met GPU voor deep learning-modellen.
Azure Container Registry maakt opslag van installatie afbeeldingen mogelijk voor alle typen implementaties van Docker-containers, waaronder DC/OS, Docker Swarm en Kubernetes. De score-afbeeldingen worden geïmplementeerd als containers op Azure Kubernetes Service en gebruikt om het scorescript uit te voeren. De afbeelding die hier wordt gebruikt, wordt gemaakt Machine Learning van het getrainde model en scoring-script, en wordt vervolgens naar de Azure Container Registry.
Prestatieoverwegingen
Voor realtime scoring-architecturen worden doorvoerprestaties een dominante overweging. Voor gewone Python-modellen zijn CPU's voldoende om de workload te verwerken.
Wanneer snelheid echter een knelpunt is voor deep learning-workloads, bieden GPU's over het algemeen betere prestaties in vergelijking met CPU's. Om de GPU-prestaties te kunnen matchen met BEHULP van CPU's, is doorgaans een cluster met een groot aantal CPU's nodig.
In beide scenario's kunt u CPU's gebruiken voor deze architectuur, maar voor Deep Learning-modellen bieden GPU's hogere doorvoerwaarden in vergelijking met een CPU-cluster met vergelijkbare kosten. AKS ondersteunt het gebruik van GPU's, wat een voordeel is van het gebruik van AKS voor deze architectuur. Deep Learning-implementaties maken ook doorgaans gebruik van modellen met een groot aantal parameters. Het gebruik van GPU's voorkomt problemen met resources tussen het model en de webservice, wat een probleem is bij implementaties met alleen CPU.
Schaalbaarheidsoverwegingen
Voor normale Python-modellen, waarbij het AKS-cluster is ingericht met alleen CPU-VM's, moet u het aantal pods uitschalen. Het doel is om het cluster volledig te gebruiken. Schalen is afhankelijk van de CPU-aanvragen en limieten die zijn gedefinieerd voor de pods. Machine Learning kubernetes biedt ook ondersteuning voor automatisch schalen van pods op basis van CPU-gebruik of andere metrische gegevens. De automatische schaalvergroting van clusters kan agentknooppunten schalen op basis van de pods die in behandeling zijn.
Voor deep learning-scenario's, met behulp van VM's met GPU, zijn resourcelimieten voor pods zodanig dat één GPU wordt toegewezen aan één pod. Afhankelijk van het type VM dat wordt gebruikt, moet u de knooppunten van het cluster schalen om te voldoen aan de vraag naar de service. U kunt dit eenvoudig doen met behulp van de Azure CLI en kubectl.
Overwegingen voor bewaking en logboekregistratie
AKS-bewaking
Gebruik de functie Azure Monitor containers voor meer inzicht in de prestaties van AKS. Het verzamelt metrische geheugen- en processorgegevens van controllers, knooppunten en containers die beschikbaar zijn in Kubernetes via de Api voor metrische gegevens.
Controleer tijdens het implementeren van uw toepassing het AKS-cluster om te controleren of het werkt zoals verwacht, dat alle knooppunten operationeel zijn en dat alle pods worden uitgevoerd. Hoewel u het opdrachtregelprogramma kubectl kunt gebruiken om de podstatus op te halen, bevat Kubernetes ook een webdashboard voor eenvoudige bewaking van de clusterstatus en het beheer.

Als u de algehele status van het cluster en de knooppunten wilt zien, gaat u naar de sectie Knooppunten van het Kubernetes-dashboard. Als een knooppunt inactief is of is mislukt, kunt u de foutlogboeken van die pagina weergeven. Ga op dezelfde manier naar de secties Pods en implementaties voor informatie over het aantal pods en de status van uw implementatie.
AKS-logboeken
AKS registreert automatisch alle stdout/stderr in de logboeken van de pods in het cluster. Gebruik kubectl om deze gebeurtenissen en logboeken op knooppuntniveau te bekijken. Zie de implementatiestappen voor meer informatie.
Gebruik Azure Monitor containers voor het verzamelen van metrische gegevens en logboeken via een in een container geplaatste versie van de Log Analytics-agent voor Linux, die is opgeslagen in uw Log Analytics-werkruimte.
Beveiligingsoverwegingen
Gebruik Azure Security Center voor een centraal overzicht van de beveiligingsstatus van uw Azure-resources. Security Center mogelijke beveiligingsproblemen bewaakt en biedt een uitgebreid overzicht van de beveiligingstoestand van uw implementatie, hoewel hiermee geen AKS-agentknooppunten worden bewaakt. Security Center wordt per Azure-abonnement geconfigureerd. Schakel het verzamelen van beveiligingsgegevens in zoals beschreven in Security Center inschakelen voor uw abonnementen. Wanneer gegevensverzameling is ingeschakeld, scant Security Center automatisch alle virtuele machines die zijn gemaakt met dat abonnement.
Bewerkingen. Als u zich wilt aanmelden bij een AKS-cluster met behulp van uw Azure Active Directory -verificatie token (Azure AD), configureert u AKS om Azure AD te gebruiken voor gebruikersverificatie. Clusterbeheerders kunnen kubernetes-toegangsbeheer op basis van rollen (Kubernetes RBAC) ook configureren op basis van de identiteit of het lidmaatschap van een directorygroep van een gebruiker.
Gebruik Azure RBAC om de toegang te beheren tot de Azure-resources die u implementeert. Met Azure RBAC kunt u autorisatierollen toewijzen aan leden van uw DevOps-team. Een gebruiker kan worden toegewezen aan meerdere rollen en u kunt aangepaste rollen maken voor nog meer specifieke [machtigingen.]
HTTPS. Als beveiligingsbeveiligings best practice de toepassing HTTPS afdwingen en HTTP-aanvragen omleiden. Gebruik een controller voor ingress om een omgekeerde proxy te implementeren die SSL beëindigt en HTTP-aanvragen omleiden. Zie Create an HTTPS ingress controller on Azure Kubernetes Service (AKS) (Een HTTPS-controller voor Azure Kubernetes Service (AKS) maken) voor meer informatie.
Verificatie. Met deze oplossing wordt de toegang tot de eindpunten niet beperkt. Als u de architectuur wilt implementeren in een bedrijfsinstelling, beveiligt u de eindpunten via API-sleutels en voegt u een vorm van gebruikersverificatie toe aan de clienttoepassing.
Containerregister. Deze oplossing gebruikt Azure Container Registry om de Docker-afbeelding op te slaan. De code van de toepassing en het model zijn opgenomen in deze afbeelding. Bedrijfstoepassingen moeten een privéregister gebruiken om bescherming te bieden tegen het uitvoeren van schadelijke code en om ervoor te zorgen dat de informatie in de container niet wordt aangetast.
DDoS-beveiliging. Overweeg om DDoS Protection Standard in te stellen. Hoewel basis-DDoS-beveiliging is ingeschakeld als onderdeel van het Azure-platform, biedt DDoS Protection Standard risicobeperkingsmogelijkheden die specifiek zijn afgestemd op virtuele Azure-netwerkbronnen.
Logboekregistratie. Gebruik best practices voordat u logboekgegevens opslaat, zoals het opspoeken van gebruikerswachtwoorden en andere informatie die kan worden gebruikt om beveiligingsrisico's vast te stellen.
Kostenoverwegingen
Gebruik de Azure-prijscalculator om de kosten te schatten. Hier zijn enkele andere overwegingen.
Zie het artikel Principles of cost optimization Microsoft Azure Well-Architected framework voor meer informatie.
Azure Machine Learning
In deze referentiearchitectuur wordt een groot deel van de kosten aangestuurd door rekenbronnen. Voor experimenten en training is Azure Machine Learning gratis. Er worden alleen kosten in rekening gebracht voor de rekenkracht die door de webservice wordt gebruikt. Gebruik de Azure-prijscalculator om een schatting te maken van uw rekenkosten.
Azure Container Registry
Azure Container Registry biedt Basic, Standard en Premium. Kies een laag, afhankelijk van de opslag die u nodig hebt. Kies Premium u geo-replicatie nodig hebt, of u hebt de doorvoer verbeterd voor Docker-pulls over gelijktijdige knooppunten. Daarnaast zijn er standaardnetwerkkosten van toepassing. Zie Prijzen voor Azure Container Registry voor meer informatie.
Azure Kubernetes Service
U betaalt alleen voor de exemplaren van virtuele machines, opslag en netwerkresources die door uw Kubernetes-cluster worden gebruikt. Zie de Container Services-calculatorvoor een schatting van de kosten van de vereiste resources.
Zie het artikel Principles of cost optimization Microsoft Azure Well-Architected framework voor meer informatie.
DevOps overwegingen
In deze architectuur worden de scoring-afbeeldingen gemaakt door het Machine Learning model en geïmplementeerd als containers in AKS. U kunt de hele architectuur integreren in een release-pijplijn voor modelbeheer en operationele uitvoering. De pijplijn kan DevOps-taken bevatten voor gegevens sanity test, modeltraining op verschillende rekendoelen, modelversiebeheer, modelimplementatie als een realtime webservice, gefaseerd implementeren naar QA/productieomgevingen, integratietests en functionele tests. De machine learning-operationalisering (MLOps) voor Python-modellen met behulp van Azure Machine Learning-referentiearchitectuur laat zien hoe u een pijplijn voor continue integratie (CI), continue levering (CD) en opnieuw trainen implementeert voor een AI-toepassing met behulp van Azure DevOps en Azure Machine Learning.
Implementatie
Als u deze referentiearchitectuur wilt implementeren, volgt u de stappen die worden beschreven in de GitHub repos:
Volgende stappen
Lees de productdocumentatie:
- Een model implementeren in een Azure Kubernetes Service cluster
- Inleiding tot privé-Docker-containerregisters in Azure
Probeer deze Microsoft Learning paden: