Remdisの環境構築で沼った話(+使い方の紹介)
はじめに
今回はRemdisというテキスト・音声・マルチモーダル対話システム開発のためのプラットフォームを利用するための環境構築で沼ったことを記事にまとめます。
最終的にはなんとか環境構築に成功したので、同じく沼っている方がいらっしゃれば参考になればと思います。
最後にRemdisを簡単に使ってみたので、その使い方についても紹介します。
Remdisとは
Remdisはテキスト・音声・マルチモーダル対話システム開発のためのプラットフォームです。
詳細は下記のリポジトリをご覧ください。
下記のデモ動画にもありますように、非常に自然かつ低遅延なリアルタイム対話を可能にしているシステムです。
また、こちらのリポジトリを解説されている書籍も販売されております。非常にコードがわかりやすく解説されていますため、Remdisを利用したい方はぜひ購入しましょう。おすすめです。
Pythonと大規模言語モデルで作るリアルタイムマルチモーダル対話システム (エンジニア入門シリーズ128)
環境構築
大前提として私の環境は下記です。
PC:M2 Mac
Dockerのインストール
では実際に下記のリポジトリに従って環境構築をしていきます。
まず、Dockerをインストールしていきます。
Macの場合は下記のコマンドを実行して、インストールされたDocker Desktopを開き、画面の指定に合わせて設定していくだけです。
brew install --cask docker
下記のような手順でDocker Desktopを設定していきます。
(下記の画像は、昔私が個人用にまとめた資料の一部になります)
Dockerの動作確認のため、下記コマンドを実行しましょう。
docker version
下記のような表示になればOKです。
Remdis本体のインストール
続いて指示通りにRemdisをインストールします。
下記のコマンドを実行してください。
git clone https://github.com/remdis/remdis.git
cd remdis
pythonのバージョン設定
続いて、仮装環境上に必要なパッケージをインストールしていきます。
(リポジトリではcondaを利用していますが、私はpyenv+venvの方が好みなため、そちらを使用して環境構築します)
まずは下記のコマンドでpythonのバージョンを指定されている3.11に設定します。
pyenv自体の導入については下記をご覧ください。
pyenvが導入できていれば、下記のコマンドでpythonのバージョンを指定できます。
pyenv install 3.11.9
pyenv local 3.11.9 #もしくはpyenv global 3.11.9
これでpythonのバージョンが指定できます。
pyenv global
はシステム全体に、このバージョンを反映させたい時に利用してください。
pyenv local
は現在のカレントディレクトリでのみ、このバージョンを反映させたい場合に利用します。
下記コマンドを実行して、pythonのバージョンが変更されているかを確認してください。
python -V
# Python 3.11.9
必要なパッケージのインストール
続いて、必要なパッケージをインストールするために仮想環境を構築します
venvで仮想環境を構築します。
venvはpython公式の仮装環境のため、pythonが利用可能であれば導入の必要なく利用できます。
python -m venv env
source env/bin/activate
pip install -r requirements.txt
エラーの発生
pip install -r requirements.txt
上記コマンドを実行するとエラーが発生すると思います。
それではエラーごとに私が実施した解決策を提示します。
PyAudio パッケージインストール時のエラー
申し訳ございません。エラーメッセージを保存していなかったため、どのようなエラーが出たかは覚えていないですが、pip install pyaudio
の時点でエラーが出ました。
(どのタイミングで出てかもわからないため、後述するエラーを解消しても、まだエラーが出る場合などに戻ってきて確認いただけますと幸いです)
下記コマンドを実行することで解消できます(Macの場合です)
brew remove portaudio
pip install pyaudio
下記を参考にしました。
parallel-wavegan インストール時のエラー
File "<string>", line 7, in <module>
ModuleNotFoundError: No module named 'pip'
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
こちらのエラーに関しては、リポジトリにも記載がある方法で一旦エラーの解消ができないか試します。
すなわち下記のコマンドです。
git clone https://github.com/kan-bayashi/ParallelWaveGAN.git
cd ParallelWaveGAN
pip install -e .
しかし上記のコマンドを実行しても、同様のエラーが発生してしまいます。
そこで下記を実行しました。
python setup.py develop
こちらはchatGPTを参考にして解決しました。
pip install -e .
とpython setup.py develop
に関してはほぼ同様の結果が得られるそうです。
すると下記のような形でインストールすることができました
Using /Users/xxx/remdis/ParallelWaveGAN/.eggs/numpy-2.0.0-py3.11-macosx-14.5-arm64.egg
Finished processing dependencies for parallel-wavegan==0.6.2a0
不安な場合は下記のコマンドでインストールできたか確認してみてください。
parallel-wavegan
があると思います。
pip list
続き
一旦、目にみえるエラーが解決したら、改めて下記コマンドを試します。
pip install -r requirements.txt
ただし、インストールが済んだparallel-wavegan
に関しては下記のようにコメントアウトしてください。
・・・
omegaconf==2.3.0
openai==0.28.0
packaging==23.2
#parallel-wavegan==0.6.1
pika==1.3.2
pillow==10.2.0
・・・
すると新たなエラーにぶつかると思います
nnmnkwiiパッケージ インストール時のエラー
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: nnmnkwii/paramgen/_bandmat/misc.pyx
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for nnmnkwii
Failed to build nnmnkwii
ERROR: Could not build wheels for nnmnkwii, which is required to install pyproject.toml-based projects
私はこちらのエラー解消に大幅に沼りました。
まずは通常の通り
のリポジトリの方法でインストールを試します。
(pipの方法はうまくいかないことがわかっているのでスキップです)
git clone https://github.com/r9y9/nnmnkwii
cd nnmnkwii
python setup.py develop # or install
しかし同様のエラーが発生します。
この解消に色々試行錯誤して、沼りました。
原因としては下記のissueにあるように、
numpyのメジャーアップデート(2.0.0)による互換性の問題とのことです。
(2024年7月8日 追記)
@melon1891 さんよりコメントをいただき、現時点では下記の方法でインストールが可能になっているようです。
現在はこちらのエラーが修正されたnnnkwiiの最新版が出ているので Requirements.textの当該バージョンを 0.1.2 から 0.1.3に変更すると一発で行くようになっていました。
教えてくださってありがとうございます。
以降は、以前の解決策を残しておきます。
過去の解決方法
原因としては下記のissueにあるように、
numpyのメジャーアップデート(2.0.0)による互換性の問題とのことです。
このissueを読んでいくと、decfrrさんがこの問題を解決するforkを作成してくださっているではないですか!!(本当にありがとうございます)
そこで、decfrr/fix-numpy-version
ブランチの中身を下記コマンドでダウンロードして、nnmnkwiiをインストールしていきます。
git clone -b decfrr/fix-numpy-version https://github.com/decfrr/nnmnkwii.git
cd nnmnkwii
pip install -e .
ようやく、下記の通りインストールすることができました。
Successfully installed cython-3.0.10 fastdtw-0.3.4 nnmnkwii-0.1.2+e9a96b1 numpy-1.26.4 pysptk-0.2.2
(余談1)
ちなみに、
pip install -e .
の代わりに
python setup.py develop
を使うと、エラーになります。もう意味わかんないね。
(余談2)
最後に、decfrrさんに感謝を込めて、下記のissueに解決方法を記載しました。
I was able to install it using the link below.
https://github.com/decfrr/nnmnkwii/tree/decfrr/fix-numpy-versiongit clone -b decfrr/fix-numpy-version https://github.com/decfrr/nnmnkwii.git cd nnmnkwii pip install -e .
Thank you, @decfrr.
改めて
また一つエラーを解消したため、下記を実行します。
pip install -r requirements.txt
下記の通り、完全にインストールが成功することができました。
Successfully installed Cython-3.0.8 Jinja2-3.1.3 PyAudio-0.2.14 PyYAML-6.0.1 aiohttp-3.9.3 aiosignal-1.3.1 annotated-types-0.6.0 antlr4-python3-runtime-4.9.3 anyio-4.2.0 argcomplete-3.2.2 attrs-23.2.0 beautifulsoup4-4.12.3 cachetools-5.3.2 certifi-2024.2.2 cffi-1.16.0 contourpy-1.2.0 distro-1.9.0 filelock-3.13.1 fonttools-4.48.1 frozenlist-1.4.1 fsspec-2024.2.0 gdown-5.1.0 google-api-core-2.16.2 google-auth-2.27.0 google-cloud-speech-2.24.1 googleapis-common-protos-1.62.0 grpcio-1.60.1 grpcio-status-1.60.1 h11-0.14.0 h5py-3.10.0 httpcore-1.0.2 httpx-0.26.0 hydra-core-1.3.2 idna-3.6 joblib-1.3.2 lazy_loader-0.3 librosa-0.10.1 llvmlite-0.42.0 matplotlib-3.8.2 mecab-python3-1.0.8 msgpack-1.0.7 multidict-6.0.5 networkx-3.2.1 numba-0.59.0 omegaconf-2.3.0 openai-0.28.0 packaging-23.2 pika-1.3.2 pillow-10.2.0 platformdirs-4.2.0 pooch-1.8.0 proto-plus-1.23.0 protobuf-4.25.2 pyasn1-0.5.1 pyasn1-modules-0.3.0 pycparser-2.21 pydantic-2.6.1 pydantic_core-2.16.2 pyopenjtalk-0.3.3 pyparsing-3.1.1 python-dateutil-2.8.2 pyworld-0.3.4 requests-2.31.0 rsa-4.9 scikit-learn-1.4.0 scipy-1.12.0 sniffio-1.3.0 soxr-0.3.7 sympy-1.12 threadpoolctl-3.2.0 tomlkit-0.12.3 torch-2.2.0 tqdm-4.66.1 ttslearn-0.2.2 typing_extensions-4.9.0 unidic-lite-1.0.8 urllib3-2.2.0 yarl-1.9.4 yq-3.2.3
各種API鍵の取得と設定
さて、パッケージのインストールが終わったため、各種APIkeyを設定します。
こちらはリポジトリの通りに実施しましょう。
config/config.yaml
の該当部分に入力します。
下記のようなイメージで、""マークは不要です。
ChatGPT:
api_key: sk-xxxx
VAPのインストール
こちらもリポジトリの通りに実行しましょう、特にエラーになるところはないです。
pip install torch==2.0.1 torchvision torchaudio
git clone https://github.com/ErikEkstedt/VAP.git
cd VAP
pip3 install -r requirements.txt
pip3 install -e .
pip3 install torchsummary
cd models/vap
unzip sw2japanese_public0.zip
MMDAgent-EXのインストール
ここはまだ手をつけていません。
私は音声対話をしたいですが、アバターは不要なためスキップしています。
(スキップしても、アバターが表示されないだけで、問題なく音声対話はできます)
利用方法
リポジトリに記載の通りに実行していきます。
RabbitMQサーバを実行
Docker Desktopを立ち上げた状態で下記コマンドを実行してください
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management
テキスト対話の実行
新しく3つのターミナルを立ち上げてください。
全てのターミナルに対して下記の通り仮想環境をactivateして、指定のフォルダに移動してください。
source env/bin/activate
cd modules/
3つのターミナルで下記を実行
python tin.py
python dialogue.py
python tout.py
あとは、tin.py
のターミナル画面で、文字を入力してください。
enterを押すと、送信されます。
また、言いたいことを言い終わったら、何も入力しない状態でEnterを再度入力してください。
何も入力されていない状態でEnterを押すことが、入力終了の合図です。
あとは、tout.py
のターミナル画面に、AIからの発話内容が記載されると思います。
テキスト入力→音声発話の実行
私はまだ、GoogleのSpeech-to-Text APIを用意していないので、音声認識をせずに対話するために、私の発話はテキストで行い、相手の発話を音声で実施するようにします。
RabbitMQを利用することで、このあたりの柔軟性が非常に高くなっているのもremdis
の魅力ですね。
実施方法はテキスト対話の時と同じです。
まずは4つのターミナルを立ち上げて、同様に準備をします。
(DockerでRabbitMQサーバが立ち上がっていることが前提です)
source env/bin/activate
cd modules/
それぞれに対して、下記のコマンドを実行します
(面倒なので、全て同じブロックに記載しますが、実行する際は全て別のターミナルで実行してください)
python tin.py
python dialogue.py
python tts.py
python output.py
上記のように起動することで、tin.py
でで入力されたテキスト情報がdialogue.py
にてchatGPTで処理されて、AIの発話内容がテキストで生成されて、tts.py
でttslearnにて音声に変換されて、output.py
でスピーカから発話されるようになります。
簡単ですね。
音声対話の実行
これはリポジトリに記載の通りに進めましょう。おそらくできるはずです。
まとめ
ここまで、マルチモーダル対話システムであるRemdisに関して、環境構築で沼った点と、簡単な使い方についてまとめました。
同じく悩んでいる方に対して手助けになれば幸いです。
ちなみに私も簡単な音声対話システムを組んでいます。
remdisほど完成度は高くないですが、代わりにStyle-Bert-VITS2という非常に高性能なAIによる発話を利用しているため、感情表現豊かに、より人間っぽい対話を楽しむことができます。
また、非常にシンプルに実装しているため、コードも理解しやすいと思います。
下記の記事にて紹介しているため、読んでくださると嬉しいです!
(記事内の埋め込み動画をご覧いただければStyle-Bert-VITS2の威力がわかっていただけるかと思います)
ここまで読んでくださって、ありがとうございました!
Discussion
有用な記事ありがとうございます!
ですが、現在はこちらのエラーが修正されたnnnkwiiの最新版が出ているので Requirements.textの当該バージョンを 0.1.2 から 0.1.3に変更すると一発で行くようになっていました。
逆に今は修正版の方が消されてアクセスできない感じです
教えていただきありがとうございます!
こちら記事の方を修正させていただきました。
また、気づいた点などございましたらコメントいただけますと嬉しいです!