🥂

サーバーレスVOICEVOX:Cloud Runのサイドカー構成で実現する高性能音声合成

2024/08/23に公開

概要

今回は、人気の音声合成エンジン「VOICEVOX」をCloud Runで動かす方法について紹介します。特に、サイドカー構成を使用してVOICEVOXエンジンとアプリケーションを同時に稼働させる方法に焦点を当てます。
デモ(コールドスタートの影響でロードに時間がかかります): https://cloudrun-voicevox-53ghjmkapa-an.a.run.app/
リポジトリはこちら: https://github.com/urth-inc/cloudrun_voicevox

VOICEVOXとは?

VOICEVOXは、オープンソースの音声合成ソフトウェアです。高品質な音声を合成でき、様々なキャラクターボイスを提供しています。
WebAPIとして実装されている、VOICEVOXのエンジンはDockerイメージでも提供されているので、今回はこちらをCloud Runへデプロイしてみます。

サイドカー構成とは?

サイドカー構成は、メインのアプリケーションコンテナと補助的な機能を提供するコンテナを一緒に動かす方法です。今回の場合、Node.jsアプリケーションとVOICEVOXエンジンを別々のコンテナで動かし、アプリケーションからVOICEVOXエンジンのAPIをコールして音声合成します。

Google Cloudの解説:https://cloud.google.com/blog/ja/products/serverless/cloud-run-now-supports-multi-container-deployments

実装

アプリケーションについて

喋らせたい文言を入力して、キャラクターを選択し、音声生成ボタンを押すと数秒後に音声が生成されます。
LLMの力を借りてNode.jsで構築しました。

Cloud Runの構成

Cloud Run用の設定ファイル(service.yaml)は以下のようになっています。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: ${SERVICE_NAME}
  annotations:
    run.googleapis.com/launch-stage: BETA
spec:
  template:
    metadata:
      annotations:
        run.googleapis.com/container-dependencies: "{app:[voicevox]}"
    spec:
      containers:
        - image: ${REGION}-docker.pkg.dev/urth-toy/cloudrun-voicevox/app
          name: app
          ports:
            - containerPort: 3000
          env:
            - name: "VOICEVOX_URL"
              value: "http://localhost:50021"
        - image: voicevox/voicevox_engine:cpu-ubuntu20.04-latest
          name: voicevox
          startupProbe:
            initialDelaySeconds: 3
            periodSeconds: 60
            failureThreshold: 5
            httpGet:
              path: /
              port: 50021

特筆すべきは、containersで複数コンテナの定義をしているところで、この様に書くことでサイドカー構成でデプロイできます。またヘルスチェックなど、依存関係があるコンテナを正常に起動するための機能もあります。

あとは以下のgcloudコマンドでデプロイできます。

gcloud run services replace service.yaml

サイドカー構成でのデプロイに関しては、Google Cloud公式のドキュメントに詳しく書いてありあます。

スペック

service.yaml で特にスペックを指定していませんが、デフォルトで

  • app: 1CPU, 512MiB
  • VOICEVOX: 1CPU, 256MiB

でデプロイされていました。
こんな貧弱なインスタンスで音声合成できるなんて、VOICEVOX恐るべしですね!

まとめ

サービスとして提供する場合には利用規約や認証などに気をつける必要がありますが、CloudRunでサクッと音声合成ができるので活用の幅が広がりますね!
また、サイドカー構成で複数のコンテナをまとめてデプロイできるので、アプリケーションの構築・管理が非常に楽になりました。ぜひ皆様もお試しください。

Urth

Discussion