Menggunakan kontainer layanan Speech dengan Kubernetes dan Helm

Salah satu opsi untuk mengelola kontainer Speech di lokasi adalah dengan menggunakan Kubernetes dan Helm. Menggunakan Kubernetes dan Helm untuk menentukan ucapan ke teks dan teks ke gambar kontainer ucapan, kami membuat paket Kubernetes. Paket ini disebarkan ke kluster Kubernetes lokal. Terakhir, kami menjelajahi cara menguji layanan yang disebarkan dan berbagai opsi konfigurasi. Untuk mengetahui informasi selengkapnya tentang menjalankan kontainer Docker tanpa orkestrasi Kubernetes, lihat menginstal dan menjalankan kontainer layanan Speech.

Prasyarat

Prasyarat berikut sebelum menggunakan kontainer Speech lokal:

Diperlukan Tujuan
Akun Azure Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Akses Container Registry Agar Kubernetes dapat menarik gambar docker ke dalam kluster, kubernetes memerlukan akses ke registri kontainer.
Kubernetes CLI Kubernetes CLI diperlukan untuk mengelola informasi masuk bersama dari registri kontainer. Kube juga diperlukan sebelum Helm, yang merupakan manajer paket Kube.
Helm CLI Instal Helm CLI, yang digunakan untuk memasang grafik helm (definisi paket kontainer).
Sumber daya Ucapan Untuk menggunakan kontainer ini, Anda harus memiliki:

Sumber daya Speech Azure untuk mendapatkan kunci penagihan terkait dan URI titik akhir penagihan. Kedua nilai tersedia di halaman Gambaran Umum Speech dan Kunci portal Azure dan diperlukan untuk memulai kontainer.

{API_KEY}: kunci sumber daya

{ENDPOINT_URI}: contoh URI titik akhir adalah: https://eastus.api.cognitive.microsoft.com/sts/v1.0

Lihat detail komputer host kontainer layanan Speech sebagai referensi. Bagan helm ini otomatis menghitung persyaratan CPU dan memori berdasarkan berapa banyak dekode (permintaan bersamaan) yang ditentukan pengguna. Selain itu, ini menyesuaikan berdasarkan apakah pengoptimalan untuk input audio/teks dikonfigurasi sebagai enabled. Bagan helm default ke, dua permintaan bersamaan dan menonaktifkan pengoptimalan.

Layanan CPU/Kontainer Memori/Kontainer
ucapan ke teks satu dekoder membutuhkan minimal 1.150 milicore. Jika optimizedForAudioFile diaktifkan, diperlukan 1.950 milicore. (default: dua dekoder) Diperlukan: 2 GB
Terbatas: 4 GB
teks ke ucapan satu permintaan bersamaan membutuhkan minimal 500 milicore. Jika optimizeForTurboMode diaktifkan, diperlukan 1.000 milicore. (default: dua permintaan bersamaan) Diperlukan: 1 GB
Terbatas: 2 GB

Menyambungkan ke kluster Kubernetes

Komputer host diharapkan memiliki kluster Kub yang tersedia. Lihat tutorial penyebaran kluster Kubernetes untuk pemahaman konseptual tentang cara menyebarkan kluster Kubernetes ke komputer host.

Mengonfigurasi nilai bagan Helm untuk penyebaran

Buka Microsoft Helm Hub untuk semua bagan helm yang tersedia untuk umum yang ditawarkan oleh Microsoft. Dari Microsoft Helm Hub, Anda menemukan Bagan Azure AI Speech Lokal. Azure AI Speech On-Premises adalah bagan yang kami instal, tetapi kita harus terlebih dahulu membuat config-values.yaml file dengan konfigurasi eksplisit. Mari mulai dengan menambahkan repositori Microsoft ke instans Helm.

helm repo add microsoft https://microsoft.github.io/charts/repo

Selanjutnya, kami mengonfigurasi nilai bagan Helm kami. Salin dan tempel YAML berikut ke dalam file bernama config-values.yaml. Untuk informasi selengkapnya tentang menyesuaikan Bagan Helm Azure AI Speech Lokal, lihat mengkustomisasi bagan helm. Ganti # {ENDPOINT_URI} dan # {API_KEY} berikan komentar dengan nilai Anda sendiri.

# These settings are deployment specific and users can provide customizations
# speech to text configurations
speechToText:
  enabled: true
  numberOfConcurrentRequest: 3
  optimizeForAudioFile: true
  image:
    registry: mcr.microsoft.com
    repository: azure-cognitive-services/speechservices/speech-to-text
    tag: latest
    pullSecrets:
      - mcr # Or an existing secret
    args:
      eula: accept
      billing: # {ENDPOINT_URI}
      apikey: # {API_KEY}

# text to speech configurations
textToSpeech:
  enabled: true
  numberOfConcurrentRequest: 3
  optimizeForTurboMode: true
  image:
    registry: mcr.microsoft.com
    repository: azure-cognitive-services/speechservices/neural-text-to-speech
    tag: latest
    pullSecrets:
      - mcr # Or an existing secret
    args:
      eula: accept
      billing: # {ENDPOINT_URI}
      apikey: # {API_KEY}

Penting

Jika nilai billing dan apikey tidak disediakan, layanan akan kedaluwarsa setelah 15 menit. Demikian juga, verifikasi akan gagal karena layanan tidak akan tersedia.

Paket Kubernetes (Chart Helm)

Bagan Helm berisi konfigurasi gambar docker mana yang ditarik dari mcr.microsoft.com registri kontainer.

Bagan Helm adalah kumpulan file yang menjelaskan sekumpulan sumber daya Kubernetes terkait. Satu bagan mungkin digunakan untuk menyebarkan sesuatu yang sederhana, seperti pod yang di-cache, atau sesuatu yang kompleks, seperti tumpukan aplikasi web lengkap dengan server HTTP, database, cache, dan sebagainya.

Bagan Helm yang disediakan menarik gambar docker layanan Ucapan, baik teks ke ucapan maupun layanan ucapan ke teks dari mcr.microsoft.com registri kontainer.

Menginstal bagan Helm pada kluster Kubernetes

Jalankan helm install perintah untuk menginstal bagan helm, mengganti <config-values.yaml> dengan jalur dan argumen nama file yang sesuai. Bagan microsoft/cognitive-services-speech-onpremise Helm tersedia di Microsoft Helm Hub.

helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
    --version 0.1.1 \
    --values <config-values.yaml> 

Berikut adalah contoh output yang mungkin Anda harapkan untuk dilihat dari eksekusi penginstalan yang berhasil:

NAME:   onprem-speech
LAST DEPLOYED: Tue Jul  2 12:51:42 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Pod(related)
NAME                             READY  STATUS             RESTARTS  AGE
speech-to-text-7664f5f465-87w2d  0/1    Pending            0         0s
speech-to-text-7664f5f465-klbr8  0/1    ContainerCreating  0         0s
neural-text-to-speech-56f8fb685b-4jtzh  0/1    ContainerCreating  0         0s
neural-text-to-speech-56f8fb685b-frwxf  0/1    Pending            0         0s

==> v1/Service
NAME            TYPE          CLUSTER-IP    EXTERNAL-IP  PORT(S)       AGE
speech-to-text  LoadBalancer  10.0.252.106  <pending>    80:31811/TCP  1s
neural-text-to-speech  LoadBalancer  10.0.125.187  <pending>    80:31247/TCP  0s

==> v1beta1/PodDisruptionBudget
NAME                                MIN AVAILABLE  MAX UNAVAILABLE  ALLOWED DISRUPTIONS  AGE
speech-to-text-poddisruptionbudget  N/A            20%              0                    1s
neural-text-to-speech-poddisruptionbudget  N/A            20%              0                    1s

==> v1beta2/Deployment
NAME            READY  UP-TO-DATE  AVAILABLE  AGE
speech-to-text  0/2    2           0          0s
neural-text-to-speech  0/2    2           0          0s

==> v2beta2/HorizontalPodAutoscaler
NAME                       REFERENCE                  TARGETS        MINPODS  MAXPODS  REPLICAS  AGE
speech-to-text-autoscaler  Deployment/speech-to-text  <unknown>/50%  2        10       0         0s
neural-text-to-speech-autoscaler  Deployment/neural-text-to-speech  <unknown>/50%  2        10       0         0s


NOTES:
cognitive-services-speech-onpremise has been installed!
Release is named onprem-speech

Proses penyebaran Kube dapat memakan waktu lebih dari beberapa menit. Untuk mengonfirmasi bahwa kedua pod dan layanan disebarkan dan tersedia dengan benar, jalankan perintah berikut:

kubectl get all

Anda pasti berharap untuk melihat sesuatu yang mirip dengan output berikut:

NAME                                  READY     STATUS    RESTARTS   AGE
pod/speech-to-text-7664f5f465-87w2d   1/1       Running   0          34m
pod/speech-to-text-7664f5f465-klbr8   1/1       Running   0          34m
pod/neural-text-to-speech-56f8fb685b-4jtzh   1/1       Running   0          34m
pod/neural-text-to-speech-56f8fb685b-frwxf   1/1       Running   0          34m

NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
service/kubernetes       ClusterIP      10.0.0.1       <none>           443/TCP        3h
service/speech-to-text   LoadBalancer   10.0.252.106   52.162.123.151   80:31811/TCP   34m
service/neural-text-to-speech   LoadBalancer   10.0.125.187   65.52.233.162    80:31247/TCP   34m

NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/speech-to-text   2         2         2            2           34m
deployment.apps/neural-text-to-speech   2         2         2            2           34m

NAME                                        DESIRED   CURRENT   READY     AGE
replicaset.apps/speech-to-text-7664f5f465   2         2         2         34m
replicaset.apps/neural-text-to-speech-56f8fb685b   2         2         2         34m

NAME                                                            REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/speech-to-text-autoscaler   Deployment/speech-to-text   1%/50%    2         10        2          34m
horizontalpodautoscaler.autoscaling/neural-text-to-speech-autoscaler   Deployment/neural-text-to-speech   0%/50%    2         10        2          34m

Memverifikasi penyebaran Helm dengan pengujian Helm

Bagan Helm yang diinstal mendefinisikan pengujian Helm, yang berfungsi sebagai kenyamanan untuk verifikasi. Pengujian ini memvalidasi kesiapan layanan. Untuk memverifikasi fitur ucapan ke teks dan teks ke ucapan, kami menjalankan perintah uji Helm.

helm test onprem-speech

Penting

Pengujian ini akan gagal jika status POD tidak Running atau jika penyebaran tidak tercantum di kolom AVAILABLE. Bersabarlah karena ini bisa memakan waktu lebih dari sepuluh menit untuk selesai.

Pengujian ini menghasilkan berbagai hasil status:

RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test

Sebagai alternatif untuk menjalankan pengujian helm, Anda dapat mengumpulkan alamat IP Eksternal dan port yang sesuai dari perintah kubectl get all. Dengan menggunakan IP dan port, buka browser web dan navigasi ke http://<external-ip>:<port>:/swagger/index.html untuk melihat halaman API swagger.

Menyesuaikan bagan Helm

Grafik Helm bersifat hierarkis. Bersifat hierarkis memungkinkan pewarisan bagan, ini juga memenuhi konsep kekhususan, yang mana pengaturan yang lebih spesifik mengesampingkan aturan yang diwariskan.

Ucapan (bagan umbrella)

Nilai dalam bagan "umbrella" tingkat teratas mengesampingkan nilai sub-bagan terkait. Oleh karena itu, semua nilai yang disesuaikan di tempat harus ditambahkan di sini.

Parameter Deskripsi Default
speechToText.enabled Apakah layanan ucapan ke teks diaktifkan. true
speechToText.verification.enabled helm test Apakah kemampuan untuk layanan ucapan ke teks diaktifkan. true
speechToText.verification.image.registry Repositori gambar docker yang helm test menggunakan untuk menguji ucapan ke layanan teks . Helm membuat pod terpisah di dalam klaster untuk pengujian dan menarik gambat test-penggunaan dari registri ini. docker.io
speechToText.verification.image.repository Repositori gambar docker yang helm test menggunakan untuk menguji ucapan ke layanan teks . Pod uji helm menggunakan repositori ini untuk menarik gambar tes penggunaan. antsu/on-prem-client
speechToText.verification.image.tag Tag gambar docker digunakan dengan helm test untuk layanan ucapan ke teks . Pod uji helm menggunakan tag ini untuk menarik gambar tes penggunaan. latest
speechToText.verification.image.pullByHash Apakah gambar docker tes penggunaan ditarik oleh hash. Jika true, speechToText.verification.image.hash harus ditambahkan, dengan nilai hash gambar yang valid. false
speechToText.verification.image.arguments Argumen yang digunakan untuk mengeksekusi gambar docker tes penggunaan. Pod uji helm meneruskan argumen ini ke kontainer saat menjalankan helm test. "./speech-to-text-client"
"./audio/whatstheweatherlike.wav"
"--expect=What's the weather like"
"--host=$(SPEECH_TO_TEXT_HOST)"
"--port=$(SPEECH_TO_TEXT_PORT)"
textToSpeech.enabled Apakah layanan teks ke ucapan diaktifkan. true
textToSpeech.verification.enabled helm test Apakah kemampuan untuk layanan ucapan ke teks diaktifkan. true
textToSpeech.verification.image.registry Repositori gambar docker yang helm test menggunakan untuk menguji ucapan ke layanan teks . Helm membuat pod terpisah di dalam klaster untuk pengujian dan menarik gambat test-penggunaan dari registri ini. docker.io
textToSpeech.verification.image.repository Repositori gambar docker yang helm test menggunakan untuk menguji ucapan ke layanan teks . Pod uji helm menggunakan repositori ini untuk menarik gambar tes penggunaan. antsu/on-prem-client
textToSpeech.verification.image.tag Tag gambar docker digunakan dengan helm test untuk layanan ucapan ke teks . Pod uji helm menggunakan tag ini untuk menarik gambar tes penggunaan. latest
textToSpeech.verification.image.pullByHash Apakah gambar docker tes penggunaan ditarik oleh hash. Jika true, textToSpeech.verification.image.hash harus ditambahkan, dengan nilai hash gambar yang valid. false
textToSpeech.verification.image.arguments Argumen yang digunakan untuk mengeksekusi gambar docker tes penggunaan. Pod uji helm meneruskan argumen ini ke kontainer saat menjalankan helm test. "./text-to-speech-client"
"--input='What's the weather like'"
"--host=$(TEXT_TO_SPEECH_HOST)"
"--port=$(TEXT_TO_SPEECH_PORT)"

Ucapan ke teks (sub-bagan: bagan/speechToText)

Untuk mengganti bagan "payung", tambahkan awalan speechToText. pada parameter apa pun untuk membuatnya lebih spesifik. Misalnya, itu akan mengambil alih parameter yang sesuai misalnya, speechToText.numberOfConcurrentRequest mengambil alih numberOfConcurrentRequest.

Parameter Deskripsi Default
enabled Apakah layanan ucapan ke teks diaktifkan. false
numberOfConcurrentRequest Jumlah permintaan bersamaan untuk layanan ucapan ke teks . Bagan ini secara otomatis menghitung sumber daya CPU dan memori, berdasarkan nilai ini. 2
optimizeForAudioFile Apakah layanan perlu mengoptimalkan input audio melalui file audio. Jika true, bagan ini akan mengalokasikan lebih banyak sumber daya CPU ke layanan. false
image.registry Registri gambar docker ucapan ke teks. containerpreview.azurecr.io
image.repository Repositori gambar docker ucapan ke teks. microsoft/cognitive-services-speech-to-text
image.tag Tag gambar docker ucapan ke teks . latest
image.pullSecrets Rahasia gambar untuk menarik gambar docker ucapan ke teks .
image.pullByHash Apakah gambar docker ditarik oleh hash. Jika true, image.hash diperlukan. false
image.hash Hash gambar docker ucapan ke teks . Hanya digunakan ketika image.pullByHash: true.
image.args.eula (diperlukan) Menunjukkan bahwa Anda telah menerima lisensi. Satu-satunya nilai yang valid adalah accept
image.args.billing (diperlukan) Nilai URI titik akhir tagihan tersedia di halaman Gambaran umum Ucapan portal Microsoft Azure.
image.args.apikey (diperlukan) Digunakan untuk melacak informasi tagihan.
service.type Jenis layanan Kubernetes dari layanan ucapan ke teks . Lihat petunjuk jenis layanan Kubernetes untuk detail lebih lanjut dan verifikasi dukungan penyedia cloud. LoadBalancer
service.port Port layanan ucapan ke teks . 80
service.annotations Anotasi ucapan ke teks untuk metadata layanan. Anotasi adalah pasangan nilai kunci.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Apakah Autoscaler Pod Horizontal diaktifkan. Jika true, akanspeech-to-text-autoscaler disebarkan di kluster Kube. true
service.podDisruption.enabled Apakah Anggaran Gangguan Pod diaktifkan. Jika true, akanspeech-to-text-poddisruptionbudget disebarkan di kluster Kube. true

Analisis sentimen (sub-bagan: bagan/speechToText)

Dimulai dengan v2.2.0 dari kontainer ucapan ke teks dan v0.2.0 dari bagan Helm, parameter berikut digunakan untuk analisis sentimen menggunakan API layanan Bahasa.

Parameter Deskripsi Values Default
textanalytics.enabled Apakah layanan analitik teks diaktifkan benar/salah false
textanalytics.image.registry Registri gambar docker analitik teks registri gambar docker valid
textanalytics.image.repository Repositori gambar docker analitik teks repositori gambar docker valid
textanalytics.image.tag Tag gambar docker analitik teks Tag gambar docker valid
textanalytics.image.pullSecrets Rahasia gambar untuk menarik gambar docker analitik teks nama rahasia valid
textanalytics.image.pullByHash Menentukan apakah Anda menarik gambar docker dengan hash. Jika yes, image.hash diperlukan untuk memiliki juga. Jika no, atur sebagai 'false'. Defaultnya adalah false. benar/salah false
textanalytics.image.hash Hash gambar docker analitik teks. Hanya menggunakannya dengan image.pullByHash:true. Hash gambar docker valid
textanalytics.image.args.eula Salah satu argumen yang diperlukan oleh kontainer analitik teks, yang menunjukkan bahwa Anda telah menerima lisensi. Nilai opsi ini harus: accept. accept, jika Anda ingin menggunakan kontainer
textanalytics.image.args.billing Salah satu argumen yang diperlukan oleh kontainer analitik teks, yang menentukan URI titik akhir penagihan. Nilai URI titik akhir tagihan tersedia di halaman Gambaran umum Ucapan portal Microsoft Azure. URI titik akhir tagihan valid
textanalytics.image.args.apikey Salah satu argumen yang diperlukan oleh kontainer analitik teks, yang digunakan untuk melacak informasi penagihan. apikey valid
textanalytics.cpuRequest CPU yang diminta untuk kontainer analitik teks int 3000m
textanalytics.cpuLimit CPU yang teratas untuk kontainer analitik teks 8000m
textanalytics.memoryRequest Memori yang diminta untuk kontainer analitik teks 3Gi
textanalytics.memoryLimit Memori yang diminta untuk kontainer analitik teks 8Gi
textanalytics.service.sentimentURISuffix Analisis sentimen akhiran URI, seluruh URI dalam format "http://<service>:<port>/<sentimentURISuffix>". text/analytics/v3.0-preview/sentiment
textanalytics.service.type Jenis layanan analitik teks di Kube. Lihat jenis layanan Kube jenis layanan Kube yang valid LoadBalancer
textanalytics.service.port Port layanan analitik teks int 50085
textanalytics.service.annotations Anotasi yang dapat ditambahkan pengguna ke metadata layanan analitik teks. Contohnya:
anotasi:
some/annotation1: value1
some/annotation2: value2
anotasi, satu per setiap baris
textanalytics.serivce.autoScaler.enabled Apakah Autoscaler Pod Horizontal diaktifkan. Jika diaktifkan, text-analytics-autoscaler akan disebarkan di kluster Kube benar/salah true
textanalytics.service.podDisruption.enabled Apakah Anggaran Gangguan Pod diaktifkan. Jika diaktifkan, text-analytics-poddisruptionbudget akan disebarkan di kluster Kube benar/salah true

Teks ke ucapan (sub-bagan: bagan/textToSpeech)

Untuk mengganti bagan "payung", tambahkan awalan textToSpeech. pada parameter apa pun untuk membuatnya lebih spesifik. Misalnya, itu akan mengambil alih parameter yang sesuai misalnya, textToSpeech.numberOfConcurrentRequest mengambil alih numberOfConcurrentRequest.

Parameter Deskripsi Default
enabled Apakah layanan teks ke ucapan diaktifkan. false
numberOfConcurrentRequest Jumlah permintaan bersamaan untuk layanan teks ke ucapan . Bagan ini secara otomatis menghitung sumber daya CPU dan memori, berdasarkan nilai ini. 2
optimizeForTurboMode Apakah layanan perlu mengoptimalkan input teks melalui file teks. Jika true, bagan ini akan mengalokasikan lebih banyak sumber daya CPU ke layanan. false
image.registry Registri gambar docker teks ke ucapan. containerpreview.azurecr.io
image.repository Repositori gambar docker teks ke ucapan . microsoft/cognitive-services-text-to-speech
image.tag Tag gambar docker teks ke ucapan. latest
image.pullSecrets Rahasia gambar untuk menarik teks ke gambar docker ucapan .
image.pullByHash Apakah gambar docker ditarik oleh hash. Jika true, image.hash diperlukan. false
image.hash Hash gambar docker teks ke ucapan . Hanya digunakan ketika image.pullByHash: true.
image.args.eula (diperlukan) Menunjukkan bahwa Anda telah menerima lisensi. Satu-satunya nilai yang valid adalah accept
image.args.billing (diperlukan) Nilai URI titik akhir tagihan tersedia di halaman Gambaran umum Ucapan portal Microsoft Azure.
image.args.apikey (diperlukan) Digunakan untuk melacak informasi tagihan.
service.type Jenis layanan Kubernetes dari layanan teks ke ucapan . Lihat petunjuk jenis layanan Kubernetes untuk detail lebih lanjut dan verifikasi dukungan penyedia cloud. LoadBalancer
service.port Port layanan teks ke ucapan . 80
service.annotations Anotasi teks ke ucapan untuk metadata layanan. Anotasi adalah pasangan nilai kunci.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Apakah Autoscaler Pod Horizontal diaktifkan. Jika true, akantext-to-speech-autoscaler disebarkan di kluster Kube. true
service.podDisruption.enabled Apakah Anggaran Gangguan Pod diaktifkan. Jika true, akantext-to-speech-poddisruptionbudget disebarkan di kluster Kube. true

Langkah berikutnya

Untuk detail lebih lanjut tentang pemasangan aplikasi dengan Helm di Azure Kubernetes Service, kunjungi di sini.