Distribuire un'applicazione che usa OpenAI nel servizio Azure Kubernetes (AKS)
Questo articolo illustra come distribuire un'applicazione che usa Azure OpenAI o OpenAI nel servizio Azure Kubernetes. Con OpenAI è possibile adattare facilmente modelli di intelligenza artificiale diversi, ad esempio generazione di contenuto, riepilogo, ricerca semantica e linguaggio naturale alla generazione di codice, per le attività specifiche. Per iniziare, distribuire un cluster del servizio Azure Kubernetes nella sottoscrizione di Azure. Distribuire quindi il servizio OpenAI e l'applicazione di esempio.
L'applicazione nativa del cloud di esempio è rappresentativa delle implementazioni reali. L'applicazione multi-contenitore è costituita da applicazioni scritte in più linguaggi e framework, tra cui:
- Golang con Gin
- Rust con Actix-Web
- JavaScript con Vue.js e Fastify
- Python con FastAPI
Queste applicazioni forniscono front-end per i clienti e gli amministratori dell'archivio, le API REST per l'invio di dati alla coda di messaggi RabbitMQ e al database MongoDB e alle app console per simulare il traffico.
Nota
Non è consigliabile eseguire contenitori con stato, ad esempio MongoDB e Rabbit MQ, senza l'archiviazione permanente per la produzione. Questi vengono usati qui per semplicità, ma è consigliabile usare servizi gestiti, ad esempio Azure CosmosDB o il bus di servizio di Azure.
Per accedere alla codebase GitHub per l'applicazione di esempio, vedere Demo dello Store del servizio Azure Kubernetes.
Operazioni preliminari
- È necessario un account Azure con una sottoscrizione attiva. Se non si dispone di un account, crearne uno gratuitamente.
- Per questa demo è possibile usare il servizio Azure OpenAI o il servizio OpenAI.
- Se si prevede di usare il servizio Azure OpenAI, è necessario richiedere l'accesso per abilitarlo nella sottoscrizione di Azure usando il modulo Richiedi accesso al servizio Azure OpenAI.
- Se si prevede di usare OpenAI, iscriversi al sito Web OpenAI.
Prerequisiti
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Creare un gruppo di risorse
Un gruppo di risorse di Azure è un contenitore logico in cui vengono distribuite e gestite le risorse di Azure. Quando si crea un gruppo di risorse, viene richiesto di specificare una posizione. Questa posizione è la posizione di archiviazione dei metadati del gruppo di risorse e dove le risorse vengono eseguite in Azure se non si specifica un'altra regione durante la creazione della risorsa.
L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località stati uniti orientali.
Creare un gruppo di risorse usando il comando
az group create
.az group create --name myResourceGroup --location eastus
L'output di esempio seguente mostra la corretta creazione del gruppo di risorse:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
Creare un cluster del servizio Azure Kubernetes
L'esempio seguente crea un cluster denominato myAKSCluster in myResourceGroup.
Creare un cluster del servizio Azure Kubernetes usando il comando
az aks create
.az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
Il comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster.
Stabilire la connessione al cluster
Per gestire un cluster Kubernetes, usare il client da riga di comando di Kubernetes kubectl. kubectl
è già installato se si usa Azure Cloud Shell.
Eseguire l'installazione
kubectl
in locale usando il comandoaz aks install-cli
.az aks install-cli
Nota
Se il sistema basato su Linux richiede autorizzazioni elevate, è possibile usare il comando
sudo az aks install-cli
.Configurare
kubectl
per connettersi al cluster Kubernetes usando il comandoaz aks get-credentials
.Questo comando esegue le operazioni seguenti:
- Scarica le credenziali e configura la CLI di Kubernetes per utilizzarle.
- Usare
~/.kube/config
, il percorso predefinito per il file di configurazione kubernetes. Specificare un percorso diverso per il file di configurazione di Kubernetes usando l’argomento --file.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Verificare la connessione al cluster usando il comando
kubectl get
. Questo comando restituisce un elenco dei nodi del cluster.kubectl get nodes
L'output di esempio seguente mostra i nodi creati nei passaggi precedenti. Assicurarsi che lo stato del nodo sia Pronto.
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
Nota
Per i cluster privati, i nodi potrebbero non essere raggiungibili se si tenta di connettersi tramite l'indirizzo IP pubblico. Per risolvere questo problema, è necessario creare un endpoint all'interno della stessa rete virtuale del cluster da cui connettersi. Seguire le istruzioni per creare un cluster del servizio Azure Kubernetes privato e quindi connettersi.
Distribuire l'applicazione
Il manifesto dell'applicazione dello Store del servizio Azure Kubernetes include le distribuzioni e i servizi Kubernetes seguenti:
- Servizio prodotto: mostra le informazioni sul prodotto.
- Servizio ordini: effettua ordini.
- Servizio Makeline: elabora gli ordini dalla coda e completa gli ordini.
- Front-store: applicazione Web per i clienti per visualizzare i prodotti ed effettuare ordini.
- Amministratore dello Store: applicazione Web per i dipendenti dello Store per visualizzare gli ordini nella coda e gestire le informazioni sui prodotti.
- Cliente virtuale: simula la creazione degli ordini in base a una pianificazione.
- Ruolo di lavoro virtuale: simula il completamento dell'ordine in base a una pianificazione.
- Mongo DB: istanza NoSQL per i dati persistenti.
- Rabbit MQ: coda di messaggi per una coda di ordini.
Nota
Non è consigliabile eseguire contenitori con stato, ad esempio MongoDB e Rabbit MQ, senza l'archiviazione permanente per la produzione. Questi vengono usati qui per semplicità, ma è consigliabile usare servizi gestiti, ad esempio Azure CosmosDB o il bus di servizio di Azure.
Esaminare il manifesto YAML per l'applicazione.
Distribuire l'applicazione usando il comando
kubectl apply
e specificare il nome del manifesto YAML.kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
L'output di esempio seguente mostra le distribuzioni e i servizi creati correttamente:
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
Distribuire OpenAI
È possibile usare Azure OpenAI o OpenAI ed eseguire l'applicazione nel servizio Azure Kubernetes.
- Abilitare Azure OpenAI nella sottoscrizione di Azure compilando il modulo Richiedi accesso al Servizio OpenAI di Azure.
- Nel portale di Azure creare un'istanza di Azure OpenAI.
- Selezionare l'istanza di Azure OpenAI creata.
- Selezionare Chiavi ed endpoint per generare una chiave.
- Selezionare Distribuzioni modello> Distribuzioni gestiteper aprire Azure OpenAI Studio.
- Creare una nuova distribuzione usando il modello gpt-35-turbo.
Per altre informazioni su come creare una distribuzione in Azure OpenAI, vedere Introduzione alla generazione di testo con il servizio OpenAI di Azure.
Distribuire il servizio di intelligenza artificiale
Ora che l'applicazione viene distribuita, è possibile distribuire il microservizio basato su Python che usa OpenAI per generare automaticamente descrizioni per i nuovi prodotti aggiunti al catalogo dello Store.
Creare un file denominato
ai-service.yaml
e copiarlo nel manifesto seguente: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
Impostare la variabile di ambiente
USE_AZURE_OPENAI
su"True"
.Ottenere il nome della distribuzione Di Azure OpenAI da Azure OpenAI Studio e immettere il valore
AZURE_OPENAI_DEPLOYMENT_NAME
.Ottenere l'endpoint OpenAI di Azure e la chiave API OpenAI di Azure dal portale di Azure selezionando Chiavi ed endpoint nel pannello sinistro della risorsa. Aggiornare
AZURE_OPENAI_ENDPOINT
eOPENAI_API_KEY
in YAML di conseguenza.Distribuire l'applicazione usando il comando
kubectl apply
e specificare il nome del manifesto YAML.kubectl apply -f ai-service.yaml
L'output di esempio seguente mostra le distribuzioni e i servizi creati correttamente:
deployment.apps/ai-service created service/ai-service created
Nota
L'aggiunta diretta di informazioni riservate, ad esempio le chiavi API, ai file manifesto Kubernetes non è sicura e può essere eseguito accidentalmente il commit nei repository di codice. È stato aggiunto qui per semplicità. Per i carichi di lavoro di produzione, usare l'identità gestita per eseguire l'autenticazione al servizio di Azure OpenAI o archiviare i segreti in Azure Key Vault.
Testare l'applicazione
Controllare lo stato dei pod distribuiti usando il comando kubectl get pods.
kubectl get pods
Assicurarsi che tutti i pod siano in esecuzione prima di continuare con il passaggio successivo.
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
Ottenere l'indirizzo IP dell'applicazione Web di amministrazione dello Store e archiviare l'applicazione Web front usando il comando
kubectl get service
.kubectl get service store-admin
L'applicazione espone il sito di amministrazione dello Store a Internet tramite un servizio di bilanciamento del carico pubblico di cui è stato effettuato il provisioning dal servizio Kubernetes. Questo processo può richiedere alcuni minuti. IP ESTERNO viene inizialmente visualizzato in sospeso fino a quando il servizio non viene visualizzato e viene visualizzato l'indirizzo IP.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-admin LoadBalancer 10.0.142.228 40.64.86.161 80:32494/TCP 50m
Ripetere lo stesso passaggio per il servizio denominato "store-front".
Aprire un Web browser e passare all'indirizzo IP esterno del servizio. Nell'esempio illustrato qui aprire 40.64.86.161 per visualizzare l'amministratore dello Store nel browser. Ripetere lo stesso passaggio per Store Front.
Nell'amministratore dello Store selezionare la scheda Prodotti, quindi selezionare Aggiungi prodotti.
Quando l'esecuzione di "ai-service" viene eseguita correttamente, viene visualizzato il pulsante Ask OpenAI accanto al campo della descrizione. Immettere il nome, il prezzo e le parole chiave, quindi generare una descrizione del prodotto selezionando Chiedi OpenAI>Salva prodotto.
È ora possibile visualizzare il nuovo prodotto creato nell'amministratore dello Store usato dai venditori. Nella foto, si può vedere Jungle Monkey Chew Toy è stato aggiunto.
È anche possibile visualizzare il nuovo prodotto creato in Front store usato dagli acquirenti. Nella foto, si può vedere Jungle Monkey Chew Toy è stato aggiunto. Ricordarsi di ottenere l'indirizzo IP dell'archivio anteriore usando il comando
kubectl get service
.
Passaggi successivi
Dopo aver aggiunto la funzionalità OpenAI a un'applicazione servizio Azure Kubernetes, è possibile proteggere l'accesso ad Azure OpenAI dal servizio Azure Kubernetes.
Per altre informazioni sui casi d'uso generativi dell'intelligenza artificiale, vedere le risorse seguenti:
Azure Kubernetes Service