Sdílet prostřednictvím


Použití kontejneru Azure AI Vision s Kubernetes a Helmem

Jednou z možností správy kontejnerů Azure AI Vision v místním prostředí je použití Kubernetes a Helmu. Pomocí Kubernetes a Helmu definujeme image kontejneru Azure AI Vision, vytvoříme balíček Kubernetes. Tento balíček se nasadí do místního clusteru Kubernetes. Nakonec prozkoumáme, jak otestovat nasazené služby. Další informace o spouštění kontejnerů Dockeru bez orchestrace Kubernetes najdete v tématu Instalace a spuštění kontejnerů Azure AI Vision.

Požadavky

Před použitím kontejnerů Azure AI Vision v místním prostředí jsou splněné následující požadavky:

Požaduje se Účel
Azure Account Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Rozhraní příkazového řádku Kubernetes Rozhraní příkazového řádku Kubernetes se vyžaduje ke správě sdílených přihlašovacích údajů z registru kontejneru. Kubernetes je také potřeba před Helmem, což je správce balíčků Kubernetes.
Rozhraní příkazového řádku Helm Nainstalujte rozhraní příkazového řádku Helm, které se používá k instalaci chartu Helm (definice balíčku kontejneru).
prostředek Počítačové zpracování obrazu Abyste mohli kontejner používat, musíte mít:

Prostředek Počítačové zpracování obrazu a přidružený klíč rozhraní API identifikátor URI koncového bodu. Obě hodnoty jsou k dispozici na stránkách Přehled a Klíče pro prostředek a jsou potřeba ke spuštění kontejneru.

{API_KEY}: Jeden ze dvou dostupných klíčů prostředků na stránce Klíče

{ENDPOINT_URI}: Koncový bod uvedený na stránce Přehled

Shromáždění požadovaných parametrů

Jsou vyžadovány tři primární parametry pro všechny kontejnery Azure AI. Licenční podmínky pro software společnosti Microsoft musí být k dispozici s hodnotou přijetí. Vyžaduje se také identifikátor URI koncového bodu a klíč rozhraní API.

Identifikátor URI koncového bodu

Tato {ENDPOINT_URI} hodnota je k dispozici na stránce Přehled webu Azure Portal odpovídajícího prostředku služeb Azure AI. Přejděte na stránku Přehled, najeďte myší na koncový bod a zobrazí se ikona Kopírovat do schránky. Zkopírujte koncový bod a použijte ho tam, kde je to potřeba.

Snímek obrazovky znázorňující shromažďování identifikátoru URI koncového bodu pro pozdější použití

Klávesy

Hodnota {API_KEY} se používá ke spuštění kontejneru a je k dispozici na stránce Klíče webu Azure Portal odpovídajícího prostředku služeb Azure AI. Přejděte na stránku Klíče a vyberte ikonu Kopírovat do schránky.

Snímek obrazovky znázorňující získání jednoho ze dvou klíčů pro pozdější použití

Důležité

Tyto klíče předplatného se používají pro přístup k rozhraní API služeb Azure AI. Nesdílejte klíče. Bezpečně je uložte. Použijte například Azure Key Vault. Doporučujeme tyto klíče pravidelně znovu vygenerovat. K volání rozhraní API je nutný jenom jeden klíč. Při opětovném vygenerování prvního klíče můžete pro pokračování přístupu ke službě použít druhý klíč.

Hostitelský počítač

Hostitel je počítač založený na platformě x64, na kterém běží kontejner Dockeru. Může to být počítač v místním prostředí nebo hostitelská služba Dockeru v Azure, například:

Požadavky na kontejnery a doporučení

Poznámka:

Požadavky a doporučení jsou založeny na srovnávacích testech s jedním požadavkem za sekundu pomocí 523kB obrázku naskenovaného obchodního dopisu, který obsahuje celkem 29 řádků a celkem 803 znaků. Doporučená konfigurace způsobila přibližně 2x rychlejší odezvu v porovnání s minimální konfigurací.

Následující tabulka popisuje minimální a doporučené přidělení prostředků pro každý kontejner OCR pro čtení.

Kontejner Minimum Doporučeno
Čtení 3.2 2022-04-30 4 jádra, 8 GB paměti 8 jader, 16 GB paměti
Čtení 3.2 2021-04-12 4 jádra, 16 GB paměti 8 jader, 24 GB paměti
  • Každé jádro musí mít alespoň 2,6 gigahertz (GHz) nebo rychlejší.

Jádro a paměť odpovídají hodnotám --cpus a --memory nastavením, které se používají jako součást docker run příkazu.

Připojení ke clusteru Kubernetes

Očekává se, že hostitelský počítač bude mít dostupný cluster Kubernetes. V tomto kurzu o nasazení clusteru Kubernetes se dozvíte, jak na hostitelský počítač nasadit cluster Kubernetes. Další informace o nasazeních najdete v dokumentaci k Kubernetes.

Konfigurace hodnot chartu Helm pro nasazení

Začněte vytvořením složky s názvem read. Potom vložte následující obsah YAML do nového souboru s názvem 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/

Pokud chcete nakonfigurovat výchozí hodnoty chartu Helm, zkopírujte a vložte následující YAML do souboru s názvem values.yaml. # {ENDPOINT_URI} Nahraďte komentáře # {API_KEY} vlastními hodnotami. V případě potřeby nakonfigurujte výsledekExpirationPeriod, Redis a RabbitMQ.

# 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

Důležité

  • billing Pokud tyto hodnoty a apikey hodnoty nejsou k dispozici, vyprší platnost služeb po 15 minutách. Podobně se ověření nezdaří, protože služby nejsou dostupné.

  • Pokud za nástrojem pro vyrovnávání zatížení nasadíte několik kontejnerů OCR pro čtení, například v rámci Docker Compose nebo Kubernetes, musíte mít externí mezipaměť. Protože kontejner zpracování a kontejner požadavku GET nemusí být stejné, externí mezipaměť ukládá výsledky a sdílí je mezi kontejnery. Podrobnosti o nastavení mezipaměti najdete v tématu Konfigurace kontejnerů Dockeru ve službě Azure AI Vision.

Vytvořte složku šablon v adresáři pro čtení . Zkopírujte a vložte následující YAML do souboru s názvem deployment.yaml. Soubor deployment.yaml bude sloužit jako šablona Helmu.

Šablony generují soubory manifestu, což jsou popisy prostředků ve formátu YAML, kterým Může Kubernetes rozumět. – Průvodce šablonou chartu Helm

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

Ve stejné složce šablon zkopírujte a vložte následující pomocné funkce do helpers.tplsložky . helpers.tpl definuje užitečné funkce, které pomáhají generovat šablonu Helm.

{{- 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 -}}

Šablona určuje službu nástroje pro vyrovnávání zatížení a nasazení kontejneru nebo image pro čtení.

Balíček Kubernetes (chart Helm)

Chart Helm obsahuje konfiguraci, ze které se mají image Dockeru načíst z registru kontejnerumcr.microsoft.com.

Chart Helm je kolekce souborů, které popisují související sadu prostředků Kubernetes. Jeden graf se může použít k nasazení něčeho jednoduchého, například podu memcached nebo něčeho složitého, například kompletního zásobníku webových aplikací se servery HTTP, databázemi, mezipaměťmi atd.

Poskytnuté grafy Helm načítá image Dockeru služby Azure AI Vision Service a odpovídající službu z registru kontejnerumcr.microsoft.com.

Instalace chartu Helm v clusteru Kubernetes

Pokud chcete nainstalovat chart Helm, budeme muset tento příkaz spustit helm install . Ujistěte se, že chcete spustit příkaz install z adresáře nad složkou read .

helm install read ./read

Tady je příklad výstupu, který byste mohli očekávat od úspěšného spuštění instalace:

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

Dokončení nasazení Kubernetes může trvat několik minut. Pokud chcete ověřit, že jsou pody i služby správně nasazené a dostupné, spusťte následující příkaz:

kubectl get all

Měli byste očekávat, že se zobrazí něco podobného následujícímu výstupu:

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

Nasazení několika kontejnerů v3 v clusteru Kubernetes

Počínaje verzí 3 kontejneru můžete kontejnery používat paralelně na úrovni úlohy i stránky.

Každý kontejner v3 má podle návrhu dispečer a pracovník rozpoznávání. Dispečer zodpovídá za rozdělení vícestráenkového úkolu na několik dílčích úkolů na jednu stránku. Pracovní proces rozpoznávání je optimalizovaný pro rozpoznávání jednoho stránkového dokumentu. Pokud chcete dosáhnout paralelismu na úrovni stránky, nasaďte několik kontejnerů v3 za nástrojem pro vyrovnávání zatížení a nechte kontejnery sdílet univerzální úložiště a frontu.

Poznámka:

V současné době se podporují jenom Azure Storage a Fronta Azure.

Kontejner, který přijímá požadavek, může úkol rozdělit na dílčí úkoly na jedné stránce a přidat je do univerzální fronty. Každý pracovní proces rozpoznávání z méně zaneprázdněného kontejneru může využívat dílčí úlohy na jedné stránce z fronty, provádět rozpoznávání a nahrávat výsledek do úložiště. Propustnost lze v závislosti na počtu nasazených kontejnerů vylepšit až n kolikrát.

Kontejner v3 zveřejňuje rozhraní API sondy aktivity v /ContainerLiveness rámci cesty. Pomocí následujícího příkladu nasazení nakonfigurujte sondu aktivity pro Kubernetes.

Zkopírujte a vložte následující YAML do souboru s názvem deployment.yaml. # {ENDPOINT_URI} Nahraďte komentáře # {API_KEY} vlastními hodnotami. # {AZURE_STORAGE_CONNECTION_STRING} Nahraďte komentář připojovacím řetězcem služby Azure Storage. Nakonfigurujte replicas požadované číslo, které je nastavené 3 v následujícím příkladu.

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

Spusťte následující příkaz:

kubectl apply -f deployment.yaml

Níže je příklad výstupu, který se může zobrazit z úspěšného spuštění nasazení:

deployment.apps/read created
service/azure-cognitive-service-read created

Dokončení nasazení Kubernetes může trvat několik minut. Pokud chcete ověřit, že jsou pody i služby správně nasazené a dostupné, spusťte následující příkaz:

kubectl get all

Měl by se zobrazit výstup konzoly podobný následujícímu:

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

Ověření, že je kontejner spuštěný

Existuje několik způsobů, jak ověřit, že je kontejner spuštěný. Vyhledejte externí IP adresu a vystavený port kontejneru a otevřete svůj oblíbený webový prohlížeč. Pomocí různých adres URL požadavků, které následují, ověřte, že kontejner běží. Tady jsou uvedené http://localhost:5000ukázkové adresy URL požadavků, ale váš konkrétní kontejner se může lišit. Ujistěte se, že spoléháte na externí IP adresu kontejneru a vystavený port.

Adresa URL požadavku Účel
http://localhost:5000/ Kontejner poskytuje domovskou stránku.
http://localhost:5000/ready Požadovaná pomocí příkazu GET poskytuje tuto adresu URL ověření, že kontejner je připravený přijmout dotaz na model. Tento požadavek je možné použít pro sondy připravenosti a aktivity Kubernetes.
http://localhost:5000/status Tato adresa URL také vyžaduje get, ověří, jestli klíč rozhraní API použitý ke spuštění kontejneru je platný, aniž by způsoboval dotaz koncového bodu. Tento požadavek je možné použít pro sondy připravenosti a aktivity Kubernetes.
http://localhost:5000/swagger V kontejneru je ke koncovým bodům a k funkci Vyzkoušet kompletní dokumentace. Pomocí této funkce můžete zadat nastavení do webového formuláře HTML a vytvořit dotaz, aniž byste museli psát žádný kód. Po vrácení dotazu se zobrazí příklad příkazu CURL, který předvede požadované hlavičky HTTP a základní formát.

Domovská stránka kontejneru

Další kroky

Další podrobnosti o instalaci aplikací s Helmem ve službě Azure Kubernetes Service (AKS) najdete tady.