Lees ons artikel over

.

Dit artikel is het tweede deel van een serie waarin we het proces doorlopen van het loggen van modellen met behulp van Mlflow, ze serveren als API endpoint en ze uiteindelijk opschalen naargelang de behoeften van onze applicatie. We raden u aan om ons vorige artikel te lezen, waarin we laten zien hoe u een volginstantie op k8s kunt implementeren en de praktische vereisten (geheimen, omgevingsvariabelen...) kunt controleren, omdat we daar hier verder op zullen bouwen.
In het volgende laten we zien hoe u een machine-learningmodel dat al geregistreerd is in Mlflow kunt serveren en als API-eindpunt op k8s kunt blootstellen.

Deel 2- Hoe een model als API op Kubernetes serveren?

Inleiding

Het is duidelijk dat het bijhouden en optimaliseren van de prestaties van modellen een belangrijk onderdeel is van het maken van ML-modellen. De volgende uitdaging is om ze te integreren in een toepassing of product om hun voorspellingen te gebruiken. Dit noemen we modellen serveren of inferentie. Er zijn verschillende raamwerken en technieken waarmee we dit kunnen doen. Toch zullen we ons hier richten op Mlflow en laten zien hoe efficiënt en eenvoudig het kan zijn.

De serverafbeelding bouwen en implementeren

De verschillende configuratiebestanden die hier gebruikt worden, maken deel uit van de praktijkgerichte opslagplaats In principe moeten we:

1. Bereid het Mlflow serving docker image voor en push het naar de containerregistry op GCP.

cd mlflow-serving-voorbeelddocker build --tag $/mlflow_serving:v1 
--bestand docker_mlflow_serving .
docker push $/mlflow_serving:v1

2. Het Kubernetes implementatiebestand voorbereiden

door de containersectie te wijzigen en deze toe te wijzen aan de docker-afbeelding eerder naar GCR geduwd, het modelpad en de serverende poort.

apiVersion: apps/v1
  vriendelijk: Inzet
  metadata:
  naam: mlflow-serving
  etiketten:
  app: dien-ML-model-mlflow
   
  spec:
  replica's: 1
  selector:
  matchLabels:
  app: mlflow-serving
  sjabloon:
  metadata:
  etiketten:
  app: mlflow-serving
   
  spec:
  containers:
  - naam: mlflow-serving
  Afbeelding: GCR_REPO/mlflow_serving:v1 1TP45Wissel hier
  omgeving:
  - naam: MODEL_URI
  waarde: gs://../artifacts/../../artifacts/.. 1TP45Wissel hier
  - naam: DIENSTPOORT
  waarde: 8082
  - naam: GOOGLE_TOEPASSING_GEGEVENS
  waarde: /etc/secrets/sleutelbestand.json
  volumeMounts:
  - naam: gcsfs-creds
  mountPath: /etc/secrets
  alleen-lezen: Echt
  middelen:
  verzoekt:
  cpu: 1000m
   
   
  volumes:
  - naam: gcsfs-creds
  geheim:
  secretName: gcsfs-creds
  items:
  - toets: sleutelbestand.json
  pad: sleutelbestand.json

3. Implementatieopdrachten uitvoeren

kubectl create -f deployments/mlflow-serving/mlflow_serving.yaml

4. Stel de implementatie open voor externe toegang

Met de volgende opdracht wordt een nieuwe resource aangemaakt om extern verkeer om te leiden naar onze API.

kubectl expose deployment mlflow-serving --port 8082 --type="LoadBalancer"

5. Controleer de implementatie en vraag het eindpunt op

Als de implementatie succesvol is, zou mlflow-serving UP moeten zijn en zou er één pod beschikbaar moeten zijn. U kunt dat controleren door te typen kubectl get pods

De laatste stap is het controleren van het externe IP-adres dat werd toegewezen aan de loadbalancer die het verkeer omleidt naar onze API-container met behulp van kubectl get diensten en test de respons op een paar query's.

Een voorbeeldcode om deze query's uit te voeren vindt u in het volgende notebook waarin we enkele rijen van data laden, kenmerken selecteren, converteren naar JSON-formaat en in een postverzoek naar de API sturen.
Als we nu de stappen uit ons vorige en huidige artikel combineren, ziet onze uiteindelijke architectuur er als volgt uit:

Conclusie

In dit artikel hebben we laten zien dat we eenvoudig machine learning-modellen kunnen implementeren als een API eindpunt met behulp van de Mlflow serving module.

Zoals u misschien ziet, is er in onze huidige implementatie slechts één pod aangemaakt om het model te bedienen. Hoewel dit goed werkt voor kleine toepassingen waar we niet meerdere parallelle queries verwachten, zou het snel zijn grenzen kunnen laten zien op andere toepassingen, aangezien een enkele pod beperkte bronnen heeft. Bovendien kan de applicatie op deze manier niet meer dan één node aan rekenkracht gebruiken. In het volgende en laatste artikel van deze serie zullen we het schaalbaarheidsprobleem aanpakken. We zullen eerst de knelpunten belichten en proberen deze op te lossen om een schaalbare applicatie te krijgen die gebruik maakt van de kracht van ons Kubernetes-cluster.

Medium Blog bij Artefact.

Dit artikel werd oorspronkelijk gepubliceerd op Medium.com.
Volg ons op ons medium Blog !