webアプリにvoicevox_coreによる音声合成を組み込んでサービスを開発したかったため、現実的な速度で合成できるか、速度を計測した。
実行時間の測定
以下のような main.py
を実行し、速度を計測した。
main.py
from pathlib import Path
from voicevox_core import VoicevoxCore
import time
core = VoicevoxCore(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
speaker_id = 1 #ずんだもん
text = "こんにちは、これはテストなのだ。"
core.load_model(speaker_id) # 指定したidのモデルを読み込む
start = time.time()
for i in range(100): # 実行回数をここで調整
wave_bytes = core.tts(text, speaker_id) # 音声合成を行う
end = time.time()
print("time:", end - start) # 実行時間を出力
with open("test_zundamon.wav", "wb") as f:
f.write(wave_bytes) # ファイルに書き出す
環境ごとの実行時間の比較
各環境で以下の結果を得た。
- m1 mac book air でCPU推論:
100回の合成で76秒程度 => 1.3 回/秒 程度の推論速度 - racknerdの格安VPSでCPU推論:
10回の合成で100秒程度 => 0.1 回/秒 程度の推論速度 - runpodで借りたA4000インスタンスでGPU推論:
100回の合成で3秒程度 => 33 回/秒 程度の推論速度
voicevoxを用いたアプリのホスティング手段の検討
voicevoxによる音声合成を機能として組み込んだwebアプリの実現可能性について検討する。
- 格安サーバーレベルの貧弱なcpuでは1回の生成に10秒程度かかり、実用的な推論速度を得ることができているとは言い難い。
- m1 mac book air レベルの高性能CPUを用いた場合、アクセス数の規模が非常に小さい場合(同接20人程度でそれぞれが20秒に1回リクエストする程度)、低速とはいえ現実的な実行速度を出すことができそうだった。高性能CPUを複数台組み合わせるなどで現実的なアプリケーション開発ができる可能性がある。
- 高性能GPUを用いた場合、飛躍的に推論速度が上昇した。gpuインスタンス1台でも、アクセス数の規模が小さければ(例えば同接500人程度でそれぞれが20秒に1回リクエストする程度)十分な実用性でアプリ開発ができそうである。複数台組み合わせることでよりスケールを上げることも考えられる
GPUサーバーのコストについて
runpodでの最安で借りられるA4000のspotインスタンスでの料金が$0.16/hour
= $115/month
である。
つまり1年借りると20万円程度の出費となる。
A4000の購入価格は12万円であり、他の諸々のパーツを含めても20万円くらいでサーバーPCが組める。これを考えると1年以上運用するつもりならA4000なりもっとコストの低いGPUを購入し、自宅サーバーで運用した方が圧倒的にコストカットが計れる可能性がある。
まとめ、今後の展望
まとめ
- voicevox_coreを用いた音声推論をubuntuサーバーで行なった
- 推論速度は格安サーバーでは遅く、現実的なものではなかった
- GPUサーバーでは高速な推論が可能であったがコストがボトルネックになっている
今後の展望
- コスト、推論速度の按配を見て、格安、低品質なGPUサーバー、あるいは高品質なCPUサーバーの調査を行いたい
- 場合によってはサーバーPCを作成し自宅で管理することも考慮する
追記: GPUごとのVOICEVOXの音声合成速度リスト
すでにGPUごとに速度を計測、比較してらっしゃる方がいた。