Kubernetes および Helm と共に Speech サービス コンテナーを使用する
オンプレミスの音声コンテナーを管理するための 1 つの方法は、Kubernetes と Helm を使用することです。 Kubernetes と Helm を使って音声テキスト変換とテキスト読み上げのコンテナー イメージを定義し、Kubernetes パッケージを作成します。 このパッケージは、オンプレミスの Kubernetes クラスターにデプロイされます。 最後に、デプロイされたサービスをテストする方法と、さまざまな構成オプションについて調べます。 Kubernetes オーケストレーションを使用せずに、Docker コンテナーを実行する方法の詳細については、「Speech サービス コンテナーをインストールして実行する」を参照してください。
前提条件
オンプレミスの Speech コンテナーを使用する前の前提条件は次のとおりです。
必須 | 目的 |
---|---|
Azure アカウント | Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。 |
コンテナー レジストリのアクセス | Kubernetes でクラスターに Docker イメージをプルするには、コンテナー レジストリにアクセスする必要があります。 |
Kubernetes CLI | コンテナー レジストリからの共有資格情報を管理するには、Kubernetes CLI が必要です。 また、Kubernetes は、Kubernetes のパッケージ マネージャーである Helm の前に必要です。 |
Helm CLI | Helm Chart (コンテナー パッケージ定義) のインストールに使用される Helm CLI をインストールします。 |
Speech リソース | これらのコンテナーを使用するためには、以下が必要です。 関連付けられている課金キーと課金エンドポイント URI を取得するための Speech Azure リソース。 これらの値は、どちらも Azure portal の Speech の [概要] ページと [キー] ページで入手でき、コンテナーを起動するために必要です。 {API_KEY} : リソース キー {ENDPOINT_URI} : エンドポイント URI の例: https://eastus.api.cognitive.microsoft.com/sts/v1.0 |
推奨されるホスト コンピューターの構成
詳しくは、Speech サービスのコンテナー ホスト コンピューターに関する記事をご覧ください。 この "Helm チャート" では、ユーザーが指定しているデコードの数 (同時要求数) に基づいて、CPU とメモリの要件が自動的に計算されます。 さらに、オーディオ/テキスト入力の最適化が enabled
として構成されているかどうかに基づいて調整されます。 Helm チャートの既定値では、同時要求の数は 2、最適化は無効です。
サービス | CPU/コンテナー | メモリ/コンテナー |
---|---|---|
音声テキスト変換 | 1 つのデコーダーで、1,150 ミリコア以上が必要です。 optimizedForAudioFile が有効になっている場合は、1,950 ミリコアが必要です。 (既定値: 2 つのデコーダー) |
必須: 2 GB 上限: 4 GB |
テキスト読み上げ | 1 つの同時要求で、500 ミリコア以上が必要です。 optimizeForTurboMode が有効になっている場合は、1,000 ミリコアが必要です。 (既定値: 2 つの同時要求) |
必須: 1 GB 上限: 2 GB |
Kubernetes クラスターに接続する
ホスト コンピューターには使用可能な Kubernetes クラスターがあることが想定されます。 ホスト コンピューターへの Kubernetes クラスターの展開方法の概念を理解するには、Kubernetes クラスターの展開に関するこのチュートリアルをご覧ください。
展開に対する Helm チャートの値を構成する
Microsoft によって提供されているすべてのパブリックに使用可能な Helm チャートについては、Microsoft Helm Hub をご覧ください。 Microsoft Helm Hub で、Azure AI 音声オンプレミス グラフを探します。 Azure AI 音声オンプレミス グラフをインストールしますが、最初に明示的な構成で config-values.yaml
ファイルを作成する必要があります。 最初に、Helm インスタンスに Microsoft リポジトリを追加しましょう。
helm repo add microsoft https://microsoft.github.io/charts/repo
次に、Helm グラフの値を構成します。 次の YAML をコピーし、config-values.yaml
という名前のファイルに貼り付けます。 Azure AI 音声オンプレミス Helm chart のカスタマイズについて詳しくは、「Helm chart をカスタマイズする」をご覧ください。 # {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 リソースのセットが記述されているファイルのコレクションです。 1 つのチャートを使って、memcached ポッドのような単純なものや、HTTP サーバー、データベース、キャッシュなどを含む完全な Web アプリ スタックのような複雑なものを、展開できます。
提供されている "Helm Chart" では、テキスト読み上げサービスと音声テキスト変換サービス両方の音声サービスの Docker イメージが、mcr.microsoft.com
コンテナー レジストリからプルされます。
Kubernetes クラスターに Helm チャートをインストールする
Helm グラフをインストールするには、helm install
コマンドを実行し、<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 の展開が完了するには数分かかります。 ポッドとサービスの両方が適切に展開されて使用可能なことを確認するには、次のコマンドを実行します。
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 test コマンドを実行します。
helm test onprem-speech
重要
ポッドの状態が Running
でない場合、または展開が AVAILABLE
列に表示されない場合、これらのテストは失敗します。 これが完了するには 10 分以上かかるのでお待ちください。
これらのテストでは、さまざまな状態の結果が出力されます。
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 テスト" を実行する代わりに、kubectl get all
コマンドから "外部 IP" アドレスおよび対応するポートを収集することもできます。 IP とポートを使用して、Web ブラウザーを開き、http://<external-ip>:<port>:/swagger/index.html
に移動して、API Swagger ページを表示します。
Helm チャートをカスタマイズする
Helm チャートは階層的です。 階層的であるためチャートを継承できます。また、特異性の概念に対応するので、継承された規則はいっそう固有の設定によってオーバーライドされます。
音声 (アンブレラ チャート)
最上位レベル「アンブレラ」チャートの値は、対応するサブチャートの値を上書きします。 そのため、オンプレミスでカスタマイズされたすべての値をここで追加する必要があります。
パラメーター | 説明 | Default |
---|---|---|
speechToText.enabled |
音声テキスト変換サービスが有効かどうか。 | true |
speechToText.verification.enabled |
音声テキスト変換サービス用の helm test 機能が有効かどうか。 |
true |
speechToText.verification.image.registry |
helm test が音声テキスト変換サービスをテストするために使用する Docker イメージ リポジトリ。 helm は、テストおよびこのレジストリから test-use イメージをプルするため、クラスター内に個別のポッドを作成します。 |
docker.io |
speechToText.verification.image.repository |
helm test が音声テキスト変換サービスをテストするために使用する Docker イメージ リポジトリ。 helm テスト ポッドは、test-use イメージをプルするため、このリポジトリを使用します。 |
antsu/on-prem-client |
speechToText.verification.image.tag |
音声テキスト変換サービスで helm test とともに使用される Docker イメージ タグ。 helm テスト ポッドは、test-use イメージをプルするため、このタグを使用します。 |
latest |
speechToText.verification.image.pullByHash |
test-use Docker イメージをハッシュでプルするかどうか。 true の場合、speechToText.verification.image.hash を有効なイメージ ハッシュ値とともに追加する必要があります。 |
false |
speechToText.verification.image.arguments |
test-use Docker イメージを実行するために使用される引数。 helm テスト ポッドは、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 は、テストおよびこのレジストリから test-use イメージをプルするため、クラスター内に個別のポッドを作成します。 |
docker.io |
textToSpeech.verification.image.repository |
helm test が音声テキスト変換サービスをテストするために使用する Docker イメージ リポジトリ。 helm テスト ポッドは、test-use イメージをプルするため、このリポジトリを使用します。 |
antsu/on-prem-client |
textToSpeech.verification.image.tag |
音声テキスト変換サービスで helm test とともに使用される Docker イメージ タグ。 helm テスト ポッドは、test-use イメージをプルするため、このタグを使用します。 |
latest |
textToSpeech.verification.image.pullByHash |
test-use Docker イメージをハッシュでプルするかどうか。 true の場合、textToSpeech.verification.image.hash を有効なイメージ ハッシュ値とともに追加する必要があります。 |
false |
textToSpeech.verification.image.arguments |
test-use Docker イメージを実行する引数。 helm テスト ポッドは、helm test を実行するときにコンテナーにこれらの引数を渡します。 |
"./text-to-speech-client" "--input='What's the weather like'" "--host=$(TEXT_TO_SPEECH_HOST)" "--port=$(TEXT_TO_SPEECH_PORT)" |
音声テキスト変換 (サブチャート: charts/speechToText)
「アンブレラ」チャートを上書きするには、任意のパラメーターに speechToText.
プレフィックスを追加して限定します。 たとえば、speechToText.numberOfConcurrentRequest
が numberOfConcurrentRequest
を上書きするように、対応するパラメーターを上書きします。
パラメーター | 説明 | Default |
---|---|---|
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 portal の Speech の [概要] ページで入手できます。 | |
image.args.apikey (必須) |
課金情報の追跡に使用されます。 | |
service.type |
音声テキスト変換サービスの Kubernetes サービスの種類。 詳細およびクラウド プロバイダーのサポートの検証については、Kubernetes サービスの種類の手順に関する記事を参照してください。 | LoadBalancer |
service.port |
音声テキスト変換サービスのポート。 | 80 |
service.annotations |
サービス メタデータに使用される音声変換の注釈。 注釈は、キーと値のペアになっています。 annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
ポッドの水平オートスケーラーが有効かどうか。 true の場合、speech-to-text-autoscaler が Kubernetes クラスターにデプロイされます。 |
true |
service.podDisruption.enabled |
ポッド中断バジェットが有効かどうか。 true の場合、speech-to-text-poddisruptionbudget が Kubernetes クラスターにデプロイされます。 |
true |
センチメント分析 (サブチャート: charts/speechToText)
音声テキスト変換コンテナー v2.2.0 および Helm Chart v0.2.0 以降、Language service API を使用した感情分析には、次のパラメーターが使用されています。
パラメーター | 説明 | 値 | Default |
---|---|---|---|
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 |
テキスト分析コンテナーによって要求された引数の 1 つ。ライセンスに同意したことを示します。 このオプションの値は accept である必要があります。 |
コンテナーを使用する場合は、accept にします |
|
textanalytics.image.args.billing |
テキスト分析コンテナーによって要求された引数の 1 つ。課金エンドポイント URI を指定します。 課金エンドポイント URI の値は、Azure portal の Speech の [概要] ページで入手できます。 | 有効な課金エンドポイント URI | |
textanalytics.image.args.apikey |
テキスト分析コンテナーによって要求される引数の 1 つ。課金情報を追跡するために使用されます。 | 有効な 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 |
注釈 (各行に 1 つ) | |
textanalytics.serivce.autoScaler.enabled |
ポッドの水平オートスケーラーが有効かどうか。 有効の場合、text-analytics-autoscaler が Kubernetes クラスターにデプロイされます |
true/false | true |
textanalytics.service.podDisruption.enabled |
ポッド中断バジェットが有効かどうか。 有効の場合、text-analytics-poddisruptionbudget が Kubernetes クラスターにデプロイされます |
true/false | true |
テキスト読み上げ (サブチャート: charts/textToSpeech)
「アンブレラ」チャートを上書きするには、任意のパラメーターに textToSpeech.
プレフィックスを追加して限定します。 たとえば、textToSpeech.numberOfConcurrentRequest
が numberOfConcurrentRequest
を上書きするように、対応するパラメーターを上書きします。
パラメーター | 説明 | Default |
---|---|---|
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 portal の Speech の [概要] ページで入手できます。 | |
image.args.apikey (必須) |
課金情報の追跡に使用されます。 | |
service.type |
テキスト読み上げサービスの Kubernetes サービスの種類。 詳細およびクラウド プロバイダーのサポートの検証については、Kubernetes サービスの種類の手順に関する記事を参照してください。 | LoadBalancer |
service.port |
テキスト読み上げサービスのポート。 | 80 |
service.annotations |
サービス メタデータに使用されるテキスト読み上げの注釈。 注釈は、キーと値のペアになっています。 annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
ポッドの水平オートスケーラーが有効かどうか。 true の場合、text-to-speech-autoscaler が Kubernetes クラスターにデプロイされます。 |
true |
service.podDisruption.enabled |
ポッド中断バジェットが有効かどうか。 true の場合、text-to-speech-poddisruptionbudget が Kubernetes クラスターにデプロイされます。 |
true |
次のステップ
Azure Kubernetes Service (AKS) での Helm を使用したアプリケーションのインストールについて詳しくは、こちらをご覧ください。