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.

Képernyőkép a végpont URI-jának későbbi használatra való gyűjtéséről.

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.

Képernyőkép a két kulcs egyikének későbbi használatra való beszerzéséről.

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:

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.yamlfá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 és apikey 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.yamlfá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.yamlfá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:5000de 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.

A tároló kezdőlapja

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.