ARG DOCKER_REPOSITORY ARG DOCKER_TAG=latest FROM ${DOCKER_REPOSITORY}alltalk_tts_environment:${DOCKER_TAG} # Argument to choose the model: piper, vits, xtts ARG TTS_MODEL="xtts" ENV TTS_MODEL=$TTS_MODEL ARG DEEPSPEED_VERSION=0.16.2 ENV DEEPSPEED_VERSION=$DEEPSPEED_VERSION ENV GRADIO_SERVER_NAME="0.0.0.0" # Switch for using the multi engine manager: ENV ALLTALK_ENABLE_MULTI_ENGINE_MANAGER=false # Default settings used in docker_default_confignew.json: ENV ALLTALK_DELETE_OUTPUT_WAVS="1" ENV ALLTALK_GRADIO_INTERFACE=true ENV ALLTALK_RVC_ENABLED=true ENV ALLTALK_RVC_F0METHOD="rmvpe" # Default settings used in docker_default_mem_config.json: ENV ALLTALK_MEM_AUTO_START_ENGINES=1 ENV ALLTALK_MEM_MAX_INSTANCES=1 WORKDIR ${ALLTALK_DIR} ############################################################################## # Download TTS models: ############################################################################## COPY system/tts_engines/piper/available_models.json system/tts_engines/piper/ COPY system/tts_engines/vits/available_models.json system/tts_engines/vits/ COPY system/tts_engines/xtts/available_models.json system/tts_engines/xtts/ RUN <&1 ) if [ $? -ne 0 ] ; then echo "Failed to download DeepSpeed: $CURL_ERROR" exit 1 fi DEEPSPEED_WHEEL=$(realpath -q /tmp/deepspeed/*.whl) fi echo "Using precompiled DeepSpeed wheel at ${DEEPSPEED_WHEEL}" CFLAGS="-I$CONDA_PREFIX/include/" LDFLAGS="-L$CONDA_PREFIX/lib/" \ pip install --no-cache-dir ${DEEPSPEED_WHEEL} if [ $? -ne 0 ] ; then echo "Failed to install pip dependencies: $RESULT" exit 1 fi rm ${DEEPSPEED_WHEEL} conda clean --all --force-pkgs-dirs -y && pip cache purge EOR ############################################################################## # Writing scripts to start alltalk: ############################################################################## RUN < start_alltalk.sh #!/usr/bin/env bash source ~/.bashrc replace_env_vars() { echo "{}" > /tmp/empty.json jq "\$( cat \$1 ) | del(.. | select(. == null))" /tmp/empty.json > \$1.tmp mv \$1.tmp \$1 rm -f /tmp/empty.json } merge_json_files() { # Merging JSON config with docker default values followed by values set on startup: jq -s '.[0] * .[1] * .[2]' \$1 docker_default_\$1 docker_\$1 > \$1.tmp mv \$1.tmp \$1 } replace_env_vars docker_default_confignew.json merge_json_files confignew.json source ${ALLTALK_DIR}/conda_env.sh if [ "\$ALLTALK_ENABLE_MULTI_ENGINE_MANAGER" = true ] ; then echo "Starting alltalk using multi engine manager" replace_env_vars docker_default_mem_config.json merge_json_files mem_config.json python tts_mem.py else echo "Starting alltalk" python script.py fi EOF cat << EOF > start_finetune.sh #!/usr/bin/env bash source ~/.bashrc export TRAINER_TELEMETRY=0 source ${ALLTALK_DIR}/conda_env.sh python finetune.py EOF cat << EOF > start_diagnostics.sh #!/usr/bin/env bash source ~/.bashrc source ${ALLTALK_DIR}/conda_env.sh python diagnostics.py EOF chmod +x start_alltalk.sh chmod +x start_finetune.sh chmod +x start_diagnostics.sh EOR COPY --chown=alltalk:alltalk . . ############################################################################## # Create script to execute firstrun.py and run it: ############################################################################## RUN echo $'#!/usr/bin/env bash \n\ source ~/.bashrc \n\ source ${ALLTALK_DIR}/conda_env.sh \n\ python ./system/config/firstrun.py $@' > ./start_firstrun.sh RUN chmod +x start_firstrun.sh RUN ./start_firstrun.sh --tts_model $TTS_MODEL RUN mkdir -p ${ALLTALK_DIR}/outputs ${ALLTALK_DIR}/.triton/autotune ############################################################################## # Enable deepspeed for all models: ############################################################################## RUN find . -name model_settings.json -exec sed -i -e 's/"deepspeed_enabled": false/"deepspeed_enabled": true/g' {} \; ############################################################################## # Start alltalk: ############################################################################## ENTRYPOINT ["sh", "-c", "./start_alltalk.sh"]