次の方法で共有


Kubernetes および Helm と共に Speech サービス コンテナーを使用する

オンプレミスの音声コンテナーを管理するための 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.numberOfConcurrentRequestnumberOfConcurrentRequest を上書きするように、対応するパラメーターを上書きします。

パラメーター 説明 既定値
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.numberOfConcurrentRequestnumberOfConcurrentRequest を上書きするように、対応するパラメーターを上書きします。

パラメーター 説明 既定値
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 を使用したアプリケーションのインストールの詳細については 、こちらを参照してください