Bereitstellen eines Modells in einem Azure Kubernetes Service-Cluster mit v1
Wichtig
In diesem Artikel wird gezeigt, wie Sie die CLI und das SDK v1 verwenden, um ein Modell bereitzustellen. Informationen zum empfohlenen Ansatz für v2 finden Sie unter Bereitstellen und Bewertung eines Machine Learning-Modells mithilfe eines Onlineendpunkts.
Erfahren Sie, wie Sie ein Modell mit Azure Machine Learning als Webdienst in Azure Kubernetes Service (AKS) bereitstellen. Azure Kubernetes Service ist gut für umfangreiche Produktionsbereitstellungen geeignet. Verwenden Sie Azure Kubernetes Service, wenn Sie eine oder mehrere der folgenden Funktionen benötigen:
- Schnelle Antwortzeiten
- Autoskalierung des bereitgestellten Diensts
- Logging
- Modelldatensammlung
- Authentifizierung
- TLS-Terminierung
- Optionen für die Hardwarebeschleunigung, beispielsweise GPU und FPGA (Field-Programmable Gate Arrays)
Bei der Bereitstellung in Azure Kubernetes Service führen Sie die Bereitstellung in einem AKS-Cluster durch, der mit Ihrem Arbeitsbereich verbunden ist. Informationen zum Verbinden eines AKS-Clusters mit Ihrem Arbeitsbereich finden Sie unter Erstellen und Anfügen eines Azure Kubernetes Service-Clusters.
Wichtig
Es wird empfohlen, Debugvorgänge vor der Bereitstellung im Webdienst lokal durchzuführen. Weitere Informationen finden Sie unter Lokal debuggen.
Weitere Informationen finden Sie auch unter Azure Machine Learning – Bereitstellung auf lokalem Notebook
Hinweis
Azure Machine Learning-Endpunkte (v2) bieten eine verbesserte, einfachere Bereitstellungserfahrung. Endpunkte unterstützen Szenarien mit Echtzeit- und Batchrückschluss. Endpunkte verfügen über eine einheitliche Schnittstelle zum übergreifenden Aufrufen und Verwalten von Modellbereitstellungen für alle Computetypen. Siehe Was sind Azure Machine Learning-Endpunkte?.
Voraussetzungen
Ein Azure Machine Learning-Arbeitsbereich. Weitere Informationen finden Sie unter Erstellen eines Azure Machine Learning-Arbeitsbereichs.
Ein Machine Learning-Modell, das in Ihrem Arbeitsbereich registriert ist. Wenn Sie über kein registriertes Modell verfügen, finden Sie hier weitere Informationen: Wie und wo Modelle bereitgestellt werden.
Die Azure CLI-Erweiterung (v1) für Machine Learning Service, das Azure Machine Learning Python SDK oder die Visual Studio Code-Erweiterung für Azure Machine Learning.
Wichtig
Einige Azure CLI-Befehle in diesem Artikel verwenden die Erweiterung
azure-cli-ml
oder v1 für Azure Machine Learning. Der Support für die v1-Erweiterung endet am 30. September 2025. Sie können die v1-Erweiterung bis zu diesem Datum installieren und verwenden.Es wird empfohlen, vor dem 30. September 2025 zur
ml
- oder v2-Erweiterung zu wechseln. Weitere Informationen zur v2-Erweiterung finden Sie unter Was sind die Azure Machine Learning CLI und das Python SDK v2?.Bei den in diesem Artikel verwendeten Python-Codeausschnitten wird davon ausgegangen, dass die folgenden Variablen festgelegt sind:
ws
: Legen Sie diese Variable auf Ihren Arbeitsbereich fest.model
: Legen Sie diese Variable auf Ihr registriertes Modell fest.inference_config
: Legen Sie diese Variable auf die Rückschlusskonfiguration für das Modell fest.
Weitere Informationen zum Festlegen dieser Variablen finden Sie unter Wie und wo Modelle bereitgestellt werden.
Bei den in diesem Artikel verwendeten CLI-Ausschnitten wird davon ausgegangen, dass Sie ein
inferenceconfig.json
-Dokument erstellt haben. Weitere Informationen zum Erstellen dieses Dokuments finden Sie unter Wie und wo Modelle bereitgestellt werden.Ein Azure Kubernetes Service-Cluster, der mit Ihrem Arbeitsbereich verbunden ist. Weitere Informationen finden Sie unter Erstellen und Anfügen eines Azure Kubernetes Service-Clusters.
- Wenn Sie Modelle auf GPU-Knoten oder FPGA-Knoten (oder einer bestimmten SKU) bereitstellen möchten, müssen Sie einen Cluster mit der jeweiligen SKU erstellen. Das Erstellen eines sekundären Knotenpools in einem vorhandenen Cluster und das Bereitstellen von Modellen im sekundären Knotenpool wird nicht unterstützt.
Grundlegendes zu Bereitstellungsvorgängen
Das Wort „Bereitstellung“ wird sowohl in Kubernetes als auch bei Azure Machine Learning verwendet. „Bereitstellung“ hat in diesen beiden Kontexten jedoch unterschiedliche Bedeutungen. In Kubernetes ist eine Deployment
eine konkrete Entität, die mit einer deklarativen YAML-Datei angegeben wird. Eine Kubernetes-Deployment
verfügt über einen definierten Lebenszyklus und konkrete Beziehungen zu anderen Kubernetes-Entitäten, z. B. Pods
und ReplicaSets
. Informationen zu Kubernetes in Form von Dokumenten und Videos finden Sie unter Was ist Kubernetes?.
In Azure Machine Learning wird „Bereitstellung“ allgemeiner für das Verfügbarmachen und Bereinigen Ihrer Projektressourcen verwendet. Folgende Schritte werden in Azure Machine Learning als Teil der Bereitstellung betrachtet:
- Zippen der Dateien in Ihrem Projektordner, wobei die in „.amlignore“ oder „.gitignore“ angegebenen Dateien ignoriert werden
- Zentrales Hochskalieren Ihres Computeclusters (bezieht sich auf Kubernetes)
- Erstellen oder Herunterladen des Dockerfiles auf den Serverknoten (bezieht sich auf Kubernetes)
- Das System berechnet einen Hashwert aus:
- Dem Basisimage
- Benutzerdefinierten Docker-Schritten (siehe Bereitstellen eines Modells mithilfe eines benutzerdefinierten Docker-Basisimages)
- Der Conda-Definitions-YAML-Datei (siehe Erstellen& und Verwenden von Softwareumgebungen in Azure Machine Learning)
- Das System verwendet diesen Hash als Schlüssel in einer Suche nach der Azure Container Registry (ACR) für den Arbeitsbereich.
- Wenn es nicht gefunden wird, sucht es nach einer Übereinstimmung im globalen ACR
- Wenn es nicht gefunden wird, erstellt das System ein neues Image (das zwischengespeichert und an den Arbeitsbereich ACR gepusht wird)
- Das System berechnet einen Hashwert aus:
- Herunterladen der gezippten Projektdatei in den temporären Speicher auf dem Serverknoten
- Entzippen der Projektdatei
- Ausführen von
python <entry script> <arguments>
auf dem Serverknoten - Speichern von Protokollen, Modelldateien und anderen Dateien, die in dem Speicherkonto, das dem Arbeitsbereich zugeordnet ist, in
./outputs
geschrieben werden - Zentrales Herunterskalieren von Compute, einschließlich Entfernen des temporären Speichers (bezieht sich auf Kubernetes)
Azure Machine Learning-Router
Die Front-End-Komponente (azureml-fe), die eingehende Rückschlussanforderungen an bereitgestellte Dienste weiterleitet, wird automatisch nach Bedarf skaliert. Die Skalierung von azureml-fe basiert dem Zweck und der Größe (Anzahl der Knoten) des AKS-Clusters. Clusterzweck und -knoten werden konfiguriert, wenn Sie einen AKS-Cluster erstellen oder anfügen. Es gibt einen azureml-fe-Dienst pro Cluster, der auf mehreren Pods ausgeführt werden kann.
Wichtig
Wenn Sie einen Cluster verwenden, der als Dev/Test konfiguriert ist, wird der Self-Scaler deaktiviert. Auch für FastProd-/DenseProd-Cluster ist Self-Scaler nur aktiviert, wenn dies gemäß den Telemetriedaten erforderlich ist.
Hinweis
Die maximale Größe der Anforderungsnutzdaten beträgt 100 MB.
Azureml-fe wird sowohl (vertikal) hochskaliert, um mehr Kerne zu verwenden, als auch (horizontal) aufskaliert, um mehr Pods zu verwenden. Wenn Sie die Entscheidung zum zentralen Hochskalieren treffen, wird die Zeit herangezogen, die zum Weiterleiten eingehender Rückschlussanforderungen benötigt wird. Wenn diese Zeit den Schwellenwert überschreitet, erfolgt eine Hochskalierung. Wenn die Zeit zum Weiterleiten eingehender Anforderungen weiterhin den Schwellenwert überschreitet, erfolgt eine Aufskalierung.
Beim Herunter- und Abskalieren wird die CPU-Auslastung verwendet. Wenn der Schwellenwert für die CPU-Auslastung erreicht ist, wird das Front-End zuerst herunterskaliert. Wenn die CPU-Auslastung auf den Schwellenwert für die Abskalierung sinkt, erfolgt eine Abskalierung. Ein Hoch- und Aufskalieren erfolgt nur, wenn genügend Clusterressourcen verfügbar sind.
Beim Hoch- oder Herunterskalieren werden Pods vom Typ „azureml-fe neu gestartet, um die Änderungen an CPU bzw. Arbeitsspeicher zu übernehmen. Rückschlussanforderungen sind von den Neustarts nicht betroffen.
Grundlegendes zu Konnektivitätsanforderungen für AKS-Rückschlusscluster
Wenn Azure Machine Learning einen AKS-Cluster erstellt oder anfügt, wird der AKS-Cluster mit einem der beiden folgenden Netzwerkmodelle bereitgestellt:
- Kubenet-Netzwerke: Die Netzwerkressourcen werden normalerweise bei der Bereitstellung des AKS-Clusters erstellt und konfiguriert.
- Azure Container Networking Interface (CNI)-Netzwerke: Der AKS-Cluster wird mit einer vorhandenen virtuellen Netzwerkressource und -konfigurationen verbunden.
Für das Kubenet-Netzwerk wird das Netzwerk für den Azure Machine Learning Service erstellt und ordnungsgemäß konfiguriert. Für das CNI-Netzwerk müssen Sie die Konnektivitätsanforderungen verstehen und die DNS-Auflösung und die ausgehende Konnektivität für AKS-Rückschlüsse sicherstellen. So können Sie z. B. eine Firewall verwenden, um den Netzwerkdatenverkehr zu blockieren.
Das folgende Diagramm zeigt die Konnektivitätsanforderungen für AKS-Rückschlüsse. Die schwarzen Pfeile stehen für die tatsächliche Kommunikation und die blauen Pfeile für die Domänennamen. Möglicherweise müssen Sie Einträge für diese Hosts zu Ihrer Firewall oder zu Ihrem benutzerdefinierten DNS-Server hinzufügen.
Allgemeine Anforderungen an die AKS-Konnektivität finden Sie unter Steuern des ausgehenden Datenverkehrs für Clusterknoten in Azure Kubernetes Service (AKS).
Informationen zum Zugriff auf Azure Machine Learning-Dienste hinter einer Firewall finden Sie unter Zugreifen auf azureml hinter einer Firewall.
Allgemeine Anforderungen an die DNS-Auflösung
Die DNS-Auflösung innerhalb eines bestehenden virtuellen Netzwerks unterliegt Ihrer Kontrolle. Beispiel: Firewall oder benutzerdefinierter DNS-Server. Die folgenden Hosts müssen erreichbar sein:
Hostname | Verwendet von |
---|---|
<cluster>.hcp.<region>.azmk8s.io |
AKS-API-Server |
mcr.microsoft.com |
Microsoft Container Registry (MCR) |
<ACR name>.azurecr.io |
Azure Container Registry (ACR) |
<account>.table.core.windows.net |
Azure Storage-Konto (Tabellenspeicher) |
<account>.blob.core.windows.net |
Azure Storage-Konto (Blobspeicher) |
api.azureml.ms |
Azure Active Directory-Authentifizierung (Azure AD) |
ingest-vienna<region>.kusto.windows.net |
Kusto-Endpunkt zum Hochladen von Telemetriedaten |
<leaf-domain-label + auto-generated suffix>.<region>.cloudapp.azure.com |
Endpunktdomänenname, wenn er von Azure Machine Learning automatisch generiert wird. Wenn Sie einen benutzerdefinierten Domänennamen verwendet haben, benötigen Sie diesen Eintrag nicht. |
Konnektivitätsanforderungen in chronologischer Reihenfolge: von der Clustererstellung zur Modellimplementierung
Beim Erstellen oder Anfügen von AKS wird der Azure Machine Learning-Router (azureml-fe) im AKS-Cluster bereitgestellt. Für die Bereitstellung des Azure Machine Learning-Routers sollte der AKS-Knoten Folgendes ermöglichen:
- Auflösen von DNS für den AKS-API-Server
- Auflösen von DNS für MCR, um Docker-Images für Azure Machine Learning-Router herunterzuladen
- Herunterladen von Images aus MCR, wo die ausgehende Konnektivität erforderlich ist
Direkt nach der Bereitstellung von azureml-fe wird der Start versucht und dies erfordert Folgendes:
- Auflösen von DNS für den AKS-API-Server
- Fragen Sie den AKS-API-Server ab, um andere Instanzen von sich selbst zu ermitteln (es handelt sich um einen Multi-Pod-Dienst).
- Herstellen einer Verbindung mit anderen Instanzen von sich selbst
Nachdem azureml-fe gestartet wurde, benötigt es die folgende Konnektivität, um ordnungsgemäß zu funktionieren:
- Herstellen einer Verbindung mit Azure Storage zum Herunterladen einer dynamischen Konfiguration
- Lösen Sie das DNS für den Azure AD-Authentifizierungsserver „api.azureml.ms“ auf, und kommunizieren Sie mit ihm, wenn der bereitgestellte Dienst die Azure AD-Authentifizierung verwendet.
- Abfragen des AKS-API-Servers, um bereitgestellte Modelle zu entdecken
- Kommunizieren mit bereitgestellten Modell-PODs
Zum Zeitpunkt der Modellimplementierung sollte der AKS-Knoten zu Folgendem in der Lage sein:
- Auflösen von DNS für die ACR des Kunden
- Herunterladen von Images aus der ACR des Kunden
- Auflösen von DNS für Azure-BLOBs, in denen das Modell gespeichert wird
- Herunterladen von Modellen aus Azure-BLOBs
Nachdem das Modell bereitgestellt und der Dienst gestartet wurde, erkennt azureml-fe es automatisch mithilfe der AKS-API und ist bereit, Anforderungen an es weiterzuleiten. Es muss in der Lage sein, mit den Modell-PODs zu kommunizieren.
Hinweis
Wenn das bereitgestellte Modell eine Konnektivität erfordert (z. B. Abfragen einer externen Datenbank oder eines anderen REST-Diensts, Herunterladen eines BLOBs usw.), dann sollten sowohl die DNS-Auflösung als auch die ausgehende Kommunikation für diese Dienste aktiviert sein.
Bereitstellen für AKS
Um ein Modell für Azure Kubernetes Service bereitzustellen, erstellen Sie eine Bereitstellungskonfiguration, in der die benötigten Computeressourcen beschrieben werden. Dies sind beispielsweise die Anzahl von Kernen und die Arbeitsspeichergröße. Außerdem benötigen Sie eine Rückschlusskonfiguration, in der die zum Hosten des Modells und des Webdiensts erforderliche Umgebung beschrieben wird. Weitere Informationen zum Erstellen der Rückschlusskonfiguration finden Sie unter Wie und wo Modelle bereitgestellt werden.
Hinweis
Die Anzahl der bereitzustellenden Modelle ist auf 1.000 Modelle pro Bereitstellung (pro Container) beschränkt.
GILT FÜR:Python SDK azureml v1
from azureml.core.webservice import AksWebservice, Webservice
from azureml.core.model import Model
from azureml.core.compute import AksCompute
aks_target = AksCompute(ws,"myaks")
# If deploying to a cluster configured for dev/test, ensure that it was created with enough
# cores and memory to handle this deployment configuration. Note that memory is also used by
# things such as dependencies and AML components.
deployment_config = AksWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
service = Model.deploy(ws, "myservice", [model], inference_config, deployment_config, aks_target)
service.wait_for_deployment(show_output = True)
print(service.state)
print(service.get_logs())
Weitere Informationen zu den in diesem Beispiel verwendeten Klassen, Methoden und Parametern finden Sie in den folgenden Referenzdokumenten:
Automatische Skalierung
GILT FÜR:Python SDK azureml v1
Die Komponente, die die automatische Skalierung für Implementierungen von Azure Machine Learning-Modellen behandelt, ist azureml-fe, ein intelligenter Anforderungsrouter. Da er von allen Rückschlussanforderungen durchlaufen wird, verfügt er über die zum automatischen Skalieren der bereitgestellten Modelle erforderlichen Daten.
Wichtig
Aktivieren Sie die horizontale automatische Kubernetes-Podskalierung (HPA) nicht für Modellbereitstellungen. Dies würde dazu führen, dass die beiden Komponenten für die automatische Skalierung miteinander konkurrieren würden. Azureml-fe ist für die automatische Skalierung von Modellen konzipiert, die von Azure Machine Learning bereitgestellt wurden. Dabei müsste HPA die Modellauslastung anhand einer generischen Metrik wie der CPU-Auslastung oder einer benutzerdefinierten Metrikkonfiguration erraten oder näherungsweise ermitteln.
Azureml-fe skaliert die Anzahl der Knoten in einem AKS-Cluster nicht, da dies zu unerwarteten Kostensteigerungen führen könnte. Stattdessen erfolgt eine Skalierung der Anzahl der Replikate für das Modell innerhalb der physischen Clustergrenzen. Wenn Sie die Anzahl der Knoten im Cluster skalieren müssen, können Sie den Cluster manuell skalieren oder die Autoskalierung von AKS-Clustern konfigurieren.
Die automatische Skalierung kann durch Festlegen von autoscale_target_utilization
, autoscale_min_replicas
und autoscale_max_replicas
für den AKS-Webdienst gesteuert werden. Die Aktivierung der automatischen Skalierung wird im folgenden Beispiel veranschaulicht:
aks_config = AksWebservice.deploy_configuration(autoscale_enabled=True,
autoscale_target_utilization=30,
autoscale_min_replicas=1,
autoscale_max_replicas=4)
Skalierungsentscheidungen werden auf der Grundlage der Auslastung der aktuellen Containerreplikate getroffen. Zur Ermittlung der aktuellen Auslastung wird die Anzahl ausgelasteter Replikate (Replikate, die eine Anforderung verarbeiten) durch die Gesamtanzahl aktueller Replikate geteilt. Übersteigt dieser Wert autoscale_target_utilization
, werden weitere Replikate erstellt. Wenn es niedriger ist, werden Replikate reduziert. Die Zielauslastung ist standardmäßig auf 70 Prozent festgelegt.
Entscheidungen zum Hinzufügen von Replikaten sind eifrig und schnell (ungefähr 1 Sekunde). Die Entscheidung, Replikate zu entfernen, erfolgt zurückhaltend (etwa 1 Minute).
Die erforderlichen Replikate können mithilfe des folgenden Codes berechnet werden:
from math import ceil
# target requests per second
targetRps = 20
# time to process the request (in seconds)
reqTime = 10
# Maximum requests per container
maxReqPerContainer = 1
# target_utilization. 70% in this example
targetUtilization = .7
concurrentRequests = targetRps * reqTime / targetUtilization
# Number of container replicas
replicas = ceil(concurrentRequests / maxReqPerContainer)
Weitere Informationen zum Festlegen von autoscale_target_utilization
, autoscale_max_replicas
und autoscale_min_replicas
finden Sie in der Modulreferenz zu AksWebservice.
Webdienstauthentifizierung
Bei der Bereitstellung in Azure Kubernetes Service ist die schlüsselbasierte Authentifizierung standardmäßig aktiviert. Sie können auch die tokenbasierte Authentifizierung aktivieren. Die tokenbasierte Authentifizierung erfordert, dass Clients ein Azure Active Directory-Konto verwenden, um ein Authentifizierungstoken anzufordern, mit dem Anforderungen an den bereitgestellten Dienst gesendet werden.
Um die Authentifizierung zu deaktivieren, legen Sie den Parameter auth_enabled=False
beim Erstellen der Bereitstellungskonfiguration fest. Im folgenden Beispiel wird die Authentifizierung mithilfe des SDKs deaktiviert:
deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, auth_enabled=False)
Informationen zum Authentifizieren aus einer Clientanwendung finden Sie unter Nutzen eines als Webdienst bereitgestellten Azure Machine Learning-Modells.
Authentifizierung mit Schlüsseln
Bei aktivierter Schlüsselauthentifizierung können Sie mithilfe der Methode get_keys
einen primären und einen sekundären Authentifizierungsschlüssel abrufen:
primary, secondary = service.get_keys()
print(primary)
Wichtig
Wenn Sie einen Schlüssel erneut generieren müssen, verwenden Sie service.regen_key
.
Authentifizierung mit Tokens
Um die Tokenauthentifizierung zu aktivieren, legen Sie den token_auth_enabled=True
Parameter fest, wenn Sie eine Bereitstellung erstellen oder aktualisieren. Im folgenden Beispiel wird die Authentifizierung mithilfe des SDKs aktiviert:
deployment_config = AksWebservice.deploy_configuration(cpu_cores=1, memory_gb=1, token_auth_enabled=True)
Bei aktivierter Tokenauthentifizierung können Sie mithilfe der Methode get_token
ein JWT-Token und dessen Ablaufzeit abrufen:
token, refresh_by = service.get_token()
print(token)
Wichtig
Nach Ablauf der für refresh_by
festgelegten Zeit müssen Sie ein neues Token anfordern.
Microsoft empfiehlt dringend, den Azure Machine Learning-Arbeitsbereich in der gleichen Region zu erstellen wie den Azure Kubernetes Service-Cluster. Im Zuge der Tokenauthentifizierung richtet der Webdienst einen Aufruf an die Region, in der Ihr Azure Machine Learning-Arbeitsbereich erstellt wird. Ist die Region Ihres Arbeitsbereichs nicht verfügbar, können Sie kein Token für Ihren Webdienst abrufen (auch dann nicht, wenn sich Ihr Cluster in einer anderen Region befindet als Ihr Arbeitsbereich). Die tokenbasierte Authentifizierung ist dann erst wieder verfügbar, wenn die Region Ihres Arbeitsbereichs wieder verfügbar wird. Außerdem wirkt sich die Entfernung zwischen der Region Ihres Clusters und der Region Ihres Arbeitsbereichs direkt auf die Tokenabrufdauer aus.
Zum Abrufen eines Tokens müssen Sie das Azure Machine Learning SDK oder den Befehl az ml service get-access-token verwenden.
Überprüfung auf Sicherheitsrisiken
Microsoft Defender for Cloud bietet eine einheitliche Sicherheitsverwaltung und erweiterten Bedrohungsschutz für Hybrid Cloud-Workloads. Sie sollten Microsoft Defender für Cloud erlauben, Ihre Ressourcen zu überprüfen, und die Empfehlungen befolgen. Weitere Informationen finden Sie unter Azure Kubernetes Services Integration mit Defender für Cloud.
Nächste Schritte
- Verwenden von Azure RBAC für die Kubernetes-Autorisierung
- Schützen von Rückschlussumgebungen mit Azure Virtual Network
- Wie man ein Modell mit einem benutzerdefinierten Docker-Image bereitstellt
- Problembehandlung von Bereitstellungen von Azure Machine Learning Service mit AKS und ACI
- Aktualisieren des Webdiensts
- Verwenden von TLS zum Absichern eines Webdiensts mit Azure Machine Learning
- Consume a ML Model deployed as a web service (Nutzen eines als Webdienst bereitgestellten Azure Machine Learning-Modells).
- Überwachen Ihrer Azure Machine Learning-Modelle mit Application Insights
- Sammeln von Daten für Modelle in der Produktion