👏

Remdisの環境構築で沼った話(+使い方の紹介)

2024/06/26に公開
2

はじめに

今回はRemdisというテキスト・音声・マルチモーダル対話システム開発のためのプラットフォームを利用するための環境構築で沼ったことを記事にまとめます。

最終的にはなんとか環境構築に成功したので、同じく沼っている方がいらっしゃれば参考になればと思います。

最後にRemdisを簡単に使ってみたので、その使い方についても紹介します。

Remdisとは

Remdisはテキスト・音声・マルチモーダル対話システム開発のためのプラットフォームです。
詳細は下記のリポジトリをご覧ください。

https://github.com/remdis/remdis

下記のデモ動画にもありますように、非常に自然かつ低遅延なリアルタイム対話を可能にしているシステムです。
https://www.youtube.com/watch?v=mYT7nC_U3M8

また、こちらのリポジトリを解説されている書籍も販売されております。非常にコードがわかりやすく解説されていますため、Remdisを利用したい方はぜひ購入しましょう。おすすめです。

Pythonと大規模言語モデルで作るリアルタイムマルチモーダル対話システム (エンジニア入門シリーズ128)

環境構築

大前提として私の環境は下記です。
PC:M2 Mac

Dockerのインストール

では実際に下記のリポジトリに従って環境構築をしていきます。
https://github.com/remdis/remdis?tab=readme-ov-file

まず、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自体の導入については下記をご覧ください。
https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b

pyenvが導入できていれば、下記のコマンドでpythonのバージョンを指定できます。

./remdis/
pyenv install 3.11.9 
pyenv local 3.11.9 #もしくはpyenv global 3.11.9

これでpythonのバージョンが指定できます。
pyenv globalはシステム全体に、このバージョンを反映させたい時に利用してください。
pyenv localは現在のカレントディレクトリでのみ、このバージョンを反映させたい場合に利用します。

下記コマンドを実行して、pythonのバージョンが変更されているかを確認してください。

./remdis/
python -V
# Python 3.11.9

必要なパッケージのインストール

続いて、必要なパッケージをインストールするために仮想環境を構築します
venvで仮想環境を構築します。
venvはpython公式の仮装環境のため、pythonが利用可能であれば導入の必要なく利用できます。

./remdis/
python -m venv env
source env/bin/activate

pip install -r requirements.txt

エラーの発生

./remdis/
pip install -r requirements.txt

上記コマンドを実行するとエラーが発生すると思います。
それではエラーごとに私が実施した解決策を提示します。

PyAudio パッケージインストール時のエラー

申し訳ございません。エラーメッセージを保存していなかったため、どのようなエラーが出たかは覚えていないですが、pip install pyaudioの時点でエラーが出ました。
(どのタイミングで出てかもわからないため、後述するエラーを解消しても、まだエラーが出る場合などに戻ってきて確認いただけますと幸いです)
下記コマンドを実行することで解消できます(Macの場合です)

./remdis/
brew remove portaudio
pip install pyaudio

下記を参考にしました。
https://stackoverflow.com/questions/33851379/how-to-install-pyaudio-on-mac-using-python-3

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.

こちらのエラーに関しては、リポジトリにも記載がある方法で一旦エラーの解消ができないか試します。
すなわち下記のコマンドです。

./remdis/
git clone https://github.com/kan-bayashi/ParallelWaveGAN.git
cd ParallelWaveGAN
./remdis/ParallelWaveGAN
pip install -e .

しかし上記のコマンドを実行しても、同様のエラーが発生してしまいます。
そこで下記を実行しました。

./remdis/ParallelWaveGAN
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

続き

一旦、目にみえるエラーが解決したら、改めて下記コマンドを試します。

./remdis/
pip install -r requirements.txt

ただし、インストールが済んだparallel-waveganに関しては下記のようにコメントアウトしてください。

./remdis/requirements.txt
・・・
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

私はこちらのエラー解消に大幅に沼りました。
まずは通常の通り
https://github.com/r9y9/nnmnkwii
のリポジトリの方法でインストールを試します。
(pipの方法はうまくいかないことがわかっているのでスキップです)

./remdis/
git clone https://github.com/r9y9/nnmnkwii
cd nnmnkwii
./remdis/nnmnkwii/
python setup.py develop # or install

しかし同様のエラーが発生します。
この解消に色々試行錯誤して、沼りました。

原因としては下記のissueにあるように、
numpyのメジャーアップデート(2.0.0)による互換性の問題とのことです。
https://github.com/r9y9/nnmnkwii/issues/126

(2024年7月8日 追記)
@melon1891 さんよりコメントをいただき、現時点では下記の方法でインストールが可能になっているようです。

現在はこちらのエラーが修正されたnnnkwiiの最新版が出ているので Requirements.textの当該バージョンを 0.1.2 から 0.1.3に変更すると一発で行くようになっていました。

教えてくださってありがとうございます。

以降は、以前の解決策を残しておきます。

過去の解決方法

原因としては下記のissueにあるように、
numpyのメジャーアップデート(2.0.0)による互換性の問題とのことです。
https://github.com/r9y9/nnmnkwii/issues/126

このissueを読んでいくと、decfrrさんがこの問題を解決するforkを作成してくださっているではないですか!!(本当にありがとうございます)

そこで、
https://github.com/decfrr/nnmnkwii/tree/decfrr/fix-numpy-version
下記のfork版のdecfrr/fix-numpy-versionブランチの中身を下記コマンドでダウンロードして、nnmnkwiiをインストールしていきます。

./remdis/
git clone -b decfrr/fix-numpy-version https://github.com/decfrr/nnmnkwii.git
cd nnmnkwii
./remdis/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)
ちなみに、

./remdis/nnmnkwii/
pip install -e .

の代わりに

./remdis/nnmnkwii/
python setup.py develop

を使うと、エラーになります。もう意味わかんないね。

(余談2)
最後に、decfrrさんに感謝を込めて、下記のissueに解決方法を記載しました。
https://github.com/r9y9/nnmnkwii/issues/126

I was able to install it using the link below.
https://github.com/decfrr/nnmnkwii/tree/decfrr/fix-numpy-version

git clone -b decfrr/fix-numpy-version https://github.com/decfrr/nnmnkwii.git
cd nnmnkwii
pip install -e .

Thank you, @decfrr.

改めて

また一つエラーを解消したため、下記を実行します。

./remdis/
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の該当部分に入力します。
下記のようなイメージで、""マークは不要です。

./remdis/config/config.yaml
ChatGPT:
 api_key: sk-xxxx

VAPのインストール

こちらもリポジトリの通りに実行しましょう、特にエラーになるところはないです。

./remdis/
pip install torch==2.0.1 torchvision torchaudio

git clone https://github.com/ErikEkstedt/VAP.git
cd VAP
./remdis/VAP
pip3 install -r requirements.txt
pip3 install -e .
pip3 install torchsummary

cd models/vap
./remdis/VAP/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して、指定のフォルダに移動してください。

./remdis/
source env/bin/activate
cd modules/

3つのターミナルで下記を実行

./remdis/modules/
python tin.py
./remdis/modules/
python dialogue.py
./remdis/modules/
python tout.py

あとは、tin.pyのターミナル画面で、文字を入力してください。
enterを押すと、送信されます。
また、言いたいことを言い終わったら、何も入力しない状態でEnterを再度入力してください。
何も入力されていない状態でEnterを押すことが、入力終了の合図です。
あとは、tout.pyのターミナル画面に、AIからの発話内容が記載されると思います。

テキスト入力→音声発話の実行

私はまだ、GoogleのSpeech-to-Text APIを用意していないので、音声認識をせずに対話するために、私の発話はテキストで行い、相手の発話を音声で実施するようにします。
RabbitMQを利用することで、このあたりの柔軟性が非常に高くなっているのもremdisの魅力ですね。

実施方法はテキスト対話の時と同じです。
まずは4つのターミナルを立ち上げて、同様に準備をします。
(DockerでRabbitMQサーバが立ち上がっていることが前提です)

./remdis/
source env/bin/activate
cd modules/

それぞれに対して、下記のコマンドを実行します
(面倒なので、全て同じブロックに記載しますが、実行する際は全て別のターミナルで実行してください)

./remdis/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の威力がわかっていただけるかと思います)
https://zenn.dev/asap/articles/5b1b7553fcaa76

ここまで読んでくださって、ありがとうございました!

Discussion

melon1891(@melon1891)melon1891(@melon1891)

有用な記事ありがとうございます!

nnmnkwiiパッケージ インストール時のエラー

ですが、現在はこちらのエラーが修正されたnnnkwiiの最新版が出ているので Requirements.textの当該バージョンを 0.1.2 から 0.1.3に変更すると一発で行くようになっていました。
https://github.com/r9y9/nnmnkwii/releases/tag/v0.1.3

逆に今は修正版の方が消されてアクセスできない感じです
https://github.com/decfrr/nnmnkwii/tree/decfrr/fix-numpy-version

asapasap

教えていただきありがとうございます!
こちら記事の方を修正させていただきました。

また、気づいた点などございましたらコメントいただけますと嬉しいです!