kazeno memo

メモとか

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は、SourceForgeJAISTミラーサーバから取得されますが、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 オプションは、環境にあわせて CPUGPU を指定してください。

! source /content/venv/bin/activate; \
  python3 example-pyo3.py --mode GPU ./open_jtalk_dic_utf_8-1.11 "ここに、読み上げる文字列を入力してください。" ./output.wav

これで、output.wav というファイル名の合成音声が出力されました。