From 6f75ab9f60418057a8b07fc08a0c2ebacf153115 Mon Sep 17 00:00:00 2001 From: erew123 <35898566+erew123@users.noreply.github.com> Date: Thu, 13 Jun 2024 12:18:41 +0100 Subject: [PATCH] WIP Google Colab workbook This is a work in progress. There are issues to address: - RVC does not work yet. - There is a stutter on the 1st TTS generation. - Transcoding damages the file in some way (seems to be a colab specific issue) - First model selection and other configuration settings may need to be pre-set. - Long TTS generations can timeout in Gradio interface, hence should be run on at least a T4 runtime. --- googlecolab.ipynb | 203 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 googlecolab.ipynb diff --git a/googlecolab.ipynb b/googlecolab.ipynb new file mode 100644 index 0000000..c53d9d3 --- /dev/null +++ b/googlecolab.ipynb @@ -0,0 +1,203 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "H-WKVp4Uukcl" + }, + "source": [ + "#Install Server Requirements\n", + "This should be run on a minimum of a T4 runtime, though it will run on a CPU only session, however long TTS generations may time out/error.\n", + "\n", + "This is a **work in progress**. Known issues:\n", + "\n", + "- The 1st TTS generation has a brief stutter.\n", + "- RVC is not yet working.\n", + "- Transcoding/ffmpeg isnt working.\n", + "- Things yet to do on selecting your first model and other configuration setups.\n", + "\n", + "If you enable DeepSpeed for XTTS models, DeepSpeed has to compile on the 1st TTS generation which can take about 90 seconds. After that it should be fine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "W6ls-RHTQeZv", + "cellView": "form" + }, + "outputs": [], + "source": [ + "#@markdown #####You can enable gdrive that drag and drop samples directly through your google drive via the `drive/Mydrive` path\n", + "mount_gdrive = False #@param{type:\"boolean\"}\n", + "\n", + "if mount_gdrive:\n", + " from google.colab import drive\n", + " drive.mount('/content/drive')\n", + "from IPython.display import clear_output\n", + "print(\"*******************************************************************\")\n", + "print(\"** Installing server requirements. This will take 5-10 minutes ****\")\n", + "print(\"*******************************************************************\")\n", + "!apt install libasound2-dev portaudio19-dev libportaudio2 libportaudiocpp0 libaio-dev espeak-ng > '/dev/null' 2>&1\n", + "clear_output()\n", + "print(\"************************\")\n", + "print(\"*** Cloning AllTalk ****\")\n", + "print(\"************************\\n\")\n", + "!git clone -b alltalkbeta https://github.com/erew123/alltalk_tts\n", + "clear_output()\n", + "print(\"\\n********************************\")\n", + "print(\"*** Installing Requirements ****\")\n", + "print(\"********************************\\n\")\n", + "!pip install --quiet -r /content/alltalk_tts/system/requirements/requirements_colab.txt\n", + "clear_output()\n", + "print(\"\\n*****************************\")\n", + "print(\"*** Installing DeepSpeed ****\")\n", + "print(\"*****************************\\n\")\n", + "!pip install deepspeed\n", + "!pip install orjson\n", + "!pip install faiss-cpu\n", + "!pip install fairseq\n", + "clear_output()\n", + "print(\"\\n******************************\")\n", + "print(\"*** Installing Cloudflare ****\")\n", + "print(\"******************************\\n\")\n", + "# Install cloudflare\n", + "!wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb > '/dev/null' 2>&1\n", + "!apt install ./cloudflared-linux-amd64.deb aria2 > '/dev/null' 2>&1\n", + "!rm cloudflared-linux-amd64.deb > '/dev/null' 2>&1\n", + "!python -m spacy download en_core_web_md\n", + "clear_output()\n", + "print(\"\\n***************************\")\n", + "print(\"*** Installing Cutlass ****\")\n", + "print(\"***************************\\n\")\n", + "# Clone the CUTLASS repository\n", + "!git clone https://github.com/NVIDIA/cutlass.git\n", + "!export CUTLASSPATH=/content/cutlass\n", + "!sudo curl -L https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz -o /usr/local/bin/ffmpeg.tar.xz\n", + "clear_output()\n", + "%cd /usr/local/bin/\n", + "clear_output()\n", + "!7z e /usr/local/bin/ffmpeg.tar.xz -y\n", + "clear_output()\n", + "!7z e /usr/local/bin/ffmpeg.tar -y\n", + "clear_output()\n", + "!sudo chmod a+rx /usr/local/bin/ffmpeg\n", + "clear_output()\n", + "!pip uninstall jax -y\n", + "clear_output()\n", + "print(\"************************************\")\n", + "print(\"** Server requirements installed ***\")\n", + "print(\"*** Please proceed to next step ****\")\n", + "print(\"************************************\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2nk26r66RQ23" + }, + "source": [ + "\n", + "# Start AllTalk" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9PCQhSoiWvhL", + "cellView": "form" + }, + "outputs": [], + "source": [ + "#@markdown Links to the API and Gradio interface will be shown when AllTalk has loaded in.
\n", + "#@markdown The API address is what you would use in SillyTavern.\n", + "import re\n", + "import time\n", + "import json\n", + "import threading\n", + "import time\n", + "\n", + "def keep_alive():\n", + " while True:\n", + " time.sleep(60) # Run every 60 seconds (adjust as needed)\n", + "\n", + "keep_alive_thread = threading.Thread(target=keep_alive)\n", + "keep_alive_thread.start()\n", + "\n", + "Tunnel = \"cloudflare\"\n", + "host = \"127.0.0.1\"\n", + "ports = [7851, 7852]\n", + "tunnel_urls = []\n", + "\n", + "# Starting tunnels for each port.\n", + "for port in ports:\n", + " if Tunnel == \"cloudflare\":\n", + " !nohup cloudflared tunnel --url http://{host}:{port} > lt_{port}.log 2>&1 &\n", + " else:\n", + " !nohup npx lt -p {port} > lt_{port}.log 2>&1 &\n", + "\n", + "# Wait a couple of seconds for the tunnels to initialize.\n", + "time.sleep(10)\n", + "\n", + "# Extract URLs for each tunnel.\n", + "for port in ports:\n", + " log_file = f'lt_{port}.log'\n", + " with open(log_file, 'r') as testwritefile:\n", + " log_content = testwritefile.read()\n", + "\n", + " # Use regular expressions to find the URL.\n", + " if Tunnel == \"cloudflare\":\n", + " url_match = re.search(r'(https://[-a-z0-9]+\\.trycloudflare\\.com)', log_content)\n", + " else:\n", + " url_match = re.search(r'your url is: (https?://\\S+)', log_content)\n", + "\n", + " if url_match:\n", + " tunnel_url = url_match.group(1)\n", + " tunnel_urls.append(tunnel_url)\n", + " else:\n", + " print(f\"URL for port {port} not found.\")\n", + "\n", + "# Save the tunnel URLs to a JSON file.\n", + "try:\n", + " # Try to open the JSON file for reading.\n", + " with open('/content/alltalk_tts/googlecolab.json', 'r') as f:\n", + " data = json.load(f)\n", + "except FileNotFoundError:\n", + " # If the file doesn't exist, create an empty dictionary.\n", + " data = {}\n", + "\n", + "data['google_ip_address'] = tunnel_urls\n", + "\n", + "# Write the modified data (or newly created data) back to the file.\n", + "with open('/content/alltalk_tts/googlecolab.json', 'w') as f:\n", + " json.dump(data, f)\n", + "\n", + "host = \"0.0.0.0\"\n", + "\n", + "if Tunnel == \"localtunnel\":\n", + " print(\"Before you copy the link above click on it and copy that ip:\")\n", + " !curl ipv4.icanhazip.com\n", + "\n", + "# Start API server.\n", + "!python /content/alltalk_tts/script.py\n" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file