{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "VoiceChangerDemo", "provenance": [], "collapsed_sections": [], "authorship_tag": "ABX9TyNIza7v0FnaVjOr14T3S+ej", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" }, "accelerator": "GPU", "gpuClass": "standard" }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "source": [ "Voice Changer (デモ版)\n", "---\n", "\n", "このノートはVoice ChangerをColab上で動かすデモ版です。\n", "\n", "正式版はローカルPCのDocker上で動かすアプリケーションです。\n", "\n", "正式版は、多くの場合より少ないタイムラグで滑らかに音声を変換できます。\n", "\n", "詳細な使用方法はこちらの[リポジトリ](https://github.com/w-okada/voice-changer)からご確認ください。\n" ], "metadata": { "id": "Lbbmx_Vjl0zo" } }, { "cell_type": "markdown", "source": [ "# GPUを確認\n", "GPUを用いたほうが高速に処理が行えます。\n", "\n", "下記のコマンドでGPUが確認できない場合は、上のメニューから\n", "\n", "「ランタイム」→「ランタイムの変更」→「ハードウェア アクセラレータ」\n", "\n", "でGPUを選択してください。" ], "metadata": { "id": "oUKi1NYMmXrr" } }, { "cell_type": "code", "source": [ "# (1) GPUの確認\n", "!nvidia-smi" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vV1t7PBRm-o6", "outputId": "5a33cb79-d771-43c4-8854-ac0fbc95a07c" }, "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Sun Sep 18 21:24:31 2022 \n", "+-----------------------------------------------------------------------------+\n", "| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |\n", "|-------------------------------+----------------------+----------------------+\n", "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", "| | | MIG M. |\n", "|===============================+======================+======================|\n", "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n", "| N/A 48C P8 10W / 70W | 0MiB / 15109MiB | 0% Default |\n", "| | | N/A |\n", "+-------------------------------+----------------------+----------------------+\n", " \n", "+-----------------------------------------------------------------------------+\n", "| Processes: |\n", "| GPU GI CI PID Type Process name GPU Memory |\n", "| ID ID Usage |\n", "|=============================================================================|\n", "| No running processes found |\n", "+-----------------------------------------------------------------------------+\n" ] } ] }, { "cell_type": "markdown", "source": [ "# 使用するモデルとコンフィグファイルの指定\n", "\n", "使用するトレーニング済みのモデルと、トレーニングで使用したコンフィグファイルのパスを指定してください。\n", "\n", "多くの場合はGoogle Driveに格納されているファイルを使用すると思います。その場合は、下の(2-2)のセルを実行してドライブをマウントしてください" ], "metadata": { "id": "mHvGrgaWnIPA" } }, { "cell_type": "code", "source": [ "# (2-1) 使用するモデルとコンフィグファイルの指定\n", "CONFIG=\"/content/drive/MyDrive/VoiceChanger/config.json\"\n", "MODEL=\"/content/drive/MyDrive/VoiceChanger/G_326000.pth\"" ], "metadata": { "id": "nSXATMWYb4Ik" }, "execution_count": 2, "outputs": [] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2wxD-gRSMU5R", "outputId": "768bf916-9503-4e9a-acf9-2b744b5d8f9c" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ], "source": [ "# (2-2) Google Driveのマウント\n", "from google.colab import drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "markdown", "source": [ "# リポジトリのクローン\n", "リポジトリをクローンします" ], "metadata": { "id": "sLBfykjBnjWc" } }, { "cell_type": "code", "source": [ "# (3) リポジトリのクローン\n", "!git clone --depth 1 https://github.com/w-okada/voice-changer.git\n", "%cd voice-changer/demo/\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "86wTFmqsNMnD", "outputId": "c6a23eb6-5f87-49d9-b9c7-da1bc937ae65" }, "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cloning into 'voice-changer'...\n", "remote: Enumerating objects: 101, done.\u001b[K\n", "remote: Counting objects: 100% (101/101), done.\u001b[K\n", "remote: Compressing objects: 100% (87/87), done.\u001b[K\n", "remote: Total 101 (delta 13), reused 70 (delta 6), pack-reused 0\u001b[K\n", "Receiving objects: 100% (101/101), 18.97 MiB | 24.58 MiB/s, done.\n", "Resolving deltas: 100% (13/13), done.\n", "/content/voice-changer/demo\n" ] } ] }, { "cell_type": "markdown", "source": [ "# ファイルの配置\n", "アプリケーションの挙動を記した設定ファイルをコピーします(4-1)。(4-2)はコピーした設定ファイルを表示しています。もしかしたらうまく動かないときに役立つかもしれません。" ], "metadata": { "id": "jmDY8W_fnuSi" } }, { "cell_type": "code", "source": [ "# (4-1) 設定ファイルの配置\n", "!cp ../template/setting_mmvc_colab.json ../frontend/dist/assets/setting.json\n" ], "metadata": { "id": "Bn4kV8TgXp8i" }, "execution_count": 5, "outputs": [] }, { "cell_type": "code", "source": [ "# (4-2) 設定ファイルの確認\n", "!cat ../frontend/dist/assets/setting.json\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "pjxPsOOaXXTj", "outputId": "609dfadb-6a26-46f4-8f6a-1066c5b3e458" }, "execution_count": 6, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "{\n", " \"app_title\": \"voice-changer\",\n", " \"majar_mode\": \"colab\",\n", " \"voice_changer_server_url\": \"/test\",\n", " \"sample_rate\": 48000,\n", " \"buffer_size\": 1024,\n", " \"prefix_chunk_size\": 24,\n", " \"chunk_size\": 24,\n", " \"speaker_ids\": [100, 107, 101, 102, 103],\n", " \"speaker_names\": [\"ずんだもん\", \"user\", \"そら\", \"めたん\", \"つむぎ\"],\n", " \"src_id\": 107,\n", " \"dst_id\": 100,\n", " \"vf_enable\": true,\n", " \"voice_changer_mode\": \"realtime\",\n", " \"gpu\": 0,\n", " \"available_gpus\": [-1, 0, 1, 2, 3, 4],\n", " \"avatar\": {\n", " \"enable_avatar\": true, \n", " \"motion_capture_face\": true,\n", " \"motion_capture_upperbody\": true,\n", " \"lip_overwrite_with_voice\": true,\n", " \"avatar_url\": \"./assets/vrm/zundamon/zundamon.vrm\",\n", " \"backgournd_image_url\": \"./assets/images/bg_natural_sougen.jpg\",\n", " \"background_color\": \"#0000dd\",\n", " \"chroma_key\": \"#0000dd\",\n", " \"avatar_canvas_size\": [1280, 720],\n", " \"screen_canvas_size\": [1280, 720]\n", " },\n", " \"advance\": {\n", " \"avatar_draw_skip_rate\": 3,\n", " \"screen_draw_skip_rate\": 3,\n", " \"visualizer_draw_skip_rate\": 3,\n", " \"cross_fade_lower_value\": 0.1,\n", " \"cross_fade_offset_rate\": 0.3,\n", " \"cross_fade_end_rate\": 0.6,\n", " \"cross_fade_type\": 2\n", " }\n", "}\n" ] } ] }, { "cell_type": "markdown", "source": [ "# モジュールのインストール\n", "\n", "必要なモジュールをインストールします。" ], "metadata": { "id": "8Na2PbLZSWgZ" } }, { "cell_type": "code", "source": [ "# (5) 設定ファイルの確認\n", "!apt-get install -y espeak libsndfile1-dev\n", "!pip install unidecode\n", "!pip install phonemizer\n", "!pip install retry\n", "!pip install fastapi\n", "!pip install uvicorn" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "LwZAAuqxX7yY", "outputId": "86d84d90-21f2-4b6f-b939-a4a53d12a4e4" }, "execution_count": 7, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Reading package lists... Done\n", "Building dependency tree \n", "Reading state information... Done\n", "libsndfile1-dev is already the newest version (1.0.28-4ubuntu0.18.04.2).\n", "The following package was automatically installed and is no longer required:\n", " libnvidia-common-460\n", "Use 'apt autoremove' to remove it.\n", "The following additional packages will be installed:\n", " espeak-data libespeak1 libportaudio2 libsonic0\n", "The following NEW packages will be installed:\n", " espeak espeak-data libespeak1 libportaudio2 libsonic0\n", "0 upgraded, 5 newly installed, 0 to remove and 20 not upgraded.\n", "Need to get 1,219 kB of archives.\n", "After this operation, 3,031 kB of additional disk space will be used.\n", "Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libportaudio2 amd64 19.6.0-1 [64.6 kB]\n", "Get:2 http://archive.ubuntu.com/ubuntu bionic/main amd64 libsonic0 amd64 0.2.0-6 [13.4 kB]\n", "Get:3 http://archive.ubuntu.com/ubuntu bionic/universe amd64 espeak-data amd64 1.48.04+dfsg-5 [934 kB]\n", "Get:4 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libespeak1 amd64 1.48.04+dfsg-5 [145 kB]\n", "Get:5 http://archive.ubuntu.com/ubuntu bionic/universe amd64 espeak amd64 1.48.04+dfsg-5 [61.6 kB]\n", "Fetched 1,219 kB in 1s (1,020 kB/s)\n", "Selecting previously unselected package libportaudio2:amd64.\n", "(Reading database ... 155569 files and directories currently installed.)\n", "Preparing to unpack .../libportaudio2_19.6.0-1_amd64.deb ...\n", "Unpacking libportaudio2:amd64 (19.6.0-1) ...\n", "Selecting previously unselected package libsonic0:amd64.\n", "Preparing to unpack .../libsonic0_0.2.0-6_amd64.deb ...\n", "Unpacking libsonic0:amd64 (0.2.0-6) ...\n", "Selecting previously unselected package espeak-data:amd64.\n", "Preparing to unpack .../espeak-data_1.48.04+dfsg-5_amd64.deb ...\n", "Unpacking espeak-data:amd64 (1.48.04+dfsg-5) ...\n", "Selecting previously unselected package libespeak1:amd64.\n", "Preparing to unpack .../libespeak1_1.48.04+dfsg-5_amd64.deb ...\n", "Unpacking libespeak1:amd64 (1.48.04+dfsg-5) ...\n", "Selecting previously unselected package espeak.\n", "Preparing to unpack .../espeak_1.48.04+dfsg-5_amd64.deb ...\n", "Unpacking espeak (1.48.04+dfsg-5) ...\n", "Setting up libportaudio2:amd64 (19.6.0-1) ...\n", "Setting up espeak-data:amd64 (1.48.04+dfsg-5) ...\n", "Setting up libsonic0:amd64 (0.2.0-6) ...\n", "Setting up libespeak1:amd64 (1.48.04+dfsg-5) ...\n", "Setting up espeak (1.48.04+dfsg-5) ...\n", "Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n", "Processing triggers for libc-bin (2.27-3ubuntu1.5) ...\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting unidecode\n", " Downloading Unidecode-1.3.4-py3-none-any.whl (235 kB)\n", "\u001b[K |████████████████████████████████| 235 kB 4.9 MB/s \n", "\u001b[?25hInstalling collected packages: unidecode\n", "Successfully installed unidecode-1.3.4\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting phonemizer\n", " Downloading phonemizer-3.2.1-py3-none-any.whl (90 kB)\n", "\u001b[K |████████████████████████████████| 90 kB 4.4 MB/s \n", "\u001b[?25hCollecting dlinfo\n", " Downloading dlinfo-1.2.1-py3-none-any.whl (3.6 kB)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from phonemizer) (4.1.1)\n", "Requirement already satisfied: joblib in /usr/local/lib/python3.7/dist-packages (from phonemizer) (1.1.0)\n", "Requirement already satisfied: attrs>=18.1 in /usr/local/lib/python3.7/dist-packages (from phonemizer) (22.1.0)\n", "Collecting segments\n", " Downloading segments-2.2.1-py2.py3-none-any.whl (15 kB)\n", "Collecting clldutils>=1.7.3\n", " Downloading clldutils-3.12.0-py2.py3-none-any.whl (197 kB)\n", "\u001b[K |████████████████████████████████| 197 kB 24.2 MB/s \n", "\u001b[?25hCollecting csvw>=1.5.6\n", " Downloading csvw-3.1.1-py2.py3-none-any.whl (56 kB)\n", "\u001b[K |████████████████████████████████| 56 kB 6.1 MB/s \n", "\u001b[?25hRequirement already satisfied: regex in /usr/local/lib/python3.7/dist-packages (from segments->phonemizer) (2022.6.2)\n", "Requirement already satisfied: python-dateutil in /usr/local/lib/python3.7/dist-packages (from clldutils>=1.7.3->segments->phonemizer) (2.8.2)\n", "Collecting colorlog\n", " Downloading colorlog-6.7.0-py2.py3-none-any.whl (11 kB)\n", "Requirement already satisfied: tabulate>=0.7.7 in /usr/local/lib/python3.7/dist-packages (from clldutils>=1.7.3->segments->phonemizer) (0.8.10)\n", "Collecting language-tags\n", " Downloading language_tags-1.1.0-py2.py3-none-any.whl (210 kB)\n", "\u001b[K |████████████████████████████████| 210 kB 66.4 MB/s \n", "\u001b[?25hCollecting colorama\n", " Downloading colorama-0.4.5-py2.py3-none-any.whl (16 kB)\n", "Collecting rdflib\n", " Downloading rdflib-6.2.0-py3-none-any.whl (500 kB)\n", "\u001b[K |████████████████████████████████| 500 kB 67.8 MB/s \n", "\u001b[?25hRequirement already satisfied: babel in /usr/local/lib/python3.7/dist-packages (from csvw>=1.5.6->segments->phonemizer) (2.10.3)\n", "Requirement already satisfied: uritemplate>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from csvw>=1.5.6->segments->phonemizer) (3.0.1)\n", "Requirement already satisfied: jsonschema in /usr/local/lib/python3.7/dist-packages (from csvw>=1.5.6->segments->phonemizer) (4.3.3)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from csvw>=1.5.6->segments->phonemizer) (2.23.0)\n", "Collecting isodate\n", " Downloading isodate-0.6.1-py2.py3-none-any.whl (41 kB)\n", "\u001b[K |████████████████████████████████| 41 kB 702 kB/s \n", "\u001b[?25hCollecting rfc3986<2\n", " Downloading rfc3986-1.5.0-py2.py3-none-any.whl (31 kB)\n", "Requirement already satisfied: pytz>=2015.7 in /usr/local/lib/python3.7/dist-packages (from babel->csvw>=1.5.6->segments->phonemizer) (2022.2.1)\n", "Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from isodate->csvw>=1.5.6->segments->phonemizer) (1.15.0)\n", "Requirement already satisfied: importlib-resources>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema->csvw>=1.5.6->segments->phonemizer) (5.9.0)\n", "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema->csvw>=1.5.6->segments->phonemizer) (0.18.1)\n", "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from jsonschema->csvw>=1.5.6->segments->phonemizer) (4.12.0)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.7/dist-packages (from importlib-resources>=1.4.0->jsonschema->csvw>=1.5.6->segments->phonemizer) (3.8.1)\n", "Requirement already satisfied: pyparsing in /usr/local/lib/python3.7/dist-packages (from rdflib->csvw>=1.5.6->segments->phonemizer) (3.0.9)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.7/dist-packages (from rdflib->csvw>=1.5.6->segments->phonemizer) (57.4.0)\n", "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->csvw>=1.5.6->segments->phonemizer) (1.24.3)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->csvw>=1.5.6->segments->phonemizer) (3.0.4)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->csvw>=1.5.6->segments->phonemizer) (2.10)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->csvw>=1.5.6->segments->phonemizer) (2022.6.15)\n", "Installing collected packages: isodate, rfc3986, rdflib, language-tags, colorama, csvw, colorlog, clldutils, segments, dlinfo, phonemizer\n", "Successfully installed clldutils-3.12.0 colorama-0.4.5 colorlog-6.7.0 csvw-3.1.1 dlinfo-1.2.1 isodate-0.6.1 language-tags-1.1.0 phonemizer-3.2.1 rdflib-6.2.0 rfc3986-1.5.0 segments-2.2.1\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting retry\n", " Downloading retry-0.9.2-py2.py3-none-any.whl (8.0 kB)\n", "Requirement already satisfied: decorator>=3.4.2 in /usr/local/lib/python3.7/dist-packages (from retry) (4.4.2)\n", "Requirement already satisfied: py<2.0.0,>=1.4.26 in /usr/local/lib/python3.7/dist-packages (from retry) (1.11.0)\n", "Installing collected packages: retry\n", "Successfully installed retry-0.9.2\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting fastapi\n", " Downloading fastapi-0.85.0-py3-none-any.whl (55 kB)\n", "\u001b[K |████████████████████████████████| 55 kB 2.6 MB/s \n", "\u001b[?25hRequirement already satisfied: pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2 in /usr/local/lib/python3.7/dist-packages (from fastapi) (1.9.2)\n", "Collecting starlette==0.20.4\n", " Downloading starlette-0.20.4-py3-none-any.whl (63 kB)\n", "\u001b[K |████████████████████████████████| 63 kB 2.3 MB/s \n", "\u001b[?25hCollecting anyio<5,>=3.4.0\n", " Downloading anyio-3.6.1-py3-none-any.whl (80 kB)\n", "\u001b[K |████████████████████████████████| 80 kB 11.3 MB/s \n", "\u001b[?25hRequirement already satisfied: typing-extensions>=3.10.0 in /usr/local/lib/python3.7/dist-packages (from starlette==0.20.4->fastapi) (4.1.1)\n", "Collecting sniffio>=1.1\n", " Downloading sniffio-1.3.0-py3-none-any.whl (10 kB)\n", "Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.7/dist-packages (from anyio<5,>=3.4.0->starlette==0.20.4->fastapi) (2.10)\n", "Installing collected packages: sniffio, anyio, starlette, fastapi\n", "Successfully installed anyio-3.6.1 fastapi-0.85.0 sniffio-1.3.0 starlette-0.20.4\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting uvicorn\n", " Downloading uvicorn-0.18.3-py3-none-any.whl (57 kB)\n", "\u001b[K |████████████████████████████████| 57 kB 2.8 MB/s \n", "\u001b[?25hRequirement already satisfied: click>=7.0 in /usr/local/lib/python3.7/dist-packages (from uvicorn) (7.1.2)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from uvicorn) (4.1.1)\n", "Collecting h11>=0.8\n", " Downloading h11-0.13.0-py3-none-any.whl (58 kB)\n", "\u001b[K |████████████████████████████████| 58 kB 6.0 MB/s \n", "\u001b[?25hInstalling collected packages: h11, uvicorn\n", "Successfully installed h11-0.13.0 uvicorn-0.18.3\n" ] } ] }, { "cell_type": "markdown", "source": [ "# サーバの起動\n", "\n", "サーバを起動します。(6-1)\n", "\n", "サーバの起動状況を確認します。(6-2) \n", "\n", "このセルは繰り返し実行することになるのでCtrl+Retでセルを実行してください。\n", "\n", "アクセスできるようになるまで、1~2分かかるようです。コーヒーでも飲みに行きましょう。\n", "\n", "下記のようなテキストが表示されたら起動完了です。\n", "\n", "**`Application startup complete`**\n", "\n", "という文字列で完了です。`uvicorn.error`という不穏なメッセージも見られますが、これはプロセスの名前で大して重要な意味を持ちませんので無視してください。(どうやったら消せるのだろうか。)\n", "\n", "\n", "```\n", "INFO: Will watch for changes in these directories: ['/content/voice-changer/demo']\n", "INFO:uvicorn.error:Will watch for changes in these directories: ['/content/voice-changer/demo']\n", "INFO: Uvicorn running on http://0.0.0.0:8088 (Press CTRL+C to quit)\n", "INFO:uvicorn.error:Uvicorn running on http://0.0.0.0:8088 (Press CTRL+C to quit)\n", "INFO: Started reloader process [617] using StatReload\n", "INFO:uvicorn.error:Started reloader process [617] using StatReload\n", "INFO:uvicorn:INITIALIZE MODEL\n", "GPU_NUM: 1\n", "INFO:root:Loaded checkpoint '/content/drive/MyDrive/VoiceChanger/G_326000.pth' (iteration 1136)\n", "DEBUG:asyncio:Using selector: EpollSelector\n", "INFO: INITIALIZE MODEL\n", "INFO:uvicorn:INITIALIZE MODEL\n", "GPU_NUM: 1\n", "INFO:root:Loaded checkpoint '/content/drive/MyDrive/VoiceChanger/G_326000.pth' (iteration 1136)\n", "INFO: Started server process [637]\n", "INFO:uvicorn.error:Started server process [637]\n", "INFO: Waiting for application startup.\n", "INFO:uvicorn.error:Waiting for application startup.\n", "INFO: Application startup complete.\n", "INFO:uvicorn.error:Application startup complete.\n", "```\n", "\n" ], "metadata": { "id": "-_2OcN9Borke" } }, { "cell_type": "code", "source": [ "# (6-1) サーバの起動\n", "PORT=8088\n", "get_ipython().system_raw(f'python3 serverFastAPI.py {PORT} {CONFIG} {MODEL} >foo 2>&1 &')" ], "metadata": { "id": "iNOAB7zISI6J" }, "execution_count": 8, "outputs": [] }, { "cell_type": "code", "source": [ "# (6-2) サーバの起動確認 (Ctrl+Retで実行)\n", "!tail -20 foo" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "chu06KpAjEK6", "outputId": "babff101-af28-4b1f-8173-c067c6b21981" }, "execution_count": 17, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "INFO: Will watch for changes in these directories: ['/content/voice-changer/demo']\n", "INFO:uvicorn.error:Will watch for changes in these directories: ['/content/voice-changer/demo']\n", "INFO: Uvicorn running on http://0.0.0.0:8088 (Press CTRL+C to quit)\n", "INFO:uvicorn.error:Uvicorn running on http://0.0.0.0:8088 (Press CTRL+C to quit)\n", "INFO: Started reloader process [617] using StatReload\n", "INFO:uvicorn.error:Started reloader process [617] using StatReload\n", "INFO:uvicorn:INITIALIZE MODEL\n", "GPU_NUM: 1\n", "INFO:root:Loaded checkpoint '/content/drive/MyDrive/VoiceChanger/G_326000.pth' (iteration 1136)\n", "DEBUG:asyncio:Using selector: EpollSelector\n", "INFO: INITIALIZE MODEL\n", "INFO:uvicorn:INITIALIZE MODEL\n", "GPU_NUM: 1\n", "INFO:root:Loaded checkpoint '/content/drive/MyDrive/VoiceChanger/G_326000.pth' (iteration 1136)\n", "INFO: Started server process [637]\n", "INFO:uvicorn.error:Started server process [637]\n", "INFO: Waiting for application startup.\n", "INFO:uvicorn.error:Waiting for application startup.\n", "INFO: Application startup complete.\n", "INFO:uvicorn.error:Application startup complete.\n" ] } ] }, { "cell_type": "markdown", "source": [ "# プロキシを起動\n", "ウェブサーバへのアクセスをするためのプロキシを起動します。\n", "\n", "表示されたURLをクリックして開くと別タブでアプリが開きます。\n", "\n", "Colabなので、ロードにある程度時間がかかります(30秒くらい)。" ], "metadata": { "id": "WhxcFLQEpctq" } }, { "cell_type": "code", "source": [ "# (7) プロキシを起動\n", "from google.colab.output import eval_js\n", "proxy = eval_js( \"google.colab.kernel.proxyPort(\" + str(PORT) + \")\" )\n", "print(f\"{proxy}front/\")" ], "metadata": { "id": "nkRjZm95l87C", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "6a9869a8-7571-4eec-ce82-2da1859dd3b5" }, "execution_count": 18, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "https://b5ds0951k67-496ff2e9c6d22116-8088-colab.googleusercontent.com/front/\n" ] } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "3hwJmseXZhJY" }, "execution_count": null, "outputs": [] } ] }