VOICEVOXエンジンをGoogle Colabで起動してMacのエディタから使う
VOICEVOXとは
モチベーション
VOICEVOXはローカルPCのGPU/CPUで音声合成を動かすアーキテクチャになっているがGPU版はmacOSに対応していない。なので他のプラットフォームと比較するとマシン性能が発揮できない[1]。
VOICEVOXの全体像は
- クロスプラットフォームなElectronアプリ(エディタ)
- コアを呼び出すPythonで書かれたWeb API(エンジン)
- Rustで書かれたコア
という三層構造になっていて2-3を切り離すことが(やろうと思えば)可能。
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に設定があるので書き換えます。
"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エディターは動作しなくなります。
-
CoreMLサポートのIssueがあります https://github.com/VOICEVOX/voicevox_core/issues/428 ↩︎
-
APIの接続先変更のIssue: https://github.com/VOICEVOX/voicevox/issues/220 ↩︎
Discussion