VOICEVOX CORE 0.15.5 を Google Colab で使ってみる
Google Colab上で、VOICEVOX CORE 0.15.x系を用いて合成音声を生成してみます。
ハマった点
- Google ColabランタイムのPythonバージョン(3.10)が、VOICEVOXの要求バージョン(3.11)より低い
- 依存関係を
pip installしようとすると、Colabランタイムの再起動を要求され詰むvenvの仮想環境内で実行させ解決
- VOICEVOX COREが外部ライブラリを読み込む際、存在するファイルが読み込めない旨のエラーが発生
- 外部ライブラリが存在するディレクトリを、
LD_LIBRARY_PATHに追加することで解決
- 外部ライブラリが存在するディレクトリを、
環境
- Python 3.11
- VOICEVOX CORE 0.15.5
VOICEVOXをGPU (CUDA)で実行する場合、Google ColabのランタイムをT4 GPUに変更してください。
Pythonの環境構築
記事執筆時点で、Google ColabのランタイムはPython 3.10ですが、VOICEVOX CORE 0.15.x系はPython 3.11未満の環境をサポートしていないので動作しません。
Google Colabについて詳しくないのですが、aptでPython3.11をインストールし、venv環境に依存関係をインストール、そしてシェル経由でpythonスクリプトを実行させることで、VOICEVOX CORE 0.15.x系が正常に動作しました。
# Python 3.11 をインストール !apt update > /dev/null 2>&1 !apt install -y python3.11 python3.11-venv > /dev/null 2>&1 # デフォルトの Python のバージョンを 3.11 に設定 !update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 !update-alternatives --config python3 # pip と venv(3.11) をインストール !apt install -y python3-pip > /dev/null 2>&1
次に、venvで仮想環境を作成します。
!python3 -m venv /content/venv
ちなみに、Jupyter Notebookでは、シェルのセッションごとにvenv環境をアクティベートする必要があるようです。
%%bashを用いて、単一のBashセッション内の先頭でアクティベートするか
%%bash source /content/venv/bin/activate pip --version # 仮想環境の pip が呼び出される pip list # 仮想環境にインストールされたパッケージが表示される
このように、!でBashコマンドを実行するたびにアクティベートする必要があります。
! pip --version # ホスト環境の pip が呼び出される ! source /content/venv/bin/activate; \ pip --version # 仮想環境の pip が呼び出される ! source /content/venv/bin/activate; \ pip list # 仮想環境にインストールされたパッケージが表示される
依存関係のインストール
pip
pipで、Wheel形式のVOICEVOXライブラリをインストールします。詳細は、Github のリリースページを参照してください。
# CPU 版(デフォルト)を使用する場合
! source /content/venv/bin/activate; \
pip install https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.5/voicevox_core-0.15.5+cpu-cp38-abi3-linux_x86_64.whl
# GPU (CUDA) 版を使用する場合
# `nvidia-cuda-runtime-cu11` パッケージも必要
! source /content/venv/bin/activate; \
pip install nvidia-cuda-runtime-cu11 \
https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.5/voicevox_core-0.15.5+cuda-cp38-abi3-linux_x86_64.whl
その他
VOICEVOXプロジェクトが用意しているダウンロードスクリプトを用いて、Open JTalkなどの外部ライブラリを取得します。CUDA版を使用する場合は、--deviceオプションにcudaを指定してください。
Open JTalkは、SourceForgeのJAISTミラーサーバから取得されますが、Google Colab環境だとダウンロード速度が遅くなってしまいます。
ホスト名を jaist.dl.sourceforge.net から downloads.sourceforge.net に置き換えることで、ダウンロード速度が改善します。
# GPU (CUDA) 版を使用する場合、`--device cpu` を `--device cuda` に修正してください
! source /content/venv/bin/activate; \
curl -sL https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.5/download.sh \
| sed 's/jaist\.dl/downloads/g' \
| bash -s -- --device cpu
ライブラリの読み込み
from voicevox_core import VoicevoxCoreのようにVoicevoxCoreをロードすると、依存ライブラリが存在するにもかかわらず、以下のようなエラーが発生しました。
OSError: libcublas.so.11: cannot open shared object file voicevox
これは、ダウンロードスクリプトで取得した依存ライブラリ(*.so.*ファイル)が見つからないというエラーです。
解決方法は、LD_LIBRARY_PATHに依存ライブラリが存在するパスを追加するだけです。
%env LD_LIBRARY_PATH=/content/voicevox_core/:{os.environ['LD_LIBRARY_PATH']}
読み込みテスト
事前に、/content/voicevox_coreディレクトリに移動しておいてください。
%cd /content/voicevox_core
VOICEVOXのスピーカーIDなどを確認できる、METASを表示するスクリプトを実行してみます。
%%bash
source /content/venv/bin/activate
# スクリプトをヒアドキュメントとして実行
python3 << EOF
from pathlib import Path
from pprint import pprint
from voicevox_core import VoicevoxCore, METAS
# VOICEVOX CORE を読み込んでみる
core = VoicevoxCore(open_jtalk_dict_dir=Path('open_jtalk_dic_utf_8-1.11'))
# METAS 情報を出力してみる
pprint(METAS)
EOF
METAS情報が出力されれば、正常に動作しています。
合成音声を生成
事前に、/content/voicevox_coreディレクトリに移動しておいてください。
%cd /content/voicevox_core
VOICEVOXプロジェクトが用意しているCLIスクリプトを用いて、任意の文字列を読み上げさせてみましょう。
まず、スクリプトをダウンロードしexample-pyo3.py というファイル名で保存します。
!wget --show-progress -qO example-pyo3.py https://github.com/VOICEVOX/voicevox_core/raw/refs/tags/0.15.5/example/pyo3/run.py
そして、(venv環境で)スクリプトを実行します。
--mode オプションは、環境にあわせて CPU か GPU を指定してください。
! source /content/venv/bin/activate; \ python3 example-pyo3.py --mode GPU ./open_jtalk_dic_utf_8-1.11 "ここに、読み上げる文字列を入力してください。" ./output.wav
これで、output.wav というファイル名の合成音声が出力されました。