Distribuera ett program som använder OpenAI på Azure Kubernetes Service (AKS)
I den här artikeln får du lära dig hur du distribuerar ett program som använder Azure OpenAI eller OpenAI på AKS. Med OpenAI kan du enkelt anpassa olika AI-modeller, till exempel innehållsgenerering, sammanfattning, semantisk sökning och naturligt språk till kodgenerering, för dina specifika uppgifter. Du börjar med att distribuera ett AKS-kluster i din Azure-prenumeration. Sedan distribuerar du OpenAI-tjänsten och exempelprogrammet.
Det molnbaserade exempelprogrammet är representativt för verkliga implementeringar. Programmet för flera containrar består av program som skrivits på flera språk och ramverk, inklusive:
- Golang med Gin
- Rust med Actix-Web
- JavaScript med Vue.js och Fastify
- Python med FastAPI
Dessa program tillhandahåller klientdelar för kunder och butiksadministratörer, REST-API:er för att skicka data till RabbitMQ-meddelandekön och MongoDB-databasen och konsolappar för att simulera trafik.
Kommentar
Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel MongoDB och Rabbit MQ, utan beständig lagring för produktion. Vi använder dem här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure CosmosDB eller Azure Service Bus.
Information om hur du kommer åt GitHub-kodbasen för exempelprogrammet finns i AKS Store Demo.
Innan du börjar
- Du behöver ett Azure-konto med en aktiv prenumeration. Om du inte har något skapar du ett konto kostnadsfritt.
- För den här demonstrationen kan du antingen använda Azure OpenAI-tjänsten eller OpenAI-tjänsten.
- Om du planerar att använda Azure OpenAI-tjänsten måste du begära åtkomst för att aktivera den i din Azure-prenumeration med hjälp av formuläret Begär åtkomst till Azure OpenAI-tjänsten.
- Om du planerar att använda OpenAI registrerar du dig på OpenAI-webbplatsen.
Förutsättningar
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där du distribuerar och hanterar Azure-resurser. När du skapar en resursgrupp uppmanas du att ange en plats. Den här platsen är lagringsplatsen för dina resursgruppsmetadata och där dina resurser körs i Azure om du inte anger en annan region när du skapar resurser.
I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus.
Skapa en resursgrupp med kommandot
az group create
.az group create --name myResourceGroup --location eastus
Följande exempelutdata visar hur resursgruppen har skapats:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
Skapa ett AKS-kluster
I följande exempel skapas ett kluster med namnet myAKSCluster i myResourceGroup.
Skapa ett AKS-kluster med kommandot
az aks create
.az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.
Anslut till klustret
Om du vill hantera ett Kubernetes-kluster använder du Kubernetes-kommandoradsklienten kubectl. kubectl
är redan installerat om du använder Azure Cloud Shell.
Installera
kubectl
lokalt med kommandotaz aks install-cli
.az aks install-cli
Kommentar
Om ditt Linux-baserade system kräver utökade behörigheter kan du använda
sudo az aks install-cli
kommandot .Konfigurera
kubectl
för att ansluta till kubernetes-klustret med hjälp avaz aks get-credentials
kommandot .Det här kommandot kör följande åtgärder:
- Laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.
- Använder
~/.kube/config
, standardplatsen för Kubernetes-konfigurationsfilen. Ange en annan plats för kubernetes-konfigurationsfilen med argumentet --file .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Kontrollera anslutningen till klustret med hjälp av
kubectl get
kommandot . Det här kommandot returnerar en lista över klusternoderna.kubectl get nodes
Följande exempelutdata visar noderna som skapades i föregående steg. Kontrollera att nodstatusen är Klar.
NAME STATUS ROLES AGE VERSION aks-nodepool1-31469198-vmss000000 Ready agent 3h29m v1.25.6 aks-nodepool1-31469198-vmss000001 Ready agent 3h29m v1.25.6 aks-nodepool1-31469198-vmss000002 Ready agent 3h29m v1.25.6
Kommentar
För privata kluster kan noderna vara oåtkomliga om du försöker ansluta till dem via den offentliga IP-adressen. För att åtgärda detta måste du skapa en slutpunkt inom samma virtuella nätverk som klustret att ansluta från. Följ anvisningarna för att skapa ett privat AKS-kluster och anslut sedan till det.
Distribuera programmet
AKS Store-programmanifestet innehåller följande Kubernetes-distributioner och -tjänster:
- Produkttjänst: Visar produktinformation.
- Ordertjänst: Gör beställningar.
- Makeline-tjänst: Bearbetar beställningar från kön och slutför beställningarna.
- Butiksfront: Webbprogram där kunder kan visa produkter och göra beställningar.
- Butiksadministratör: Webbprogram för butiksanställda för att visa beställningar i kön och hantera produktinformation.
- Virtuell kund: Simulerar skapande av order enligt ett schema.
- Virtuell arbetare: Simulerar orderslut på schemalagd basis.
- Mongo DB: NoSQL-instans för beständiga data.
- Rabbit MQ: Meddelandekö för en orderkö.
Kommentar
Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel MongoDB och Rabbit MQ, utan beständig lagring för produktion. Vi använder dem här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure CosmosDB eller Azure Service Bus.
Granska YAML-manifestet för programmet.
Distribuera programmet med kommandot
kubectl apply
och ange namnet på ditt YAML-manifest.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
Följande exempelutdata visar distributioner och tjänster som har skapats:
deployment.apps/mongodb created service/mongodb created deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/makeline-service created service/makeline-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created deployment.apps/store-admin created service/store-admin created deployment.apps/virtual-customer created deployment.apps/virtual-worker created
Distribuera OpenAI
Du kan antingen använda Azure OpenAI eller OpenAI och köra ditt program på AKS.
- Aktivera Azure OpenAI i din Azure-prenumeration genom att fylla i formuläret Begär åtkomst till Azure OpenAI-tjänsten .
- I Azure Portal skapar du en Azure OpenAI-instans.
- Välj den Azure OpenAI-instans som du skapade.
- Välj Nycklar och slutpunkter för att generera en nyckel.
- Välj Modelldistributioner>Hanterade distributioner för att öppna Azure OpenAI Studio.
- Skapa en ny distribution med hjälp av modellen gpt-35-turbo .
Mer information om hur du skapar en distribution i Azure OpenAI finns i Kom igång generera text med Hjälp av Azure OpenAI Service.
Distribuera AI-tjänsten
Nu när programmet har distribuerats kan du distribuera den Python-baserade mikrotjänsten som använder OpenAI för att automatiskt generera beskrivningar för nya produkter som läggs till i butikens katalog.
Skapa en fil med namnet
ai-service.yaml
och kopiera i följande manifest:apiVersion: apps/v1 kind: Deployment metadata: name: ai-service spec: replicas: 1 selector: matchLabels: app: ai-service template: metadata: labels: app: ai-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: ai-service image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest ports: - containerPort: 5001 env: - name: USE_AZURE_OPENAI value: "True" - name: AZURE_OPENAI_DEPLOYMENT_NAME value: "" - name: AZURE_OPENAI_ENDPOINT value: "" - name: OPENAI_API_KEY value: "" resources: requests: cpu: 20m memory: 50Mi limits: cpu: 50m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: ai-service spec: type: ClusterIP ports: - name: http port: 5001 targetPort: 5001 selector: app: ai-service
Ange miljövariabeln
USE_AZURE_OPENAI
till"True"
.Hämta ditt Azure OpenAI-distributionsnamn från Azure OpenAI Studio och fyll i
AZURE_OPENAI_DEPLOYMENT_NAME
värdet.Hämta din Azure OpenAI-slutpunkt och Azure OpenAI API-nyckel från Azure Portal genom att välja Nycklar och slutpunkt på resursens vänstra blad.
AZURE_OPENAI_ENDPOINT
Uppdatera ochOPENAI_API_KEY
i YAML i enlighet med detta.Distribuera programmet med kommandot
kubectl apply
och ange namnet på ditt YAML-manifest.kubectl apply -f ai-service.yaml
Följande exempelutdata visar distributioner och tjänster som har skapats:
deployment.apps/ai-service created service/ai-service created
Kommentar
Att direkt lägga till känslig information, till exempel API-nycklar, till dina Kubernetes-manifestfiler är inte säkert och kan av misstag checkas in på kodlagringsplatser. Vi har lagt till den här för enkelhetens skull. För produktionsarbetsbelastningar använder du Hanterad identitet för att autentisera till Azure OpenAI-tjänsten i stället eller lagra dina hemligheter i Azure Key Vault.
Testa programmet
Kontrollera statusen för de distribuerade poddarna med kommandot kubectl get pods .
kubectl get pods
Kontrollera att alla poddar körs innan du fortsätter till nästa steg.
NAME READY STATUS RESTARTS AGE makeline-service-7db94dc7d4-8g28l 1/1 Running 0 99s mongodb-78f6d95f8-nptbz 1/1 Running 0 99s order-service-55cbd784bb-6bmfb 1/1 Running 0 99s product-service-6bf4d65f74-7cbvk 1/1 Running 0 99s rabbitmq-9855984f9-94nlm 1/1 Running 0 99s store-admin-7f7d768c48-9hn8l 1/1 Running 0 99s store-front-6786c64d97-xq5s9 1/1 Running 0 99s virtual-customer-79498f8667-xzsb7 1/1 Running 0 99s virtual-worker-6d77fff4b5-7g7rj 1/1 Running 0 99s
Hämta IP-adressen för webbappen för butiksadministratören och lagra frontwebbprogrammet med hjälp av
kubectl get service
kommandot .kubectl get service store-admin
Programmet exponerar storeadministratörswebbplatsen för Internet via en offentlig lastbalanserare som tillhandahålls av Kubernetes-tjänsten. Den här processen kan ta ett par minuter att slutföra. EXTERN IP visar initialt väntande tills tjänsten kommer upp och visar IP-adressen.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-admin LoadBalancer 10.0.142.228 40.64.86.161 80:32494/TCP 50m
Upprepa samma steg för tjänsten med namnet "store-front".
Öppna en webbläsare och bläddra till tjänstens externa IP-adress. I exemplet som visas här öppnar du 40.64.86.161 för att se Butiksadministratör i webbläsaren. Upprepa samma steg för Store Front.
Välj fliken Produkter i Store-administratören och välj sedan Lägg till produkter.
När ai-tjänsten körs bör du se knappen Fråga OpenAI bredvid beskrivningsfältet. Fyll i namn, pris och nyckelord och generera sedan en produktbeskrivning genom att välja Fråga OpenAI>Spara produkt.
Nu kan du se den nya produkt som du skapade på Store Admin som används av säljare. På bilden kan du se att Jungle Monkey Chew Toy läggs till.
Du kan också se den nya produkten som du skapade på Store Front som används av köpare. På bilden kan du se att Jungle Monkey Chew Toy läggs till. Kom ihåg att hämta IP-adressen för butiksfronten
kubectl get service
med hjälp av kommandot .
Nästa steg
Nu när du har lagt till OpenAI-funktioner i ett AKS-program kan du skydda åtkomsten till Azure OpenAI från Azure Kubernetes Service (AKS).
Mer information om generativa AI-användningsfall finns i följande resurser:
Azure Kubernetes Service