Добавлен блокнот специально для Kaggle
Browse filesПроцесс установки в Kaggle немного отличается, от процесса установки в Google Colab из-за особенностей среды выполнения
В настройках блокнота установлен акселератор GPU T4 x2 (актуальная версия torch не совместима с GPU P100 из-за старой версии CUDA)
MVSepLess_Epsilon_Kaggle.ipynb
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"accelerator":"GPU","colab":{"collapsed_sections":["ydA_93K1Yt4D","H24RtVB1YlE0","VaGl6jKVYZfU","4GSGHM4rYSVp"],"gpuType":"T4","provenance":[]},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\n# @title # Установка\nrepo_url = \"https://huggingface.co/noblebarkrr/mvsepless_colab\"\nhome_dir = os.path.join(os.sep, \"content\")\nmvsepless_dir = os.path.join(home_dir, \"mvsepless-epsilon\")\n%cd $home_dir\n!git clone $repo_url $mvsepless_dir\n%cd $mvsepless_dir\n!pip install --no-cache-dir uv\nreq = \"\"\"\ntorch\ntorchvision\ntorchaudio\nnumpy==2.0.2\npandas\nscipy\nlibrosa\nsamplerate==0.1.0\nmatplotlib\ntqdm\neinops\nprotobuf\nsoundfile\npydub\nwebrtcvad\naudiomentations\npedalboard==0.8.2\nml_collections\ntimm\nwandb\naccelerate\nbitsandbytes\ntokenizers\nhuggingface-hub\ntransformers\ntorchseg\ndemucs==4.0.0\nasteroid\nprodigyopt\ntorch_log_wmse\nrotary_embedding_torch\ngradio<=6.0\nomegaconf\nbeartype\nspafe\ntorch_audiomentations\nauraloss\nonnx>=1.17\nonnx2torch>=0.3.0\nonnxruntime-gpu>=1.17\nml_dtypes\nresampy\nyt_dlp\npyngrok\ntabulate\nneuraloperator==1.0.2\ntorchcrepe\npraat-parselmouth\nfaiss-cpu==1.11\nlocal-attention\ntenacity\npyworld\ngdown\n\"\"\"\nwith open(\"requirements.txt\", \"w\", encoding=\"utf-8\") as f:\n f.write(req)\n!uv pip install --upgrade --force-reinstall --no-cache-dir -qq -r requirements.txt\n%cd $mvsepless_dir\n","metadata":{"cellView":"form","id":"bMJNEsdIUHYM"},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nfrom pyngrok import ngrok\nimport random\nimport string\nimport re\nimport urllib\nimport time\nimport ipywidgets as widgets\nfrom IPython.display import display, Javascript\nimport threading\nimport subprocess\n\n%cd $mvsepless_dir\n#@title # Web-UI\n#@markdown ---\n#@markdown ### Общий доступ\nport = 7862\n#@markdown * Способ поделится приложением\nsharing_method = \"gradio\" # @param [\"gradio\",\"ngrok\",\"localtunnel\",\"not\"]\n#@markdown * Токен для ngrok *(где взять его - https://dashboard.ngrok.com/get-started/your-authtoken)*\nngrok_token = \"\" # @param {\"type\":\"string\"}\n\nlt_sub_domain = \"mvsepless\"\ndef generate_subdomain(length=8):\n \"\"\"Генерация случайного субдомена заданной длины\"\"\"\n chars = string.ascii_lowercase + string.digits\n return ''.join(random.choice(chars) for _ in range(length))\n\nif sharing_method == \"ngrok\":\n try:\n ngrok.set_auth_token(ngrok_token)\n ngrok.kill()\n tunnel = ngrok.connect(port)\n print(f\"Публичная ссылка: {tunnel.public_url}\")\n except KeyboardInterrupt:\n ngrok.kill()\n\nif sharing_method == \"localtunnel\":\n os.system(\"npm install -g localtunnel &>/dev/null\")\n time.sleep(7)\n with open('url.txt', 'w') as file:\n file.write('')\n subdomain = f\"{re.sub(r'[^a-zA-Z0-9]', '', lt_sub_domain)}-{generate_subdomain(25)}\"\n\n # Флаг для контроля работы потока\n tunnel_running = True\n\n def run_tunnel():\n while tunnel_running:\n print(\"localtunnel включается...\")\n try:\n # Используем subprocess вместо os.system для лучшего контроля\n process = subprocess.Popen(\n f'lt --port {port} '\n f'{f\"--subdomain {subdomain}\" if lt_sub_domain != \"\" and not lt_sub_domain.isspace() else \"\"}',\n shell=True,\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE\n )\n process.wait() # Ждем завершения процесса\n if not tunnel_running:\n break\n time.sleep(5) # Пауза перед перезапуском\n except Exception as e:\n if tunnel_running:\n print(f\"Ошибка в localtunnel: {e}\")\n time.sleep(5)\n\n tunnel_thread = threading.Thread(target=run_tunnel, daemon=True)\n tunnel_thread.start()\n\n time.sleep(3)\n try:\n endpoint_ip = urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip()\n tunnel_url = f\"https://{subdomain}.loca.lt\"\n print(f\"Публичная ссылка: {tunnel_url}\")\n\n # Создаем текстовое поле с URL, а не IP\n text_field = widgets.Text(\n value=endpoint_ip, # Исправлено: по��азываем URL, а не IP\n description='URL:',\n disabled=True\n )\n text_field.add_class(\"copy-enabled\")\n\n display(text_field)\n\n # Исправленный JavaScript для копирования\n display(Javascript(\"\"\"\n setTimeout(() => {\n const input = document.querySelector('.copy-enabled input');\n if (!input) return;\n\n const btn = document.createElement('button');\n btn.innerHTML = '📋';\n btn.style.cssText = `\n margin-left: 8px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 1.2em;\n `;\n input.parentNode.appendChild(btn);\n\n btn.addEventListener('click', () => {\n navigator.clipboard.writeText(input.value) // Исправлено: input.value вместо input\n .then(() => {\n btn.innerHTML = '✓';\n setTimeout(() => btn.innerHTML = '📋', 2000);\n })\n .catch(err => {\n console.error('Ошибка копирования: ', err);\n });\n });\n }, 300);\n \"\"\"))\n\n except Exception as e:\n print(f\"Ошибка при старте localtunnel: {e}\")\n\n # Функция для корректного завершения\n def stop_tunnel():\n global tunnel_running\n tunnel_running = False\n print(\"Localtunnel завершает работу...\")\n\n # Регистрируем обработчик для Ctrl+C\n import signal\n original_signal_handler = signal.getsignal(signal.SIGINT)\n\n def signal_handler(sig, frame):\n stop_tunnel()\n # Восстанавливаем оригинальный обработчик и вызываем его\n signal.signal(signal.SIGINT, original_signal_handler)\n raise KeyboardInterrupt\n\n signal.signal(signal.SIGINT, signal_handler)\n\nshare_arg = \"--share\" if sharing_method == \"gradio\" else \"\"\n!python mvsepless app --port $port $share_arg","metadata":{"cellView":"form","id":"QMG9TEdMtHJ6","trusted":true},"outputs":[],"execution_count":null}]}
|