Lorsque vous exécutez des modèles d'apprentissage automatique sur Kubernetes, vous avez besoin d'une mise à l'échelle automatisée, d'un routage du trafic et d'une gestion du cycle de vie pour les endpoints d'inférence. KServe (anciennement KFServing) offre ces fonctionnalités en tant que plateforme d'inférence native pour Kubernetes. En intégrant KServe à Alibaba Cloud Service Mesh (ASM), vous déployez et gérez des services d'inférence via le plan de contrôle d'ASM, avec une mise à l'échelle automatique basée sur le trafic, une réduction à zéro (scale-to-zero) et des déploiements canary intégrés.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACK ajouté à une instance ASM version 1.17.2.7 ou ultérieure. Consultez la rubrique Ajouter un cluster à une instance ASM
La fonctionnalité permettant d'accéder aux ressources Istio via l'API Kubernetes des clusters est activée. Consultez la section Activer la fonctionnalité permettant d'accéder aux ressources Istio via l'API Kubernetes des clusters
Les composants Knative sont déployés dans le cluster ACK avec la fonctionnalité Knative on ASM activée. Reportez-vous à l'étape 1 de la rubrique Utiliser Knative on ASM pour déployer une application serverless
Fonctionnement
KServe s'exécute sur votre cluster Container Service for Kubernetes (ACK) et est géré par ASM. Lorsque vous déployez une ressource InferenceService, KServe :
Provisionne un serveur de modèle et charge le modèle depuis l'URI de stockage spécifié.
Crée des services Knative pour la mise à l'échelle serverless, y compris la réduction à zéro en cas d'inactivité.
Génère des ressources de routage Istio (un
VirtualServiceet uneGateway) afin que le modèle soit accessible via la passerelle d'entrée ASM.
KServe prend en charge deux modes de déploiement :
| Mode | Comportement de mise à l'échelle |
|---|---|
| Serverless (Knative) | Mise à l'échelle automatique, y compris la réduction à zéro |
| Déploiement Kubernetes | Allocation standard des ressources Kubernetes |
La procédure suivante utilise le mode serverless avec Knative.

Pour plus de détails, consultez le projet KServe sur GitHub.
Étape 1 : Activer KServe sur ASM
KServe dépend de cert-manager pour la gestion des certificats. Lorsque vous activez KServe, cert-manager est installé automatiquement.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Ecosystem > KServe on ASM.
Sur la page KServe on ASM, cliquez sur Enable KServe on ASM.
Si cert-manager est déjà installé dans votre cluster, désactivez l'option Automatically install the CertManager component in the cluster pour éviter les conflits.
Étape 2 : Obtenir l'adresse IP de la passerelle d'entrée
Notez l'adresse IP de la passerelle d'entrée ASM. Vous en aurez besoin pour envoyer des requêtes d'inférence à l'étape 4.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez ASM Gateways > Ingress Gateway.
Sur la page Ingress Gateway, notez l'Service address de la passerelle d'entrée.
Étape 3 : Créer un service d'inférence
Déployez un modèle de classification iris scikit-learn en tant qu'InferenceService pour vérifier l'intégration.
-
Connectez-vous au cluster ACK avec kubectl et créez un namespace pour les ressources KServe :
kubectl create namespace kserve-test -
Créez un fichier nommé isvc.yaml avec le contenu suivant :
apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "sklearn-iris" spec: predictor: model: modelFormat: name: sklearn storageUri: "gs://kfserving-examples/models/sklearn/1.0/model" -
Déployez le service d'inférence dans le namespace
kserve-test:kubectl apply -f isvc.yaml -n kserve-test -
Vérifiez que le service est prêt :
kubectl get inferenceservices sklearn-iris -n kserve-testRésultat attendu :
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE sklearn-iris http://sklearn-iris.kserve-test.example.com True 100 sklearn-iris-predictor-00001 3h26mLa colonne
READYafficheTruelorsque le service est disponible. -
(Facultatif) Afficher les ressources Istio générées automatiquement
Après la création du service d'inférence, KServe génère automatiquement un service virtuel et une passerelle Istio pour router le trafic vers le modèle. Pour afficher ces ressources :
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Traffic Management Center > VirtualService.
Sur la page VirtualService, cliquez sur l'icône
à côté de Namespace et sélectionnez kserve-test dans la liste déroulante pour afficher le service virtuel.Dans le volet de navigation de gauche, sélectionnez ASM Gateways > Gateway. Sur la page Gateway, sélectionnez knative-serving dans la liste déroulante Namespace pour afficher la passerelle Istio.
Étape 4 : Envoyer des requêtes d'inférence
Une fois le service d'inférence en cours d'exécution, envoyez des requêtes de prédiction via la passerelle d'entrée ASM. Les étapes suivantes s'appliquent à Linux et macOS.
-
Créez un fichier d'entrée avec des exemples de données pour le modèle de classification iris :
cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF -
Récupérez le nom d'hôte du service :
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3) echo $SERVICE_HOSTNAMERésultat attendu :
sklearn-iris.kserve-test.example.com -
Envoyez une requête de prédiction via la passerelle d'entrée. Remplacez
<ingress-gateway-ip>par l'adresse IP obtenue à l'étape 2 :curl -H "Host: ${SERVICE_HOSTNAME}" \ http://<ingress-gateway-ip>:80/v1/models/sklearn-iris:predict \ -d @./iris-input.jsonRésultat attendu :
{"predictions": [1, 1]}Le modèle classe les deux échantillons d'entrée dans la classe
1(Iris versicolor). -
Exécuter un test de charge
Pour évaluer le débit et la latence sous un trafic soutenu, déployez une tâche de test de charge préconfigurée :
-
Déployez l'application de test de charge :
kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml -
Recherchez le nom du pod de test de charge :
kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE load-testxhwtq-pj9fq 0/1 Completed 0 3m24s sklearn-iris-predictor-00001-deployment-857f9bb56c-vg8tf 2/2 Running 0 51m -
Affichez les résultats du test. Remplacez
<load-test-pod-name>par le nom réel du pod obtenu à l'étape précédente :kubectl logs <load-test-pod-name>Résultat attendu :
Requests [total, rate, throughput] 30000, 500.02, 500.01 Duration [total, attack, wait] 59.999s, 59.998s, 1.352ms Latencies [min, mean, 50, 90, 95, 99, max] 1.196ms, 1.463ms, 1.378ms, 1.588ms, 1.746ms, 2.99ms, 18.873ms Bytes In [total, mean] 690000, 23.00 Bytes Out [total, mean] 2460000, 82.00 Success [ratio] 100.00% Status Codes [code:count] 200:30000 Error Set:Ce résultat montre un taux de réussite de 100 % sur 30 000 requêtes à raison de 500 requêtes par seconde, avec une latence moyenne de 1,463 ms.
-
Étapes suivantes
Accélérer le chargement des modèles : pour les applications d'IA intensives en données, intégrez KServe on ASM à Fluid afin d'accélérer l'accès aux données. Consultez la rubrique Intégrer la fonctionnalité KServe on ASM à Fluid pour implémenter un AI Serving qui accélère l'accès aux données.
Transformer les données d'entrée : déployez un transformateur pour convertir les données brutes au format requis par le serveur de modèle. Consultez la rubrique Utiliser InferenceService pour déployer un transformateur.
Gérer plusieurs modèles : pour les déploiements de modèles à grande échelle et haute densité, utilisez Model Service Mesh pour planifier et gérer plusieurs services de modèle. Consultez la rubrique Model Service Mesh.