🎤
ddPn08/rvc-webui を今更ながら試す(API利用のみ)
何かしらのRVCのモデル(pth)を持っているとします。
僕は852話さんのBoothにいくつかあるのを買っています。
それでは、セットアップを開始しましょう。
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
の方を叩きます。
自分はこれがだるかったので、一発で以下のように叩けるように修正したものを使っています。
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