diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d316141 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +/models +/training +/voices +/bin diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e0fb05a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 + +ARG DEBIAN_FRONTEND=noninteractive +ARG TZ=UTC +ARG MINICONDA_VERSION=23.1.0-1 +ARG PYTHON_VERSION=3.9.13 + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN apt-get update +RUN apt install -y curl wget git ffmpeg +RUN adduser --disabled-password --gecos '' --shell /bin/bash user +USER user +ENV HOME=/home/user +WORKDIR $HOME +RUN mkdir $HOME/.cache $HOME/.config && chmod -R 777 $HOME +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py39_$MINICONDA_VERSION-Linux-x86_64.sh +RUN chmod +x Miniconda3-py39_$MINICONDA_VERSION-Linux-x86_64.sh +RUN ./Miniconda3-py39_$MINICONDA_VERSION-Linux-x86_64.sh -b -p /home/user/miniconda +ENV PATH="$HOME/miniconda/bin:$PATH" +RUN conda init +RUN conda install python=$PYTHON_VERSION +RUN python3 -m pip install --upgrade pip +RUN pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 + +RUN mkdir $HOME/ai-voice-cloning +WORKDIR $HOME/ai-voice-cloning +COPY --chown=user:user modules modules + +RUN python3 -m pip install -r ./modules/tortoise-tts/requirements.txt +RUN python3 -m pip install -e ./modules/tortoise-tts/ +RUN python3 -m pip install -r ./modules/dlas/requirements.txt +RUN python3 -m pip install -e ./modules/dlas/ +ADD requirements.txt requirements.txt +RUN python3 -m pip install -r ./requirements.txt +ADD --chown=user:user . $HOME/ai-voice-cloning + +CMD ["python", "./src/main.py", "--listen", "0.0.0.0:7680"] diff --git a/setup-docker.sh b/setup-docker.sh new file mode 100755 index 0000000..c4ca008 --- /dev/null +++ b/setup-docker.sh @@ -0,0 +1,4 @@ +#!/bin/bash +git submodule init +git submodule update --remote +docker build -t ai-voice-cloning . diff --git a/start-docker.sh b/start-docker.sh new file mode 100755 index 0000000..b11279f --- /dev/null +++ b/start-docker.sh @@ -0,0 +1,14 @@ +#!/bin/bash +CMD="python3 ./src/main.py $@" +# CMD="bash" +CPATH="/home/user/ai-voice-cloning" +docker run --rm --gpus all \ + --mount "type=bind,src=$PWD/models,dst=$CPATH/models" \ + --mount "type=bind,src=$PWD/training,dst=$CPATH/training" \ + --mount "type=bind,src=$PWD/voices,dst=$CPATH/voices" \ + --mount "type=bind,src=$PWD/bin,dst=$CPATH/bin" \ + --workdir $CPATH \ + --user "$(id -u):$(id -g)" \ + --net host \ + -it ai-voice-cloning $CMD + diff --git a/train-docker.sh b/train-docker.sh new file mode 100755 index 0000000..cd19b1a --- /dev/null +++ b/train-docker.sh @@ -0,0 +1,15 @@ +#!/bin/bash +CMD="python3 ./src/train.py --yaml $1" +# ipc host is one way to increase the shared memory for the container +# more info here https://github.com/pytorch/pytorch#docker-image +CPATH="/home/user/ai-voice-cloning" +docker run --rm --gpus all \ + --mount "type=bind,src=$PWD/models,dst=$CPATH/models" \ + --mount "type=bind,src=$PWD/training,dst=$CPATH/training" \ + --mount "type=bind,src=$PWD/voices,dst=$CPATH/voices" \ + --mount "type=bind,src=$PWD/bin,dst=$CPATH/bin" \ + --mount "type=bind,src=$PWD/src,dst=$CPATH/src" \ + --workdir $CPATH \ + --ipc host \ + --user "$(id -u):$(id -g)" \ + -it ai-voice-cloning $CMD