Files
SillyTavern/colab/GPU.ipynb
2023-02-11 02:31:12 +04:00

273 lines
12 KiB
Plaintext

{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU",
"gpuClass": "standard"
},
"cells": [
{
"cell_type": "markdown",
"source": [
"https://colab.research.google.com/github/TavernAI/TavernAI/blob/main/colab/GPU.ipynb<br>\n",
"\n",
"Works with:<br>\n",
"KoboldAI https://github.com/KoboldAI/KoboldAI-Client<br>\n",
"Pygmalion https://huggingface.co/PygmalionAI/<br>\n",
"<br>\n",
"**Links**<br>\n",
"TavernAI Github https://github.com/TavernAI/TavernAI<br>\n",
"TavernAI Discord https://discord.gg/zmK2gmr45t<br>\n",
"TavernAI Boosty https://boosty.to/tavernai\n",
"<pre>\n",
" Tavern.AI/ \\ / ^ ^ ^ ^ ~~~~ ^ \\ / ^ ^ ^ ^/ ^ ^ \\/^ ^ \\\n",
" /^ ^\\ ^ ^ ^ ^ ^ ~~ ^ \\ / ^ ^ ^ / ^ ^ ^/ ^ ^ \\\n",
" /^ ^ ^\\^ ^ ^ ^ _||____ ^ \\ / ^ ^ ^ / / ^ ^ ^ \\\n",
" /\\ /\\ /\\ ^ \\ /\\ /\\ /\\\\\\\\\\\\\\\\ ^ \\ ^ /\\ /\\ /\\ /\\ /\\ /\\ ^ ^ ^/\\\n",
"//\\\\/\\\\/\\\\ ^ \\//\\\\/\\\\ /__\\\\\\\\\\\\\\\\ _, \\ //\\\\/\\\\/\\\\ //\\\\/\\\\/\\\\ ^ ^ //\\\\\n",
"//\\\\/\\\\/\\\\ //\\\\/\\\\ |__|_|_|__| \\__, //\\\\/\\\\/\\\\ //\\\\/\\\\/\\\\ ///\\\\\\\n",
" || || (@^◡^)(≖ ‸ ≖*) ( ←_← )\\| /| /\\ \\ヽ(°ㅂ°╬) |( Ψ▼ー▼)∈ (O_O; ) |||\n",
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~~~~ ~~ \n",
"</pre>\n",
"**Launch Instructions**<br>\n",
"1. Click the launch button.\n",
"2. Wait for the environment and model to load\n",
"3. After initialization, a TavernAI link will appear\n",
"\n",
"**Faq**<br>\n",
"* Q: I do not get a TavernAI link\n",
"* A: It seems the localtunnel service is currently down, so the TavernAI link is unavailable. Need to wait for it to start working again."
],
"metadata": {
"id": "d-Yihz3hAb2E"
}
},
{
"cell_type": "code",
"source": [
"#@title <-- Tap this if you play on Mobile { display-mode: \"form\" }\n",
"#Taken from KoboldAI colab\n",
"%%html\n",
"<b>Press play on the music player to keep the tab alive, then start TavernAI below (Uses only 13MB of data)</b><br/>\n",
"<audio src=\"https://henk.tech/colabkobold/silence.m4a\" controls>"
],
"metadata": {
"id": "hCpoIHxYcDGs"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "hps3qtPLFNBb",
"cellView": "form"
},
"outputs": [],
"source": [
"#@title <b>TavernAI</b>\n",
"#@markdown <- Click For Start (≖ ‸ ≖ ✿)\n",
"\n",
"Model = \"Pygmalion 6B\" #@param [ \"Pygmalion 6B\", \"Pygmalion 6B Dev\"] {allow-input: true}\n",
"Version = \"Official\" \n",
"Provider = \"Cloudflare\" \n",
"use_google_drive = True #@param {type:\"boolean\"}\n",
"\n",
"!nvidia-smi\n",
"import subprocess\n",
"import time\n",
"import sys\n",
"import os\n",
"import threading\n",
"from google.colab import drive\n",
"def copy_chats():\n",
" for dirpath, dirnames, filenames in os.walk(\"/content/drive/MyDrive/TavernAI/chats/\"):\n",
" for filename in filenames:\n",
" source_file = os.path.join(dirpath, filename)\n",
" destination_file = source_file.replace(\"/content/drive/MyDrive/TavernAI/chats/\", \"/TavernAIColab/public/chats/\")\n",
"\n",
" if not os.path.exists(destination_file):\n",
" if not os.path.exists(os.path.dirname(destination_file)):\n",
" os.makedirs(os.path.dirname(destination_file))\n",
" !cp -r {source_file} {destination_file}\n",
" else:\n",
" !cp -r {source_file} {destination_file}\n",
" \n",
"def copy_characters():\n",
" source_files2 = os.listdir(\"/content/drive/MyDrive/TavernAI/characters\")\n",
" destination_files2 = os.listdir(\"/TavernAIColab/public/characters/\")\n",
"\n",
" new_files2 = set(source_files2) - set(destination_files2)\n",
" deleted_files2 = set(destination_files2) - set(source_files2)\n",
" updated_files2 = [file for file in source_files2 if file in destination_files2 and \n",
" os.path.getmtime(f'/content/drive/MyDrive/TavernAI/characters/{file}') > \n",
" os.path.getmtime(f'/TavernAIColab/public/characters/{file}')]\n",
"\n",
" if new_files2:\n",
" for file in new_files2:\n",
" if os.path.isdir(f'/content/drive/MyDrive/TavernAI/characters/{file}'):\n",
" !cp -r /content/drive/MyDrive/TavernAI/characters/{file} /TavernAIColab/public/characters/\n",
" else:\n",
" !cp /content/drive/MyDrive/TavernAI/characters/{file} /TavernAIColab/public/characters/\n",
"\n",
" if updated_files2:\n",
" for file in updated_files2:\n",
" !cp /content/drive/MyDrive/TavernAI/characters/{file} /TavernAIColab/public/characters/\n",
" \n",
"def sync_files():\n",
" while True:\n",
" #chats\n",
" for dirpath, dirnames, filenames in os.walk(\"/TavernAIColab/public/chats/\"):\n",
" for filename in filenames:\n",
" source_file = os.path.join(dirpath, filename)\n",
" destination_file = source_file.replace(\"/TavernAIColab/public/chats/\", \"/content/drive/MyDrive/TavernAI/chats/\")\n",
"\n",
" if not os.path.exists(destination_file):\n",
" if not os.path.exists(os.path.dirname(destination_file)):\n",
" os.makedirs(os.path.dirname(destination_file))\n",
" !cp -r {source_file} {destination_file}\n",
" elif os.path.getmtime(source_file) > os.path.getmtime(destination_file):\n",
" !cp -r {source_file} {destination_file}\n",
"\n",
" source_files2 = os.listdir(\"/TavernAIColab/public/chats/\")\n",
" destination_files2 = os.listdir(\"/content/drive/MyDrive/TavernAI/chats\")\n",
"\n",
" deleted_files = set(destination_files2) - set(source_files2)\n",
" if deleted_files:\n",
" for file in deleted_files:\n",
" if os.path.isdir(f'/content/drive/MyDrive/TavernAI/chats/{file}'):\n",
" !rm -r /content/drive/MyDrive/TavernAI/chats/{file}\n",
" else:\n",
" !rm /content/drive/MyDrive/TavernAI/chats/{file}\n",
"\n",
"\n",
" #characters\n",
" source_files2 = os.listdir(\"/TavernAIColab/public/characters/\")\n",
" destination_files2 = os.listdir(\"/content/drive/MyDrive/TavernAI/characters\")\n",
"\n",
" new_files2 = set(source_files2) - set(destination_files2)\n",
" deleted_files2 = set(destination_files2) - set(source_files2)\n",
" updated_files2 = [file for file in source_files2 if file in destination_files2 and \n",
" os.path.getmtime(f'/TavernAIColab/public/characters/{file}') > \n",
" os.path.getmtime(f'/content/drive/MyDrive/TavernAI/characters/{file}')]\n",
"\n",
" if new_files2:\n",
" for file in new_files2:\n",
" if os.path.isdir(f'/taicolabtest/public/characters/{file}'):\n",
" !cp -r /TavernAIColab/public/characters/{file} /content/drive/MyDrive/TavernAI/characters\n",
" else:\n",
" !cp /TavernAIColab/public/characters/{file} /content/drive/MyDrive/TavernAI/characters\n",
"\n",
" if deleted_files2:\n",
" for file in deleted_files2:\n",
" !rm /content/drive/MyDrive/TavernAI/characters/{file}\n",
"\n",
" if updated_files2:\n",
" for file in updated_files2:\n",
" !cp /TavernAIColab/public/characters/{file} /content/drive/MyDrive/TavernAI/characters\n",
" time.sleep(3) \n",
" \n",
"if use_google_drive:\n",
" drive.mount('/content/drive/')\n",
" if not os.path.exists(\"/content/drive/MyDrive/TavernAI/\"):\n",
" os.mkdir(\"/content/drive/MyDrive/TavernAI/\")\n",
" if not os.path.exists(\"/content/drive/MyDrive/TavernAI/characters/\"):\n",
" os.mkdir(\"/content/drive/MyDrive/TavernAI/characters/\")\n",
" if not os.path.exists(\"/content/drive/MyDrive/TavernAI/chats/\"):\n",
" os.mkdir(\"/content/drive/MyDrive/TavernAI/chats/\")\n",
"else:\n",
" if not os.path.exists(\"/content/drive\"):\n",
" os.mkdir(\"/content/drive\")\n",
" if not os.path.exists(\"/content/drive/MyDrive/\"):\n",
" os.mkdir(\"/content/drive/MyDrive/\")\n",
"\n",
"Revision = \"\"\n",
"\n",
"if Model == \"Pygmalion 6B\":\n",
" Model = \"PygmalionAI/pygmalion-6b\"\n",
" path = \"\"\n",
" download = \"\"\n",
" Version = \"United\"\n",
"elif Model == \"Pygmalion 6B Dev\":\n",
" Model = \"PygmalionAI/pygmalion-6b\"\n",
" Revision = \"--revision dev\"\n",
" path = \"\"\n",
" Version = \"United\"\n",
" download = \"\"\n",
"\n",
"if Provider == \"Localtunnel\":\n",
" tunnel = \"--localtunnel yes\"\n",
"else:\n",
" tunnel = \"\"\n",
"\n",
"\n",
"#Henk's KoboldAI script\n",
"!wget https://koboldai.org/ckds && chmod +x ckds\n",
"!./ckds --init only\n",
"p = subprocess.Popen(['/content/ckds', '--model', Model], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n",
"\n",
"#Do not repeat! Tricks performed by a professional!\n",
"url = ''\n",
"while True:\n",
" line = p.stdout.readline().decode().strip()\n",
" if \"KoboldAI has finished loading and is available at the following link: \" in line:\n",
" print(line)\n",
" url = line.split(\"KoboldAI has finished loading and is available at the following link: \")[1]\n",
" print(url)\n",
" break\n",
" if \"KoboldAI has finished loading and is available at the following link for UI 1: \" in line:\n",
" print(line)\n",
" url = line.split(\"KoboldAI has finished loading and is available at the following link for UI 1: \")[1]\n",
" print(url)\n",
" break\n",
" if not line:\n",
" break\n",
" print(line)\n",
" if \"INIT\" in line and \"Transformers\" in line:\n",
" print(\"Model loading... (It will take 2 - 5 minutes)\")\n",
"\n",
"\n",
"\n",
"#TavernAI\n",
"%cd /\n",
"!curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash\n",
"!nvm install 19.1.0\n",
"!nvm use 19.1.0\n",
"!node -v\n",
"!git clone https://github.com/TavernAI/TavernAIColab\n",
"%cd TavernAIColab\n",
"!npm install\n",
"time.sleep(1)\n",
"%env colab=2\n",
"%env colaburl=$url\n",
"!nohup node server.js &\n",
"time.sleep(3)\n",
"%cd /\n",
"copy_characters()\n",
"time.sleep(1)\n",
"copy_chats()\n",
"time.sleep(1)\n",
"if use_google_drive:\n",
" t = threading.Thread(target=sync_files)\n",
" t.daemon = True # Daemonize\n",
" t.start()\n",
"print('KoboldAI LINK:')\n",
"print(url)\n",
"print('')\n",
"print('###TavernAI LINK###')\n",
"!lt --port 8000\n"
]
}
]
}