オンプレミスの音声コンテナーを管理するための 1 つの方法は、Kubernetes と Helm を使用することです。 Kubernetes と Helm を使って音声テキスト変換とテキスト読み上げのコンテナー イメージを定義し、Kubernetes パッケージを作成します。 このパッケージは、オンプレミスの Kubernetes クラスターにデプロイされます。 最後に、デプロイされたサービスをテストする方法と、さまざまな構成オプションについて調べます。 Kubernetes オーケストレーションを使用せずに Docker コンテナーを実行する方法の詳細については、「 Speech Service コンテナーのインストールと実行」を参照してください。
前提条件
オンプレミスの Speech コンテナーを使用する前の前提条件は次のとおりです。
必須 | 目的 |
---|---|
Azure アカウント | Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。 |
コンテナー レジストリのアクセス | Kubernetes でクラスターに Docker イメージをプルするには、コンテナー レジストリにアクセスする必要があります。 |
Kubernetes CLI | コンテナー レジストリから共有資格情報を管理するために 、Kubernetes CLI が必要です。 また、Kubernetes は、Kubernetes のパッケージ マネージャーである Helm の前に必要です。 |
Helm CLI | Helm CLI をインストールします。Helm チャート (コンテナー パッケージ定義) のインストールに使用されます。 |
Speech リソース | これらのコンテナーを使用するためには、以下が必要です。 関連付けられている課金キーと課金エンドポイント URI を取得する Speech Azure リソース。 どちらの値も Azure portal の Speech の [概要] ページと [キー] ページで使用でき、コンテナーを起動するために必要です。 {API_KEY}: リソース キー {ENDPOINT_URI}: エンドポイント URI の例は次のとおりです。 https://eastus.api.cognitive.microsoft.com/sts/v1.0 |
推奨されるホスト コンピューターの構成
Speech Service コンテナー のホスト コンピューターの詳細を参照してください。 この 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 Speech On-Premises グラフが表示されます。 Azure AI Speech On-Premises はインストールするグラフですが、最初に明示的な構成でconfig-values.yaml
ファイルを作成する必要があります。 最初に、Helm インスタンスに Microsoft リポジトリを追加しましょう。
helm repo add microsoft https://microsoft.github.io/charts/repo
次に、Helm グラフの値を構成します。 次の YAML をコピーし、config-values.yaml
という名前のファイルに貼り付けます。 Azure AI Speech On-Premises Helm Chart のカスタマイズの詳細については、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 リソースの関連セットを記述するファイルのコレクションです。 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 テスト コマンドを実行します。
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 チャートは階層的です。 階層的であるためチャートを継承できます。また、特異性の概念に対応するので、継承された規則はいっそう固有の設定によってオーバーライドされます。
音声 (アンブレラ チャート)
最上位レベル「アンブレラ」チャートの値は、対応するサブチャートの値を上書きします。 そのため、オンプレミスでカスタマイズされたすべての値をここで追加する必要があります。
パラメーター | 説明 | 既定値 |
---|---|---|
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 |
テスト用の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 |
テスト用の 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
を上書きするように、対応するパラメーターを上書きします。
パラメーター | 説明 | 既定値 |
---|---|---|
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 |
Pod Disruption Budget が有効化されているかどうか。 true の場合、speech-to-text-poddisruptionbudget が Kubernetes クラスターにデプロイされます。 |
true |
センチメント分析 (サブチャート: charts/speechToText)
音声テキスト変換コンテナー v2.2.0 および Helm Chart v0.2.0 以降、Language service API を使用した感情分析には、次のパラメーターが使用されています。
パラメーター | 説明 | 値 | 既定値 |
---|---|---|---|
textanalytics.enabled |
テキスト分析サービスが有効になっているかどうか | 真/偽 | false |
textanalytics.image.registry |
text-analytics Docker イメージ レジストリ | 有効な Docker イメージ レジストリ | |
textanalytics.image.repository |
text-analytics Docker イメージ リポジトリ | 有効な Docker イメージ リポジトリ | |
textanalytics.image.tag |
text-analytics Docker イメージ タグ | 有効な Docker イメージ タグ | |
textanalytics.image.pullSecrets |
テキスト分析 Docker イメージをプルするためのイメージ シークレット | 有効なシークレット名 | |
textanalytics.image.pullByHash |
ハッシュを使用して Docker イメージをプルするかどうかを指定します。 yes の場合は、image.hash にも必要です。 no の場合は、"false" に設定します。 既定値は false です。 |
真/偽 | false |
textanalytics.image.hash |
テキスト分析 Docker イメージ ハッシュ。 image.pullByHash:true の場合にのみ使用してください。 |
有効な Docker イメージ ハッシュ | |
textanalytics.image.args.eula |
ライセンスを受け入れたことを示す テキスト分析 コンテナーで必要な引数の 1 つ。 このオプションの値は accept である必要があります。 |
コンテナーを使用する場合は、accept にします |
|
textanalytics.image.args.billing |
課金エンドポイント URI を指定する テキスト分析 コンテナーで必要な引数の 1 つ。 課金エンドポイント 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 |
textanalytics.service.podDisruption.enabled |
ポッド中断バジェットが有効かどうか。 有効の場合、text-analytics-poddisruptionbudget が Kubernetes クラスターにデプロイされます |
真/偽 | true |
テキスト読み上げ (サブチャート: charts/textToSpeech)
「アンブレラ」チャートを上書きするには、任意のパラメーターに 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 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 を使用したアプリケーションのインストールの詳細については 、こちらを参照してください。