Paperspace Notebookインスタンスへのトンネリング通信
Paperspace GradientでWeb UIを実行していると多少気になるのがGradioサーバー(gradio.io, gradio.live)との通信速度が遅い点、たまに通信がロストしてボタンが効かなくなる等のバグが発生する点です。これを解決するにはGradioを使用せずに自前でトンネリング通信を確立し、Notebook内で起動中のWeb UI(http://127.0.0.1:7860)に外部から接続する必要があります。
Cyberes氏が、ratholeを用いてPaperspace Gradientへのトンネリング通信を実現する方法を公開しているので紹介します。
基本的にPaperspace Gradientへの外部からのトンネリング通信は許可されておらず、Paperspaceに該当トラフィックを検出されるとアカウント停止処分を受けることになります。しかしCyberes氏によると独自サーバーでratholeを使えばPaperspaceはトラフィックを検出出来ないとのことでした。
試したところ確かにアカウントがロックされることなく使用出来ているので軽く内容を紹介しておきます。ただし、もしアカウント停止などになった場合にPaperspaceとコンタクトを取り技術的な詳細内容を英語で説明しなければいけません。ネットワークの知識のある方限定、かつ自己責任でお願いします。
使用サーバー
AWS Lightsail - 512 MB RAM / 1 vCPU / 20 GB SSD / Ubuntu
グローバルIPアドレスを固定して運用可能であれば何でも可です。私はLightsailで最小構成月額$3.5のインスタンスを別目的で契約していたのでそのまま使用しました。OSはDebian系であれば間違いありません。
ファイアウォールはratholeクライアント(Paperspace)からの接続用にTCP8823番ポートを開放、トンネリングしたサービスへのアクセス用に9001番ポートを開放になります(公開にcloudflaredを使用すれば9001番ポートの開放は不要)。
Lightsail側セットアップ
systemdのユニットファイルなどを用意するのが面倒なのでDocker Composeを使用しました。予めDocker, Docker Composeのインストールが必要です。
ファイル構成
rathole/
docker-compose.yaml
server.toml
キーペアの生成
Private Key はサーバー用、Public Keyはクライアント用です。
$ docker run -it --rm rapiz1/rathole --genkey
Private Key:
sNfhX5ueFn8ez+kUMFnneB4X/R/8q8qNfhjF28y0Mls=
Public Key:
s2QpqpRsgshMmk4WZPC5GuOLCN4LMjBuMxB3xL2G9Gw=
server.toml (rathole設定ファイル)
local_private_key に上記コマンドで生成した Private Key を設定、token は任意のパスワードを設定します。
[server]
bind_addr = "0.0.0.0:8823"
[server.transport]
type = "noise"
[server.transport.noise]
local_private_key = "sNfhX5ueFn8ez+kUMFnneB4X/R/8q8qNfhjF28y0Mls="
[server.services.webui]
token = "use_a_secret_that_only_you_know"
bind_addr = "0.0.0.0:9001"
docker-compose.yaml
version: '3.7'
services:
rathole:
image: rapiz1/rathole
restart: unless-stopped
volumes:
- ./server.toml:/app/server.toml
ports:
- "8823:8823"
- "9001:9001"
command: --server /app/server.toml
起動
restart: unless-stopped としているのでサーバーを再起動しても自動で立ち上がります。
$ cd rathole/
$ docker-compose up -d
停止
$ cd rathole/
$ docker-compose down
Paperspace側セットアップ
ファイル構成
/notebooks/rathole/
rathole (実行ファイル)
client.toml
実行ファイルの取得
sudo apt install unzip
mkdir -p /notebooks/rathole/
LATEST_RELASE=$(curl -s https://api.github.com/repos/rapiz1/rathole/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep "rathole-x86_64-unknown-linux-gnu.zip")
TMP=$(mktemp -d)
wget "$LATEST_RELASE" -O $TMP/rathole-x86_64-unknown-linux-gnu.zip
sudo unzip $TMP/rathole-x86_64-unknown-linux-gnu.zip -d /notebooks/rathole/
rm -rf $TMP
client.toml (rathole設定ファイル)
remote_addr にLightsailのグローバルIPアドレスを設定(例として192.0.2.1にしています)、remote_public_key にキーペアの生成で得られたPublic Key、
token はサーバーと同じものを設定します。
[client]
remote_addr = "192.0.2.1:8823"
[client.transport]
type = "noise"
[client.transport.noise]
remote_public_key = "s2QpqpRsgshMmk4WZPC5GuOLCN4LMjBuMxB3xL2G9Gw="
[client.transport.tcp]
keepalive_secs = 10
keepalive_interval = 5
[client.services.webui]
token = "use_a_secret_that_only_you_know"
local_addr = "127.0.0.1:7860"
起動
$ /notebooks/rathole/rathole -c /notebooks/rathole/client.toml
rathole起動用にipynbを作成して以下の様なコードブロックを追加しておくと楽です。
!/notebooks/rathole/rathole -c /notebooks/rathole/client.toml
接続
webui.py に --port 7860 オプションを付けて起動すると http://127.0.0.1:7860 でweb UIが起動、Lightsailの9001番ポートからweb UIにアクセス可能になります。私はこの方法でAuto-Photoshop-StableDiffusion-Pluginも使用出来ています。
cloudflaredの使用
Lightsailでcloudflared(Cloudflare Tunnel)を使用すると9001番ポートの開放が不要になるほか、任意のドメインへの割り当てやTLS化、認証設定なども出来るのでおすすめです(公開ドメインへの割り当てはドメインの保有とCloudflareのNS使用が必要)。なお、Paperspaceでcloudflaredを起動すると即アカウント停止になるので気をつけてください。
この記事が気に入ったらサポートをしてみませんか?