👌

VOICEVOXエンジンをGoogle Colabで起動してMacのエディタから使う

2023/08/30に公開

VOICEVOXとは

https://voicevox.hiroshiba.jp/

モチベーション

VOICEVOXはローカルPCのGPU/CPUで音声合成を動かすアーキテクチャになっているがGPU版はmacOSに対応していない。なので他のプラットフォームと比較するとマシン性能が発揮できない[1]

VOICEVOXの全体像は

  1. クロスプラットフォームなElectronアプリ(エディタ)
  2. コアを呼び出すPythonで書かれたWeb API(エンジン)
  3. Rustで書かれたコア

という三層構造になっていて2-3を切り離すことが(やろうと思えば)可能。

参考: https://github.com/VOICEVOX

2-3をColabで起動し1の接続先に変更してmacOSからエディタを使いたい。

免責事項

また

  • 外部プロクシサーバーを使う場合、入力内容が送信される
  • 公開されたVOICEVOXエンジンのAPIがパブリックアクセス可能になる

という懸念もあります

Colabコード

  • T4 GPU
  • ハイメモリ・オフ

のランタイム設定で快適に動作しました(A100, V100に上げると合成速度が上がります)。

import os

os.environ['ENGINE_VERSION'] = "0.15.0-preview.5"
!wget "https://github.com/VOICEVOX/voicevox_engine/releases/download/${ENGINE_VERSION}/voicevox_engine-linux-nvidia-${ENGINE_VERSION}.7z.001"
!7za x -y voicevox_engine-linux-nvidia-${ENGINE_VERSION}.7z.001

プロクシでトンネル接続

VM内の50021ポートをパブリックにアクセスできるようにngrokを通します[2]

同じことが実現できればngrokでなくても可能で、最近はCloudflare Tunnelのがいいかもしれない。

!pip install pyngrok
import os
import subprocess

from pyngrok import ngrok

subprocess.Popen(["./linux-nvidia/run", "--use_gpu"])
port = 50021
public_url = ngrok.connect(port).public_url
print("VOICEVOX_API_BASE={}".format(public_url))

出力にこのようにngrok.ioのサーバーの一時URLが表示されます。

VOICEVOX_API_BASE=https://XXXXXXXXXXXXXXX.ngrok.io

VOICEVOXのエディターのビルド

VOICEVOXエディターの接続先はビルドにローカルに固定されています。[3]

接続先をColabで動いているサーバーに変更するので自分でビルドします。

git clone --depth 1 https://github.com/VOICEVOX/voicevox
cd voicevox
npm install

.env.productionに設定があるので書き換えます。

https://github.com/VOICEVOX/voicevox/blob/main/.env.production

"executionEnabled": false, にするとローカルにあるエンジンのrunコマンド呼び出しを無効にします。

"host": "http://127.0.0.1:50021"の部分を自分のVOICEVOX_API_BASEのURLに置き換えてビルドします。

npm run electron:build
open ./dist_electron/mac/VOICEVOX.app

テスト方法

MacをオフラインにしてVOICEVOXエディター上で接続エラーが発生するかで確認できます。

終了方法

Colabノートブックのセッションを閉じてサーバーにアクセスできなくします。この時点でビルドしたVOICEVOXエディターは動作しなくなります。

脚注
  1. CoreMLサポートのIssueがあります https://github.com/VOICEVOX/voicevox_core/issues/428 ↩︎

  2. https://saturncloud.io/blog/is-there-a-general-way-to-run-web-applications-on-google-colab/ ↩︎

  3. APIの接続先変更のIssue: https://github.com/VOICEVOX/voicevox/issues/220 ↩︎

Discussion