diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1e73c7e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +*/saved_models +!vocoder/saved_models/pretrained/** +!encoder/saved_models/pretrained.pt +/datasets \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5302980..b098c01 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,7 @@ !vocoder/saved_models/pretrained/** !encoder/saved_models/pretrained.pt wavs -log \ No newline at end of file +log +!/docker-entrypoint.sh +!/datasets_download/*.sh +/datasets \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..919b841 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM pytorch/pytorch:latest + +RUN apt-get update && apt-get install -y build-essential ffmpeg parallel aria2 && apt-get clean + +COPY ./requirements.txt /workspace/requirements.txt + +RUN pip install -r requirements.txt && pip install webrtcvad-wheels + +COPY . /workspace + +VOLUME [ "/datasets", "/workspace/synthesizer/saved_models/" ] + +ENV DATASET_MIRROR=default FORCE_RETRAIN=false TRAIN_DATASETS=aidatatang_200zh\ magicdata\ aishell3\ data_aishell TRAIN_SKIP_EXISTING=true + +EXPOSE 8080 + +ENTRYPOINT [ "/workspace/docker-entrypoint.sh" ] diff --git a/datasets_download/CN.txt b/datasets_download/CN.txt new file mode 100644 index 0000000..5a69796 --- /dev/null +++ b/datasets_download/CN.txt @@ -0,0 +1,8 @@ +https://openslr.magicdatatech.com/resources/62/aidatatang_200zh.tgz + out=download/aidatatang_200zh.tgz +https://openslr.magicdatatech.com/resources/68/train_set.tar.gz + out=download/magicdata.tgz +https://openslr.magicdatatech.com/resources/93/data_aishell3.tgz + out=download/aishell3.tgz +https://openslr.magicdatatech.com/resources/33/data_aishell.tgz + out=download/data_aishell.tgz \ No newline at end of file diff --git a/datasets_download/EU.txt b/datasets_download/EU.txt new file mode 100644 index 0000000..d0e4d7d --- /dev/null +++ b/datasets_download/EU.txt @@ -0,0 +1,8 @@ +https://openslr.elda.org/resources/62/aidatatang_200zh.tgz + out=download/aidatatang_200zh.tgz +https://openslr.elda.org/resources/68/train_set.tar.gz + out=download/magicdata.tgz +https://openslr.elda.org/resources/93/data_aishell3.tgz + out=download/aishell3.tgz +https://openslr.elda.org/resources/33/data_aishell.tgz + out=download/data_aishell.tgz \ No newline at end of file diff --git a/datasets_download/US.txt b/datasets_download/US.txt new file mode 100644 index 0000000..d0625ad --- /dev/null +++ b/datasets_download/US.txt @@ -0,0 +1,8 @@ +https://us.openslr.org/resources/62/aidatatang_200zh.tgz + out=download/aidatatang_200zh.tgz +https://us.openslr.org/resources/68/train_set.tar.gz + out=download/magicdata.tgz +https://us.openslr.org/resources/93/data_aishell3.tgz + out=download/aishell3.tgz +https://us.openslr.org/resources/33/data_aishell.tgz + out=download/data_aishell.tgz \ No newline at end of file diff --git a/datasets_download/datasets.sha256sum b/datasets_download/datasets.sha256sum new file mode 100644 index 0000000..6db69a9 --- /dev/null +++ b/datasets_download/datasets.sha256sum @@ -0,0 +1,4 @@ +0c0ace77fe8ee77db8d7542d6eb0b7ddf09b1bfb880eb93a7fbdbf4611e9984b /datasets/download/aidatatang_200zh.tgz +be2507d431ad59419ec871e60674caedb2b585f84ffa01fe359784686db0e0cc /datasets/download/aishell3.tgz +a4a0313cde0a933e0e01a451f77de0a23d6c942f4694af5bb7f40b9dc38143fe /datasets/download/data_aishell.tgz +1d2647c614b74048cfe16492570cc5146d800afdc07483a43b31809772632143 /datasets/download/magicdata.tgz diff --git a/datasets_download/default.txt b/datasets_download/default.txt new file mode 100644 index 0000000..17e429f --- /dev/null +++ b/datasets_download/default.txt @@ -0,0 +1,8 @@ +https://www.openslr.org/resources/62/aidatatang_200zh.tgz + out=download/aidatatang_200zh.tgz +https://www.openslr.org/resources/68/train_set.tar.gz + out=download/magicdata.tgz +https://www.openslr.org/resources/93/data_aishell3.tgz + out=download/aishell3.tgz +https://www.openslr.org/resources/33/data_aishell.tgz + out=download/data_aishell.tgz \ No newline at end of file diff --git a/datasets_download/download.sh b/datasets_download/download.sh new file mode 100755 index 0000000..f428cb0 --- /dev/null +++ b/datasets_download/download.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +aria2c -x 10 --disable-ipv6 --input-file /workspace/datasets_download/${DATASET_MIRROR}.txt --dir /datasets --continue + +echo "Verifying sha256sum..." +parallel --will-cite -a /workspace/datasets_download/datasets.sha256sum "echo -n {} | sha256sum -c" diff --git a/datasets_download/extract.sh b/datasets_download/extract.sh new file mode 100755 index 0000000..9f40e59 --- /dev/null +++ b/datasets_download/extract.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +mkdir -p /datasets/aidatatang_200zh +if [ -z "$(ls -A /datasets/aidatatang_200zh)" ] ; then + tar xvz --directory /datasets/ -f /datasets/download/aidatatang_200zh.tgz --exclude 'aidatatang_200zh/corpus/dev/*' --exclude 'aidatatang_200zh/corpus/test/*' + cd /datasets/aidatatang_200zh/corpus/train/ + cat *.tar.gz | tar zxvf - -i + rm -f *.tar.gz +fi + +mkdir -p /datasets/magicdata +if [ -z "$(ls -A /datasets/magicdata)" ] ; then + tar xvz --directory /datasets/magicdata -f /datasets/download/magicdata.tgz train/ +fi + +mkdir -p /datasets/aishell3 +if [ -z "$(ls -A /datasets/aishell3)" ] ; then + tar xvz --directory /datasets/aishell3 -f /datasets/download/aishell3.tgz train/ +fi + +mkdir -p /datasets/data_aishell +if [ -z "$(ls -A /datasets/data_aishell)" ] ; then + tar xvz --directory /datasets/ -f /datasets/download/data_aishell.tgz + cd /datasets/data_aishell/wav/ + cat *.tar.gz | tar zxvf - -i --exclude 'dev/*' --exclude 'test/*' + rm -f *.tar.gz +fi diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..28d3fb9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.8' + +services: + server: + image: mockingbird:latest + build: . + volumes: + - ./datasets:/datasets + - ./synthesizer/saved_models:/workspace/synthesizer/saved_models + environment: + - DATASET_MIRROR=US + - FORCE_RETRAIN=false + - TRAIN_DATASETS=aidatatang_200zh magicdata aishell3 data_aishell + - TRAIN_SKIP_EXISTING=true + ports: + - 8080:8080 + deploy: + resources: + reservations: + devices: + - driver: nvidia + device_ids: [ '0' ] + capabilities: [ gpu ] diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..adf6359 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ -z "$(ls -A /workspace/synthesizer/saved_models)" ] || [ "$FORCE_RETRAIN" = true ] ; then + /workspace/datasets_download/download.sh + /workspace/datasets_download/extract.sh + for DATASET in ${TRAIN_DATASETS} + do + if [ "$TRAIN_SKIP_EXISTING" = true ] ; then + python pre.py /datasets -d ${DATASET} -n $(nproc) --skip_existing + else + python pre.py /datasets -d ${DATASET} -n $(nproc) + fi + done + python synthesizer_train.py mandarin /datasets/SV2TTS/synthesizer +fi + +python web.py diff --git a/requirements.txt b/requirements.txt index 119814d..50b6bb1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,4 +25,8 @@ streamlit==1.8.0 PyYAML==5.4.1 torch_complex espnet -PyWavelets \ No newline at end of file +PyWavelets +fastapi +loguru +typer[all] +click==8.0.4 \ No newline at end of file