自宅のローカルネットワーク上にて汎用サーバーやビルドマシンとして使っているMac miniに、VOICEVOX Engineの音声合成サーバーを立ててみたので、その時の手順をまとめました。
経緯
最近、ChatGPT周りのAPIを触っていたら、文章の読み上げをしたくなってきました。もともとVOICEVOXが良さそうなことを聞いていたので利用してみることにしました。
まず、VOICEVOXを利用する上で、自分のニーズは以下でした。
- 細かいクエリ調整は一旦置いておいて、趣味で作る各種アプリとかで簡易的な読み上げを行いたい
- 最近ずんだもんをYouTubeでよく見る。かわいい。ずんだもんにしゃべらせたい
また、いくつか試している中でパフォーマンス的な問題もでました
- いつもの作業用PCはMacBook ProなのでVOICEVOXをGPU版で起動できず、音声合成にかかる時間が結構厳しい
- DockerでEngineを立ち上げると、結構オーバーヘッドがありパフォーマンスが厳しい(PCのスペックもある)
最初は、docker composeですぐにできるかな?と思ったのですが、処理速度の点で問題があり、以下のビルド済みVOICEVOX Engine単体で起動する方針に切り替えました。
ということで、最終的な要件として以下を目指しています。
- 自宅のMac miniにローカルネットワークで常時利用できる音声合成サーバを立てる
- 音声合成にはVOICEVOXを利用するが、VOICEVOX EngineだけでEditorのGUIは不要
- できるだけパフォーマンスがでる構成にする
- 自動起動設定など基本的にはメンテしなくてもいいようにする
手順
以下、環境構築手順です。
VOICEVOX EngineのDLと展開
ビルド済みアーカイブをダウンロードします(WebブラウザからDLでも問題ありません)。
$ wget https://github.com/VOICEVOX/voicevox_engine/releases/download/0.14.2/voicevox_engine-macos-x64-0.14.2.7z.001
ビルドは7zipでアーカイブされているため、7zipコマンドがinstallされていない場合は以下でinstallします。
$ brew install p7zip
アーカイブを展開します。
$ 7z x voicevox_engine-macos-x64-0.14.2.7z.001
# 展開終わったら削除
$ rm voicevox_engine-macos-x64-0.14.2.7z.001
起動〜起動チェック
展開されたmacos-x64フォルダ内のrunファイルを実行すれば、サーバーが起動するのですが、展開した直後では実行パーミッションがついていませんでした。
$ cd macos-x64 # 展開されたディレクトリ
$ ls -l run
-rw-r--r-- 1 mikito staff 7119520 2 4 11:54 run
実行パーミッションを付与します.
chmod 755 run
これで実行できるようになったため、ヘルプを表示してみます。
$ ./run --help
usage: run [-h] [--host HOST] [--port PORT] [--use_gpu] [--voicevox_dir VOICEVOX_DIR] [--voicelib_dir VOICELIB_DIR]
[--runtime_dir RUNTIME_DIR] [--enable_mock] [--enable_cancellable_synthesis] [--init_processes INIT_PROCESSES]
[--load_all_models] [--cpu_num_threads CPU_NUM_THREADS] [--output_log_utf8]
[--cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}] [--allow_origin [ALLOW_ORIGIN [ALLOW_ORIGIN ...]]]
[--setting_file SETTING_FILE]
VOICEVOX のエンジンです。
optional arguments:
-h, --help show this help message and exit
--host HOST 接続を受け付けるホストアドレスです。
--port PORT 接続を受け付けるポート番号です。
--use_gpu 指定するとGPUを使って音声合成するようになります。
--voicevox_dir VOICEVOX_DIR
VOICEVOXのディレクトリパスです。
--voicelib_dir VOICELIB_DIR
VOICEVOX COREのディレクトリパスです。
--runtime_dir RUNTIME_DIR
VOICEVOX COREで使用するライブラリのディレクトリパスです。
--enable_mock 指定するとVOICEVOX COREを使わずモックで音声合成を行います。
--enable_cancellable_synthesis
指定すると音声合成を途中でキャンセルできるようになります。
--init_processes INIT_PROCESSES
--load_all_models 指定すると起動時に全ての音声合成モデルを読み込みます。
--cpu_num_threads CPU_NUM_THREADS
音声合成を行うスレッド数です。指定しないと、代わりに環境変数VV_CPU_NUM_THREADSの値が使われます。VV_CPU_NUM_THREADSが空文字列でなく数値でもない場合はエラー終了します。
--output_log_utf8 指定するとログ出力をUTF-8でおこないます。指定しないと、代わりに環境変数 VV_OUTPUT_LOG_UTF8 の値が使われます。VV_OUTPUT_LOG_UTF8
の値が1の場合はUTF-8で、0または空文字、値がない場合は環境によって自動的に決定されます。
--cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}
CORSの許可モード。allまたはlocalappsが指定できます。allはすべてを許可します。localappsはオリジン間リソース共有ポリシーを、app://.とlocalhost関連に限定します。その他のオリジンはal
low_originオプションで追加できます。デフォルトはlocalapps。
--allow_origin [ALLOW_ORIGIN [ALLOW_ORIGIN ...]]
許可するオリジンを指定します。スペースで区切ることで複数指定できます。
--setting_file SETTING_FILE
設定ファイルを指定できます。
実際に起動してみます。
$ ./run
しばらくすると、VOICEVOX Engineのサーバーが立ち上がるため、以下にアクセスしてみます。APIのリファレンスが表示されればOKです。
http://localhost:50021/docs
ちなみにですが、VOICEVOX Engineが立ち上がっているマシン外からアクセスする場合は、以下のようにhostオプションに立ち上げているPCのIPアドレスを渡す必要があります(リバプロなどしない場合)。うちではこのPC(Mac mini)には固定IPを振ってます。
$ ./run --host 192.168.xxx.xxx
自動起動の設定
起動チェックができたら、一度サーバーを終了して、LaunchAgentsでの自動起動設定をしておきます。
以下のディレクトリに、以下の名称のplistファイルを作ります。
~/Library/LaunchAgents/jp.hiroshiba.voicevox-engine.plist
内容は以下のようにし、[PATH_TO_VOCEVOX_ENGINE]と[HOST_IP_ADDRESS]は適宜置き換えてください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>jp.hiroshiba.voicevox-engine.plist</string>
<key>ProgramArguments</key>
<array>
<string>[PATH_TO_VOCEVOX_ENGINE]macos-x64/run</string>
<string>--host</string>
<string>[HOST_IP_ADDRESS]</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
以下で起動設定します。
$ launchctl load ~/Library/LaunchAgents/jp.hiroshiba.voicevox-engine.plist
以下のようにプロセスが立ち上がっていればOKです。
$ launchctl list | grep jp.hiroshiba.voicevox-engine.plist
27243 0 jp.hiroshiba.voicevox.plist
なお、サーバーを停止したい場合、自動起動を止めたい場合は以下です。
# 停止したい場合
$ launchctl stop jp.hiroshiba.voicevox-engine.plist
# 自動起動を止める場合
$ launchctl unload ~/Library/LaunchAgents/jp.hiroshiba.voicevox-engine.plist
あとがき
これで、自宅ネットワーク内で利用できる音声合成サーバーを立てることができました。各種アプリケーションから連携して、簡易的な読み上げ等であれば色々活用できそうです。VOICEVOX素晴らしいソフトウェアです、開発者の皆様ありがとうございます。そして、ずんだもんかわいいです。
今回は自宅の都合でMac mini上にVOICEVOX Engineのサーバーを構築だったので少しニッチかもしれません。WindowsやGPUを活用できる環境であれば、Dockerで立ち上げるのが一番早いかもです。
最近ジェネレーティブなAIモデルが色々出ていて、学習だけでなくて推論にも計算リソースが必要になってきているので、なんやかんやで自宅内にGPUサーバー欲しくなりますね...