Az Azure AI Vision-tároló használata a Kubernetes és a Helm használatával
Az Azure AI Vision-tárolók helyszíni kezelésére az egyik lehetőség a Kubernetes és a Helm használata. Az Azure AI Vision tárolórendszerképének meghatározásához a Kubernetes és a Helm használatával létrehozunk egy Kubernetes-csomagot. Ez a csomag egy helyszíni Kubernetes-fürtben lesz üzembe helyezve. Végül bemutatjuk, hogyan tesztelheti az üzembe helyezett szolgáltatásokat. További információ a Docker-tárolók Kubernetes-vezénylés nélküli futtatásáról: Azure AI Vision-tárolók telepítése és futtatása.
Előfeltételek
A következő előfeltételek az Azure AI Vision-tárolók helyszíni használata előtt:
Kötelező | Cél |
---|---|
Azure-fiók | Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot. |
Kubernetes CLI | A Megosztott hitelesítő adatok tárolóregisztrációs adatbázisból való kezeléséhez a Kubernetes CLI szükséges. A Kubernetesre a Helm előtt is szükség van, amely a Kubernetes csomagkezelője. |
Helm CLI | Telepítse a Helm CLI-t, amely helm-diagram (tárolócsomag-definíció) telepítéséhez használható. |
Computer Vision erőforrás | A tároló használatához a következőket kell tennie: Egy Computer Vision erőforrás és a végpont URI-jának társított API-kulcsa. Mindkét érték elérhető az erőforrás Áttekintés és Kulcsok lapján, és a tároló elindításához szükséges. {API_KEY}: A Kulcsok lap két elérhető erőforráskulcsának egyike {ENDPOINT_URI}: Az Áttekintés lapon megadott végpont |
A szükséges paraméterek összegyűjtése
Az összes Azure AI-tárolóhoz három elsődleges paraméter szükséges. A Microsoft szoftverlicenc-feltételeinek elfogadási értékkel kell rendelkeznie. Végponti URI- és API-kulcsra is szükség van.
Végpont URI-ja
Az {ENDPOINT_URI}
érték a megfelelő Azure AI-szolgáltatások erőforrásának Azure Portal Áttekintés lapján érhető el. Lépjen az Áttekintés lapra, mutasson a végpont fölé, és megjelenik a Másolás vágólapra ikon. Másolja ki és használja a végpontot, ha szükséges.
Kulcsok
Az {API_KEY}
érték a tároló elindítására szolgál, és a megfelelő Azure AI-szolgáltatási erőforrás Azure Portal Kulcsok lapján érhető el. Lépjen a Kulcsok lapra, és válassza a Másolás vágólapra ikont.
Fontos
Ezek az előfizetési kulcsok az Azure AI-szolgáltatások API-ját használják. Ne ossza meg a kulcsokat. Biztonságosan tárolhatja őket. Használja például az Azure Key Vault. Azt is javasoljuk, hogy ezeket a kulcsokat rendszeresen hozza létre. API-híváshoz csak egy kulcs szükséges. Az első kulcs újragenerálása után a második kulcsot használhatja a szolgáltatáshoz való folyamatos hozzáféréshez.
A gazdaszámítógép
A gazdagép egy x64-alapú számítógép, amely a Docker-tárolót futtatja. Ez lehet egy számítógép a helyszínen vagy egy Docker üzemeltetési szolgáltatás az Azure-ban, például:
- Azure Kubernetes Service.
- Azure Container Instances.
- Az Azure Stackben üzembe helyezett Kubernetes-fürt. További információ: Kubernetes üzembe helyezése az Azure Stackben.
Tárolókövetelmények és javaslatok
Megjegyzés
A követelmények és javaslatok másodpercenként egyetlen kérelemmel rendelkező teljesítményteszteken alapulnak, amelyek egy 523 KB-os képet használnak egy beolvasott üzleti levélről, amely 29 sort és összesen 803 karaktert tartalmaz. Az ajánlott konfiguráció körülbelül 2x gyorsabb választ eredményezett a minimális konfigurációhoz képest.
Az alábbi táblázat az egyes olvasási OCR-tárolók erőforrásainak minimális és ajánlott lefoglalását ismerteti.
Tároló | Minimális | Ajánlott |
---|---|---|
Read 3.2 2022-04-30 | 4 mag, 8 GB memória | 8 mag, 16 GB memória |
Read 3.2 2021-04-12 | 4 mag, 16 GB memória | 8 mag, 24 GB memória |
- Minden magnak legalább 2,6 gigahertzesnek (GHz) vagy gyorsabbnak kell lennie.
A mag és a memória a és --memory
a --cpus
beállításoknak felel meg, amelyeket a docker run
parancs részeként használnak.
Csatlakozás a Kubernetes-fürthöz
A gazdaszámítógépnek rendelkeznie kell egy elérhető Kubernetes-fürtel. Ebből az oktatóanyagból megtudhatja, hogyan helyezhet üzembe Kubernetes-fürtöt egy gazdagépen. Az üzemelő példányokról a Kubernetes dokumentációjában talál további információt.
Helm-diagramértékek konfigurálása üzembe helyezéshez
Először hozzon létre egy read nevű mappát. Ezután illessze be a következő YAML-tartalmat egy nevű új fájlba chart.yaml
:
apiVersion: v2
name: read
version: 1.0.0
description: A Helm chart to deploy the Read OCR container to a Kubernetes cluster
dependencies:
- name: rabbitmq
condition: read.image.args.rabbitmq.enabled
version: ^6.12.0
repository: https://kubernetes-charts.storage.googleapis.com/
- name: redis
condition: read.image.args.redis.enabled
version: ^6.0.0
repository: https://kubernetes-charts.storage.googleapis.com/
A Helm-diagram alapértelmezett értékeinek konfigurálásához másolja és illessze be a következő YAML-t egy nevű values.yaml
fájlba. Cserélje le a és # {API_KEY}
a # {ENDPOINT_URI}
megjegyzést a saját értékeire. Szükség esetén konfigurálja a resultExpirationPeriod, a Redis és a RabbitMQ parancsot.
# These settings are deployment specific and users can provide customizations
read:
enabled: true
image:
name: cognitive-services-read
registry: mcr.microsoft.com/
repository: azure-cognitive-services/vision/read
tag: 3.2-preview.1
args:
eula: accept
billing: # {ENDPOINT_URI}
apikey: # {API_KEY}
# Result expiration period setting. Specify when the system should clean up recognition results.
# For example, resultExpirationPeriod=1, the system will clear the recognition result 1hr after the process.
# resultExpirationPeriod=0, the system will clear the recognition result after result retrieval.
resultExpirationPeriod: 1
# Redis storage, if configured, will be used by read OCR container to store result records.
# A cache is required if multiple read OCR containers are placed behind load balancer.
redis:
enabled: false # {true/false}
password: password
# RabbitMQ is used for dispatching tasks. This can be useful when multiple read OCR containers are
# placed behind load balancer.
rabbitmq:
enabled: false # {true/false}
rabbitmq:
username: user
password: password
Fontos
Ha a
billing
ésapikey
az érték nincs megadva, a szolgáltatások 15 perc elteltével lejárnak. Hasonlóképpen, az ellenőrzés meghiúsul, mert a szolgáltatások nem érhetők el.Ha több olvasási OCR-tárolót helyez üzembe egy terheléselosztó mögött, például a Docker Compose vagy a Kubernetes területen, külső gyorsítótárral kell rendelkeznie. Mivel a feldolgozási tároló és a GET kérelemtároló nem azonos, egy külső gyorsítótár tárolja az eredményeket, és megosztja őket a tárolók között. A gyorsítótár-beállításokkal kapcsolatos részletekért lásd: Azure AI Vision Docker-tárolók konfigurálása.
Hozzon létre egy sablonmappát az olvasási könyvtár alatt. Másolja és illessze be a következő YAML-t egy nevű deployment.yaml
fájlba. A deployment.yaml
fájl Helm-sablonként fog szolgálni.
A sablonok jegyzékfájlokat hoznak létre, amelyek YAML-formátumú erőforrás-leírások, amelyeket a Kubernetes megért. – Helm-diagramsablon útmutatója
apiVersion: apps/v1
kind: Deployment
metadata:
name: read
labels:
app: read-deployment
spec:
selector:
matchLabels:
app: read-app
template:
metadata:
labels:
app: read-app
spec:
containers:
- name: {{.Values.read.image.name}}
image: {{.Values.read.image.registry}}{{.Values.read.image.repository}}
ports:
- containerPort: 5000
env:
- name: EULA
value: {{.Values.read.image.args.eula}}
- name: billing
value: {{.Values.read.image.args.billing}}
- name: apikey
value: {{.Values.read.image.args.apikey}}
args:
- ReadEngineConfig:ResultExpirationPeriod={{ .Values.read.image.args.resultExpirationPeriod }}
{{- if .Values.read.image.args.rabbitmq.enabled }}
- Queue:RabbitMQ:HostName={{ include "rabbitmq.hostname" . }}
- Queue:RabbitMQ:Username={{ .Values.read.image.args.rabbitmq.rabbitmq.username }}
- Queue:RabbitMQ:Password={{ .Values.read.image.args.rabbitmq.rabbitmq.password }}
{{- end }}
{{- if .Values.read.image.args.redis.enabled }}
- Cache:Redis:Configuration={{ include "redis.connStr" . }}
{{- end }}
imagePullSecrets:
- name: {{.Values.read.image.pullSecret}}
---
apiVersion: v1
kind: Service
metadata:
name: read-service
spec:
type: LoadBalancer
ports:
- port: 5000
selector:
app: read-app
Ugyanabban a sablonmappában másolja és illessze be a következő segédfüggvényeket a mappába helpers.tpl
. helpers.tpl
hasznos függvényeket definiál a Helm-sablon létrehozásához.
{{- define "rabbitmq.hostname" -}}
{{- printf "%s-rabbitmq" .Release.Name -}}
{{- end -}}
{{- define "redis.connStr" -}}
{{- $hostMain := printf "%s-redis-master:6379" .Release.Name }}
{{- $hostReplica := printf "%s-redis-replica:6379" .Release.Name -}}
{{- $passWord := printf "password=%s" .Values.read.image.args.redis.password -}}
{{- $connTail := "ssl=False,abortConnect=False" -}}
{{- printf "%s,%s,%s,%s" $hostMain $hostReplica $passWord $connTail -}}
{{- end -}}
A sablon egy terheléselosztó szolgáltatást és a tároló/rendszerkép üzembe helyezését határozza meg az Olvasáshoz.
A Kubernetes-csomag (Helm-diagram)
A Helm-diagram tartalmazza a tárolóregisztrációs adatbázisból mcr.microsoft.com
lekérhető Docker-rendszerkép(ek) konfigurációját.
A Helm-diagram olyan fájlok gyűjteménye, amelyek a Kubernetes-erőforrások kapcsolódó készletét írják le. Egyetlen diagramot használva üzembe helyezhet valami egyszerűet, például egy memcached podot vagy valami összetettet, például egy teljes webalkalmazás-vermet HTTP-kiszolgálókkal, adatbázisokkal, gyorsítótárakkal stb.
A megadott Helm-diagramok lekérik az Azure AI Vision Service docker-rendszerképeit és a megfelelő szolgáltatást a mcr.microsoft.com
tárolóregisztrációs adatbázisból.
A Helm-diagram telepítése a Kubernetes-fürtön
A helm-diagram telepítéséhez végre kell hajtanunk a helm install
parancsot. Győződjön meg arról, hogy a telepítési parancsot a mappa fölötti könyvtárból hajtja végre read
.
helm install read ./read
Íme egy példa a sikeres telepítés végrehajtásából várható kimenetre:
NAME: read
LAST DEPLOYED: Thu Sep 04 13:24:06 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
read-57cb76bcf7-45sdh 0/1 ContainerCreating 0 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
read LoadBalancer 10.110.44.86 localhost 5000:31301/TCP 0s
==> v1beta1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
read 0/1 1 0 0s
A Kubernetes üzembe helyezése több percet is igénybe vehet. A podok és szolgáltatások megfelelő üzembe helyezésének és rendelkezésre állásának ellenőrzéséhez hajtsa végre a következő parancsot:
kubectl get all
A következő kimenethez hasonlót kell látnia:
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/read-57cb76bcf7-45sdh 1/1 Running 0 17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 45h
service/read LoadBalancer 10.110.44.86 localhost 5000:31301/TCP 17s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/read 1/1 1 1 17s
NAME DESIRED CURRENT READY AGE
replicaset.apps/read-57cb76bcf7 1 1 1 17s
Több v3-tároló üzembe helyezése a Kubernetes-fürtön
A tároló 3- es verziójától kezdve a tárolókat párhuzamosan használhatja feladat- és oldalszinten is.
A tervezés szerint minden v3-tároló rendelkezik egy diszpécserrel és egy felismerési feldolgozóval. A diszpécser feladata egy többoldalas feladat felosztása többoldalas altevékenységre. A felismerési feldolgozó egyoldalas dokumentum felismerésére van optimalizálva. Az oldalszintű párhuzamosság eléréséhez helyezzen üzembe több v3-tárolót egy terheléselosztó mögött, és hagyja, hogy a tárolók univerzális tárolót és üzenetsort osszanak meg.
Megjegyzés
Jelenleg csak az Azure Storage és az Azure Queue támogatott.
A kérést fogadó tároló feloszthatja a feladatot egyoldalas altevékenységekké, és felveheti őket az univerzális üzenetsorba. A kevésbé elfoglalt tárolókból származó felismerési feldolgozók használhatják az üzenetsor egyoldalas altevékenységeit, elvégezhetik a felismerést, és feltölthetik az eredményt a tárolóba. Az átviteli sebesség az üzembe helyezett tárolók számától függően akár n
többször is javítható.
A v3-tároló elérhetővé teszi az élőség-mintavételi API-t az /ContainerLiveness
útvonal alatt. Az alábbi üzembe helyezési példával konfigurálhat egy élőségi mintavételt a Kuberneteshez.
Másolja és illessze be a következő YAML-t egy nevű deployment.yaml
fájlba. Cserélje le a és # {API_KEY}
a # {ENDPOINT_URI}
megjegyzést a saját értékeire. Cserélje le a megjegyzést # {AZURE_STORAGE_CONNECTION_STRING}
az Azure Storage kapcsolati sztringjére. Konfigurálja replicas
a kívánt számot, amely az alábbi példában van beállítva 3
.
apiVersion: apps/v1
kind: Deployment
metadata:
name: read
labels:
app: read-deployment
spec:
selector:
matchLabels:
app: read-app
replicas: # {NUMBER_OF_READ_CONTAINERS}
template:
metadata:
labels:
app: read-app
spec:
containers:
- name: cognitive-services-read
image: mcr.microsoft.com/azure-cognitive-services/vision/read
ports:
- containerPort: 5000
env:
- name: EULA
value: accept
- name: billing
value: # {ENDPOINT_URI}
- name: apikey
value: # {API_KEY}
- name: Storage__ObjectStore__AzureBlob__ConnectionString
value: # {AZURE_STORAGE_CONNECTION_STRING}
- name: Queue__Azure__ConnectionString
value: # {AZURE_STORAGE_CONNECTION_STRING}
livenessProbe:
httpGet:
path: /ContainerLiveness
port: 5000
initialDelaySeconds: 60
periodSeconds: 60
timeoutSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
name: azure-cognitive-service-read
spec:
type: LoadBalancer
ports:
- port: 5000
targetPort: 5000
selector:
app: read-app
Futtassa az alábbi parancsot.
kubectl apply -f deployment.yaml
Az alábbiakban egy példakimenet látható egy sikeres üzembe helyezés végrehajtásából:
deployment.apps/read created
service/azure-cognitive-service-read created
A Kubernetes üzembe helyezése eltarthat néhány percig. A podok és szolgáltatások megfelelő üzembe helyezésének és rendelkezésre állásának ellenőrzéséhez hajtsa végre a következő parancsot:
kubectl get all
A következőhöz hasonló konzolkimenetnek kell megjelennie:
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/read-6cbbb6678-58s9t 1/1 Running 0 3s
pod/read-6cbbb6678-kz7v4 1/1 Running 0 3s
pod/read-6cbbb6678-s2pct 1/1 Running 0 3s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/azure-cognitive-service-read LoadBalancer 10.0.134.0 <none> 5000:30846/TCP 17h
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 78d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/read 3/3 3 3 3s
NAME DESIRED CURRENT READY AGE
replicaset.apps/read-6cbbb6678 3 3 3 3s
Annak ellenőrzése, hogy egy tároló fut-e
A tároló futásának ellenőrzésére többféleképpen is lehetőség van. Keresse meg a szóban forgó tároló külső IP-címét és közzétett portját, és nyissa meg a kedvenc webböngészőt. A tároló futásának ellenőrzéséhez használja az alábbi kérési URL-címeket. Az itt felsorolt példakérési URL-címek a következők, http://localhost:5000
de az adott tároló eltérő lehet. Ügyeljen arra, hogy a tároló külső IP-címére és közzétett portjára támaszkodjon.
Kérelem URL-címe | Cél |
---|---|
http://localhost:5000/ |
A tároló egy kezdőlappal rendelkezik. |
http://localhost:5000/ready |
A GET használatával kért URL-cím ellenőrzi, hogy a tároló készen áll-e a modell lekérdezésének elfogadására. Ez a kérés használható a Kubernetes-beli élettartam- és készültségi mintavételekhez. |
http://localhost:5000/status |
A GET használatával is kért URL-cím ellenőrzi, hogy a tároló elindításához használt API-kulcs érvényes-e végpontlekérdezés nélkül. Ez a kérés használható a Kubernetes-beli élettartam- és készültségi mintavételekhez. |
http://localhost:5000/swagger |
A tároló átfogó dokumentációval is rendelkezik a végpontokhoz, valamint egy kipróbálás funkcióval is. Ezzel a funkcióval beírhatja a beállításokat egy webes HTML-űrlapba, és anélkül végezheti el a lekérdezést, hogy kódot kellene írnia. A lekérdezés visszaadása után megjelenik egy példa CURL-parancs, amely bemutatja a szükséges HTTP-fejléceket és törzsformátumot. |
Következő lépések
Az alkalmazások Helmrel való telepítéséről az Azure Kubernetes Service (AKS)-ben itt talál további információt.