搭配 Kubernetes 和 Helm 使用語音服務容器
管理內部部署語音容器的其中一個選項是使用 Kubernetes 和 Helm。 我們使用 Kubernetes 和 Helm 來定義語音轉換文字和文字到語音容器映像,我們會建立 Kubernetes 套件。 此套件會部署至內部部署的 Kubernetes 叢集。 最後,我們會探索如何測試已部署的服務和各種組態選項。 如需在沒有 Kubernetes 協調流程的情況下執行 Docker 容器的詳細資訊,請參閱 安裝和執行語音服務容器。
必要條件
在內部部署使用語音容器之前,下列必要條件:
必要 | 目的 |
---|---|
Azure 帳戶 | 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。 |
Container Registry 存取 | 為了讓 Kubernetes 將 Docker 映像提取到叢集中,它需要容器登錄的存取權。 |
Kubernetes CLI | 需要 Kubernetes CLI 才能從容器登錄管理共享認證。 Helm 之前也需要 Kubernetes,這是 Kubernetes 套件管理員。 |
Helm CLI | 安裝 Helm CLI,用來安裝 Helm 圖表(容器套件定義)。 |
語音資源 | 若要使用這些容器,您必須具備: 語音 Azure 資源,可取得相關聯的計費密鑰和計費端點 URI。 這兩個值可在 Azure 入口網站 的 [語音概觀] 和 [金鑰] 頁面上取得,而且必須啟動容器。 {API_KEY}: 資源索引鍵 {ENDPOINT_URI}: 端點 URI 範例為: https://eastus.api.cognitive.microsoft.com/sts/v1.0 |
建議的主計算機設定
請參閱語音服務容器主計算機詳細數據作為參考。 此 Helm 圖表 會根據使用者指定的譯碼數(並行要求)自動計算 CPU 和記憶體需求。 此外,它會根據音訊/文字輸入的優化是否設定為 enabled
來調整。 Helm 圖表預設為兩個並行要求,並停用優化。
服務 | CPU/ 容器 | 記憶體/ 容器 |
---|---|---|
語音轉換文字 | 一個譯碼器至少需要 1,150 毫秒。 optimizedForAudioFile 如果 已啟用 ,則需要 1,950 毫秒。 (預設值:兩個譯碼器) |
必要:2 GB 限制:4 GB |
文字轉換語音 | 一個並行要求至少需要 500 毫秒。 optimizeForTurboMode 如果 已啟用 ,則需要 1,000 毫秒。 (預設值:兩個並行要求) |
必要:1 GB 限制:2 GB |
連線 Kubernetes 叢集
主計算機應該會有可用的 Kubernetes 叢集。 如需如何將 Kubernetes 叢集部署至主計算機的概念性瞭解,請參閱部署 Kubernetes 叢集的本教學課程。
設定 Helm 圖表值以進行部署
請流覽 Microsoft Helm Hub,以取得 Microsoft 提供的所有公開可用 Helm 圖表。 從 Microsoft Helm Hub 中,您會找到 Azure AI 語音內部部署圖表。 Azure AI 語音內部部署是我們所安裝的圖表,但必須先建立config-values.yaml
具有明確設定的檔案。 讓我們從將 Microsoft 存放庫新增至 Helm 實例開始。
helm repo add microsoft https://microsoft.github.io/charts/repo
接下來,我們會設定 Helm 圖表值。 將下列 YAML 複製並貼到名為 的 config-values.yaml
檔案中。 如需有關自訂 Azure AI 語音內部部署 Helm 圖表的詳細資訊,請參閱自訂 Helm 圖表。 將 # {ENDPOINT_URI}
和 # {API_KEY}
批註取代為您自己的值。
# 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}
重要
billing
如果未提供 和 apikey
值,服務將會在15分鐘後到期。 同樣地,驗證將會失敗,因為無法使用服務。
Kubernetes 套件 (Helm 圖表)
Helm 圖表包含要從mcr.microsoft.com
容器登錄提取的 Docker 映像設定。
Helm 圖表是描述一組相關 Kubernetes 資源的檔案集合。 單一圖表可用來部署簡單的專案,例如 memcached Pod,或複雜的專案,例如具有 HTTP 伺服器、資料庫、快取等的完整 Web 應用程式堆疊。
提供的 Helm 圖表會從 mcr.microsoft.com
容器登錄提取語音服務 (文字轉換語音和語音轉換文字服務) 的 Docker 映像。
在 Kubernetes 叢集上安裝 Helm 圖表
helm install
執行 命令以安裝 helm 圖表,並將 <config-values.yaml>
取代為適當的路徑和檔名自變數。 microsoft/cognitive-services-speech-onpremise
Helm 圖表可在 Microsoft Helm Hub 上使用。
helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
--version 0.1.1 \
--values <config-values.yaml>
以下是您可能會預期從成功安裝執行中看到的範例輸出:
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
Kubernetes 部署可能需要幾分鐘的時間才能完成。 若要確認 Pod 和服務都已正確部署且可供使用,請執行下列命令:
kubectl get all
您應該會看到類似下列輸出的內容:
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
使用 Helm 測試確認 Helm 部署
已安裝的 Helm 圖表會定義 Helm 測試,以方便驗證。 這些測試會驗證服務整備程度。 若要確認語音轉換文字和文字到語音轉換功能,我們會執行 Helm 測試 命令。
helm test onprem-speech
重要
如果 POD 狀態不是 Running
,或部署未列在 AVAILABLE
數據行底下,這些測試將會失敗。 耐心,因為這可能需要十分鐘的時間才能完成。
這些測試會輸出各種狀態結果:
RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test
作為執行 helm 測試的替代方案,您可以從 命令收集 外部 IP 位址和對應的埠 kubectl get all
。 使用IP和埠,開啟網頁瀏覽器並流覽至 以 http://<external-ip>:<port>:/swagger/index.html
檢視 API Swagger 頁面。
自訂 Helm 圖表
Helm 圖表是階層式圖表。 當階層式允許圖表繼承時,它也會迎合特定性的概念,其中設定更具體的覆寫繼承規則。
語音(雨傘圖)
最上層「雨傘」圖表中的值會覆寫對應的子圖表值。 因此,應該在這裡新增所有內部部署自定義值。
參數 | 描述 | 預設 |
---|---|---|
speechToText.enabled |
是否啟用語音轉換文字服務。 | true |
speechToText.verification.enabled |
是否針對語音轉換文字服務啟用 helm test 功能。 |
true |
speechToText.verification.image.registry |
helm test 用來測試語音轉換文字服務的 Docker 映像存放庫。 Helm 會在叢集內建立個別的 Pod,以進行測試,並從此登錄提取 測試使用 映像。 |
docker.io |
speechToText.verification.image.repository |
helm test 用來測試語音轉換文字服務的 Docker 映像存放庫。 Helm 測試 Pod 會使用此存放庫來提取 測試使用 映像。 |
antsu/on-prem-client |
speechToText.verification.image.tag |
搭配 helm test 使用的 Docker 映像標籤,用於語音轉換文字服務。 Helm 測試 Pod 會使用此標記來提取 測試使用 映像。 |
latest |
speechToText.verification.image.pullByHash |
測試使用 Docker 映像是否由哈希提取。 如果 true 為 , speechToText.verification.image.hash 則應該加入有效的影像哈希值。 |
false |
speechToText.verification.image.arguments |
用來執行test-use docker 映像的自變數。 Helm 測試 Pod 在執行 時 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 |
是否啟用文字轉換語音服務。 | true |
textToSpeech.verification.enabled |
是否針對語音轉換文字服務啟用 helm test 功能。 |
true |
textToSpeech.verification.image.registry |
helm test 用來測試語音轉換文字服務的 Docker 映像存放庫。 Helm 會在叢集內建立個別的 Pod,以進行測試,並從此登錄提取 測試使用 映像。 |
docker.io |
textToSpeech.verification.image.repository |
helm test 用來測試語音轉換文字服務的 Docker 映像存放庫。 Helm 測試 Pod 會使用此存放庫來提取 測試使用 映像。 |
antsu/on-prem-client |
textToSpeech.verification.image.tag |
搭配 helm test 使用的 Docker 映像標籤,用於語音轉換文字服務。 Helm 測試 Pod 會使用此標記來提取 測試使用 映像。 |
latest |
textToSpeech.verification.image.pullByHash |
測試使用 Docker 映像是否由哈希提取。 如果 true 為 , textToSpeech.verification.image.hash 則應該加入有效的影像哈希值。 |
false |
textToSpeech.verification.image.arguments |
要搭配test-use docker 映像執行的自變數。 執行 時 helm test ,helm 測試 Pod 會將這些自變數傳遞至容器。 |
"./text-to-speech-client" "--input='What's the weather like'" "--host=$(TEXT_TO_SPEECH_HOST)" "--port=$(TEXT_TO_SPEECH_PORT)" |
語音轉換文字 (子圖表:charts/speechToText)
若要覆寫 「umbrella」 圖表,請在任何參數上新增前置詞 speechToText.
,使其更具體。 例如,它會覆寫對應的參數, speechToText.numberOfConcurrentRequest
例如 會 numberOfConcurrentRequest
覆寫 。
參數 | 描述 | 預設 |
---|---|---|
enabled |
是否啟用語音轉換文字服務。 | false |
numberOfConcurrentRequest |
語音轉換文字服務的並行要求數目。 此圖表會根據此值自動計算 CPU 和記憶體資源。 | 2 |
optimizeForAudioFile |
服務是否需要透過音訊檔案優化音訊輸入。 如果 true 為 ,此圖表將會配置更多CPU資源給服務。 |
false |
image.registry |
語音轉換文字 Docker 映像登錄。 | containerpreview.azurecr.io |
image.repository |
語音轉換文字 Docker 映像存放庫。 | microsoft/cognitive-services-speech-to-text |
image.tag |
語音轉換文字 Docker 映像標籤。 | latest |
image.pullSecrets |
用來提取語音轉換文字 Docker 映像的映像祕密。 | |
image.pullByHash |
Docker 映像是否由哈希提取。 如果需要 true , image.hash 則為 。 |
false |
image.hash |
語音轉換文字 Docker 映像雜湊。 只有在 時 image.pullByHash: true 才會使用。 |
|
image.args.eula (必要) |
表示您已接受授權。 唯一有效的值為 accept |
|
image.args.billing (必要) |
帳單端點 URI 值可在 Azure 入口網站 的 [語音概觀] 頁面上取得。 | |
image.args.apikey (必要) |
用來追蹤帳單資訊。 | |
service.type |
語音轉換文字服務的 Kube 服務類型。 如需詳細資訊並確認雲端提供者支援,請參閱 Kubernetes 服務類型指示。 | LoadBalancer |
service.port |
語音轉換文字服務的連接埠。 | 80 |
service.annotations |
服務中繼資料的語音轉換文字註釋。 註釋是索引鍵值組。 annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
是否 啟用水準 Pod 自動調整程式 。 如果 true 為 , speech-to-text-autoscaler 則會部署在 Kubernetes 叢集中。 |
true |
service.podDisruption.enabled |
是否 啟用Pod中斷預算 。 如果 true 為 , speech-to-text-poddisruptionbudget 則會部署在 Kubernetes 叢集中。 |
true |
情感分析 (子圖表:chart/speechToText)
從 2.2.0 版語音轉換文字容器和 0.2.0 版 Helm 圖表開始,下列參數用於使用語言服務 API 的情感分析。
參數 | 描述 | 值 | 預設 |
---|---|---|---|
textanalytics.enabled |
是否啟用文字分析服務 | true/false | false |
textanalytics.image.registry |
文字分析 docker 映射登錄 | 有效的 Docker 映像登錄 | |
textanalytics.image.repository |
文字分析 Docker 映像存放庫 | 有效的 Docker 映像存放庫 | |
textanalytics.image.tag |
文字分析 Docker 映像標記 | 有效的 Docker 映像標籤 | |
textanalytics.image.pullSecrets |
提取 文字分析 Docker 映射的映像秘密 | 有效的秘密名稱 | |
textanalytics.image.pullByHash |
指定您是否依哈希提取 Docker 映像。 如果 yes 為 , image.hash 則也需要有 。 如果 no 為 ,請將它設定為 『false』。 預設值為 false 。 |
true/false | false |
textanalytics.image.hash |
文字分析 Docker 映像哈希。 請只搭配 image.pullByHash:true 使用。 |
有效的 Docker 映像哈希 | |
textanalytics.image.args.eula |
文字分析容器的必要自變數之一,指出您已接受授權。 此選項的值必須是: accept 。 |
accept ,如果您想要使用容器 |
|
textanalytics.image.args.billing |
文字分析容器的必要自變數之一,指定計費端點 URI。 帳單端點 URI 值可在 Azure 入口網站 的 [語音概觀] 頁面上取得。 | 有效的計費端點 URI | |
textanalytics.image.args.apikey |
文字分析容器的必要自變數之一,用來追蹤帳單資訊。 | 有效的 apikey | |
textanalytics.cpuRequest |
文字分析容器所要求的 CPU | int | 3000m |
textanalytics.cpuLimit |
文字分析容器的有限 CPU | 8000m |
|
textanalytics.memoryRequest |
文字分析容器所要求的記憶體 | 3Gi |
|
textanalytics.memoryLimit |
文字分析容器的記憶體有限 | 8Gi |
|
textanalytics.service.sentimentURISuffix |
情感分析 URI 後綴,整個 URI 的格式為 “http://<service> :<port> /<sentimentURISuffix> ”。 |
text/analytics/v3.0-preview/sentiment |
|
textanalytics.service.type |
Kubernetes 中的文字分析服務類型。 請參閱 Kubernetes 服務類型 | 有效的 Kubernetes 服務類型 | LoadBalancer |
textanalytics.service.port |
文字分析服務的埠 | int | 50085 |
textanalytics.service.annotations |
用戶可以新增至 文字分析服務元數據的 批註。 例如: 註解: some/annotation1:value1 some/annotation2:value2 |
註釋,每一行各一個批註一個 | |
textanalytics.serivce.autoScaler.enabled |
是否 啟用水準 Pod 自動調整程式 。 如果已啟用, text-analytics-autoscaler 則會部署在 Kubernetes 叢集中 |
true/false | true |
textanalytics.service.podDisruption.enabled |
是否 啟用Pod中斷預算 。 如果已啟用, text-analytics-poddisruptionbudget 則會部署在 Kubernetes 叢集中 |
true/false | true |
文字轉換語音 (子圖表:charts/textToSpeech)
若要覆寫 「umbrella」 圖表,請在任何參數上新增前置詞 textToSpeech.
,使其更具體。 例如,它會覆寫對應的參數, textToSpeech.numberOfConcurrentRequest
例如 會 numberOfConcurrentRequest
覆寫 。
參數 | 描述 | 預設 |
---|---|---|
enabled |
是否啟用文字轉換語音服務。 | false |
numberOfConcurrentRequest |
文字轉換語音服務的並行要求數目。 此圖表會根據此值自動計算 CPU 和記憶體資源。 | 2 |
optimizeForTurboMode |
服務是否需要透過文本文件優化文字輸入。 如果 true 為 ,此圖表將會配置更多CPU資源給服務。 |
false |
image.registry |
文字轉換語音 Docker 映像登錄。 | containerpreview.azurecr.io |
image.repository |
文字轉換語音 Docker 映像存放庫。 | microsoft/cognitive-services-text-to-speech |
image.tag |
文字轉換語音 Docker 映像標籤。 | latest |
image.pullSecrets |
用來提取文字轉換語音 Docker 映像的映像祕密。 | |
image.pullByHash |
Docker 映像是否由哈希提取。 如果需要 true , image.hash 則為 。 |
false |
image.hash |
文字轉換語音 Docker 映像雜湊。 只有在 時 image.pullByHash: true 才會使用。 |
|
image.args.eula (必要) |
表示您已接受授權。 唯一有效的值為 accept |
|
image.args.billing (必要) |
帳單端點 URI 值可在 Azure 入口網站 的 [語音概觀] 頁面上取得。 | |
image.args.apikey (必要) |
用來追蹤帳單資訊。 | |
service.type |
文字轉換語音服務的 Kube 服務類型。 如需詳細資訊並確認雲端提供者支援,請參閱 Kubernetes 服務類型指示。 | LoadBalancer |
service.port |
文字轉換語音服務的連接埠。 | 80 |
service.annotations |
服務中繼資料的文字轉換語音註釋。 註釋是索引鍵值組。 annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
是否 啟用水準 Pod 自動調整程式 。 如果 true 為 , text-to-speech-autoscaler 則會部署在 Kubernetes 叢集中。 |
true |
service.podDisruption.enabled |
是否 啟用Pod中斷預算 。 如果 true 為 , text-to-speech-poddisruptionbudget 則會部署在 Kubernetes 叢集中。 |
true |
下一步
如需在 Azure Kubernetes Service 中使用 Helm 安裝應用程式的詳細資訊, 請造訪這裡。