🎤

ddPn08/rvc-webui を今更ながら試す(API利用のみ)

2023/12/13に公開

https://github.com/ddPn08/rvc-webui

何かしらのRVCのモデル(pth)を持っているとします。

僕は852話さんのBoothにいくつかあるのを買っています。
https://meola.booth.pm/

それでは、セットアップを開始しましょう。

git clone

今回はAPI経由で利用したいので、ddPn08さんのrvc-webuiにある server.py を利用します。
中身を見るとわかりますがgradio経由でのAPIではなく素のflaskを使っているようです。

git clone https://github.com/ddPn08/rvc-webui
cd rvc-webui

Docker関連ファイルを追加

この Dockerfile + docker-compose.yml は今回向けに書いているわけではないので、不要な記述もあるかもしれませんが、他のGPUを使うプロジェクトでもほぼ待ったく同じDockerfileを使うことでビルド時にキャッシュを利用できるのでそうしています。

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
RUN apt update && apt install -y python3 python3-pip build-essential libssl-dev libffi-dev python3-dev
RUN apt install -y cmake
RUN apt install -y git
RUN apt install -y ffmpeg
RUN apt install -y wget
RUN apt install -y nvidia-cuda-toolkit

WORKDIR /app


RUN pip3 install torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu118
RUN pip3 uninstall -y cmake
RUN pip3 install pydub
RUN pip3 install omegaconf

RUN apt install -y libatlas-base-dev gfortran
RUN pip3 install --upgrade pip \
&&  pip3 install --no-cache-dir \
    black \
    jupyterlab \
    jupyterlab_code_formatter \
    jupyterlab-git \
    lckr-jupyterlab-variableinspector \
    jupyterlab_widgets \
    ipywidgets \
    import-ipynb

RUN pip3 install notebook

COPY requirements/main.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .
# CMD ["python3", "launch.py", "--host=0.0.0.0", "--skip-install"]
CMD ["python3", "server.py"]

↑ 最後にserver.pyを実行しています。

docker-compose.yml
version: '3.9'
services:
  app:
    tty: true
    build:
      context: .
      dockerfile: "Dockerfile"
    ports:
      - "7862:7860"
      - "5001:5001"
    environment:
      - NVIDIA_VISIBLE_DEVICES=0
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - HUGGINGFACE_AUTH_TOKEN=${HUGGINGFACE_AUTH_TOKEN}
    volumes:
      - .:/app
      - python-packages:/root/.local/share
      - hf-cache:/root/.cache
    # command:
    #  python3 server.py
    # entrypoint: >
    #   jupyter-lab
    #   --allow-root
    #   --ip=0.0.0.0
    #   --port=9999
    #   --no-browser
    #   --NotebookApp.token=''
    #   --notebook-dir=/app

    deploy:
      resources:
        reservations:
          devices:
              - driver: nvidia
                device_ids: ['0']
                capabilities: [compute, utility]

volumes:
  python-packages:
    name: python-packages
  hf-cache:
    name: hf-cache

server.pyの修正

-    app.run()
+    # app.run()
+    app.run(host='0.0.0.0', port=5001)

実行するサーバー以外からもアクセスしたい場合はこのようにします。

実行する

docker compose up

これを実行するとまずDockerfileの内容のビルドが行われ、その後 server.py が実行されます。

rvc-webui-app-1  | 
rvc-webui-app-1  | ==========
rvc-webui-app-1  | == CUDA ==
rvc-webui-app-1  | ==========
rvc-webui-app-1  | 
rvc-webui-app-1  | CUDA Version 11.8.0
rvc-webui-app-1  | 
rvc-webui-app-1  | Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
rvc-webui-app-1  | 
rvc-webui-app-1  | This container image and its contents are governed by the NVIDIA Deep Learning Container License.
rvc-webui-app-1  | By pulling and using the container, you accept the terms and conditions of this license:
rvc-webui-app-1  | https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
rvc-webui-app-1  | 
rvc-webui-app-1  | A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
rvc-webui-app-1  | 
rvc-webui-app-1  |  * Serving Flask app 'server'
rvc-webui-app-1  |  * Debug mode: off
rvc-webui-app-1  | 2023-12-13 01:49:05 | INFO | werkzeug | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
rvc-webui-app-1  |  * Running on all addresses (0.0.0.0)
rvc-webui-app-1  |  * Running on http://127.0.0.1:5001
rvc-webui-app-1  |  * Running on http://<your_server_ip>:5001
rvc-webui-app-1  | 2023-12-13 01:49:05 | INFO | werkzeug | Press CTRL+C to quit

それでは次でAPIを叩いてみましょう。

curlでAPIを叩く

元の音源ファイルをcurlを実行するPCに置いておきます。
モデルはcloneしたディレクトリにある models/checkpoints/ 以下に置いてください。
その状態で以下のようなcurlを実行してください。

$ curl -X POST http://localhost:5001/upload_model \
    -F "rvc_model_file=/app/models/checkpoints/<your_model_name>.pth"

$ vi params.json
{
    "speaker_id": 0,
    "transpose": 0,
    "pitch_extraction_algo": "dio",
    "retrieval_feature_ratio": 0.0
}

$ curl -X POST http://localhost:5001/convert_sound \
    -F "input_wav=@input.wav" \
    -F "params=@params.json;type=application/json" \
    --output "output.wav"

↑最初にモデルを設定して、そのあとparams.jsonを用意して convert_sound の方を叩きます。

自分はこれがだるかったので、一発で以下のように叩けるように修正したものを使っています。
https://github.com/kazuph/rvc-webui/blob/api/server.py

curl -X POST http://localhost:5001/convert_sound \
    -F "input_wav=@input.mp3" \
    -F "model_name=<model_name>.pth" \
    -F "pitch_extraction_algo=harvest" \
    --output "output.wav"

こうすると、 output.wav としてRVCでの変換後の音声が保存されているはずです。

以上です。

Discussion