Style-Bert-VITS2をDockerで動かす話

# はじめに
いきなりですが「Bert-VITS2」をご存じでしょうか？
かなり感情の乗った音声を作れるということで話題になった音声合成技術です。

https://github.com/fishaudio/Bert-VITS2

そして、バージョン2.1をベースにし、litagin02さんが感情スタイル指定をちゃんと動くようにしようとしてgithubで公開されているものが本記事で扱う「Style-Bert-VITS2」です。
「Style-Bert-VITS2」は、使いやすいようWebUIにして、使い方も動画とGoogle Colabと分かりやすくまとめてくださって大変ありがたいです。

https://github.com/litagin02/Style-Bert-VITS2

こんな面白いの試してみたい！
でも、最新の技術は、書いてある通りに試しても上手く動かない、調べても正確な情報が出てこない。
安易に調べた記事を鵜吞みにしてPCの設定をいじると、環境がぐちゃぐちゃになってしまって取り返しのつかないことになったり...
そんな私と同じ思いを持っている人に向けて、Dockerで作った環境を紹介します！
Dockerなら環境設定をいじっても、上手くいくまでコンテナを作って壊して試すことができますから安心です。
（dockerが動かせる環境は前提とさせてください）

### PC環境

- CPU：‎第13世代インテルCore i7-13700F
- RAM(CPUメモリ)：32GB
- GPU：NVIDIA GeForce RTX 4060 Ti
- VRAM(GPUメモリ)：16GB

（GPUありのPCで動作確認をしているので、CPUのみで動くかは試せてないです）

# 本題

まずは、githubリポジトリをクローンしてきて、必要なモデルとデフォルトTTSモデルをダウンロードを行います。
（もしpythonが使えずモデルをダウンロードできない場合は、Dockerのコンテナを先に作ってコンテナ内で`initialize.py`を実行するとよいかもしれません）

```
$ git clone https://github.com/litagin02/Style-Bert-VITS2.git
$ cd Style-Bert-VITS2
$ python initialize.py
```

次に、以下のdocker-compose.yml, Dockerfileを`Style-Bert-VITS2`ディレクトリに配置します。

```docker-compose.yml
version: '3.8'

services:
  app:
    build: .
    container_name: style-bert-vits2-app
    volumes:
      - .:/work
    ports:
      - "8000:7860"
      - "5000:5000"
      - "6006:6006"
    # tty: true
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    command: python server_fastapi.py
```

```Dockerfile
# Pythonのベースイメージを使用
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime

RUN pip install nvidia-cublas-cu12 nvidia-cudnn-cu12

ENV CUDA_VISIBLE_DEVICES 0
ENV MKL_SERVICE_FORCE_INTEL 1
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/conda/lib/python3.10/site-packages/nvidia/cublas/lib:/opt/conda/lib/python3.10/site-packages/nvidia/cudnn/lib:/opt/conda/lib/python3.10/site-packages/torch/lib

# 作業ディレクトリを設定
WORKDIR /work

# Pythonの依存関係をインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt
```

`pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime`と`nvidia-cublas-cu12 nvidia-cudnn-cu12`はGPUのCUDAのバージョンに合わせて変更してください。
（私のGPUは`CUDA Version: 12.2`なので、`12`にしています）

最後に、以下のコマンドでdocker-composeを立ち上げて完了です。
```
$ docker compose up -d --build
```

# 使い方

上記のdocker-composeでAPIが起動している状態なので`localhost:5000/docs`にアクセスすると、利用可能なAPIを確認することができます。
音声合成だけならAPIでも十分ですが、モデルを学習させたい場合は`webui_train.py`を動かす必要があります。
（学習させる音声の前処理も行いたい場合は`webui_dataset.py`を使います）

以下のコマンドでDockerの中に入り、WebUIを動かします。

```
$ docker exec -it style-bert-vits2-app bash
$ root@xxxxx:/work# python webui_train.py --server-name 0.0.0.0
```

gradioとdockerの相性が悪いのか、gradioのserver-nameをデフォルトの127.0.0.1から0.0.0.0にする必要があるので注意してください。
毎回、引数に指定することが面倒な方は`webui_train.py`を編集してデフォルトを0.0.0.0に変更してください。

WebUIを動かすと`localhost:8000`にアクセスすることで、ブラウザ上で操作可能です。
前処理・学習などの細かい設定は、githubリポジトリのREADME.mdをご参照ください。
学習の実行方法は[こちら](https://note.com/tinjyuu/n/nef17eb035835)の記事が分かりやすいのでオススメです。

音声合成もブラウザで操作したい場合は、学習と同様に`app.py`を動かしてください。

# 最後に

以上、Docker, docker-composeを使ったSytle-Bert-VITS2の動かし方になります。

いかがだったでしょうか？上手くDockerを起動させることは出来たでしょうか？

上手く動かなかった方は、Dockerfileやdocker-compose.ymlをエラーに従って修正してみてください。今はChatGPTにでも聞けば大抵答えてくれます。
Dockerなので安心してコンテナを作って試して壊して、あなたの環境に最適なものを見つけ出してくださいね！

# おまけ（雑談）

音声合成のモデルの学習を試してみたいけど、学習させる音声データがなくて困っている方は、以下の公開されている音声データはいかがでしょうか？
- [moe-speech](https://huggingface.co/datasets/litagin/moe-speech)
- [マルチモーダルデータベース](https://zunko.jp/multimodal_dev/login.php)
- [つくよみちゃんコーパス](https://tyc.rei-yumesaki.net/material/corpus/)

※音声合成がこれからも発展していくためにも、音声・データを提供してくださった方のためにも、そして、あなた自身を守るためにも、利用規約はしっかり理解したうえで利用しましょう！

他の音声合成技術の[GPT-SoVITS](https://note.com/tinjyuu/n/ne5b247308120)も気になりますね