こんにちは、エンジニアのwadaです。
この記事は、ギークフィードアドベントカレンダー2024の10日目の記事です。
ギークフィードの有志が毎日ブログを投稿しているので是非チェックしてみてください。
今回はGoogleColabにトンネルを掘って自分のターミナルからインスタンスにアクセスする方法を共有します。この方法を使うことでGoogleColabが提供するウェブサイト上のターミナルを回避して、自分の好きなターミナルからGoogleColabにアクセスでき、数百GBのマシンや高級なGPUが自分のものになっているような気分になれます。
やることは以下です
- Googleコラボでインスタンスを手動で起動
- トンネルの設定
- GoogleColabでインスタンスを起動
- ターミナルからコラボのインスタンスにアクセス
トンネルを設定
まず、localtonetというサービスにアクセスして以下を行います。
- APIキーの取得
- トンネルの作成
リバーストンネルはインターネットからアクセスできるサーバーを持っていれば作れますが、
このサービスを使えば、手間のかかるサーバーの設定を特にしなくてもクリックするだけでトンネルを作成できます。
(ngrokやlocaltunnelなども使ってみましたが、localtonetはtcp, udpトンネルも簡単に設定できるのでお勧めです)
まず、ダッシュボートでAuthTokenを取得しておきます。(図の赤線部)
次に以下のように「TCP-UDP」メニューにアクセスし、localtonet経由でGoogleColabインスタンスのlocalhost:22ポートにアクセスできるように設定します。
別のトンネルの情報が見えてますが、再接続するたびにURLが変わるので問題ないです。
GoogleColabでインスタンスを起動
次にインスタンスを起動します。
GoogleColabにアクセスし、以下の設定をした後Colabに貼り付けて実行してください。
- 自分のsshの公開鍵を<YOUR PUBKEY>に設定する
- localtonetで取得したAuthTokenを<YOUR TOKEN>に設定する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# ツールをインストール ! apt-get install --yes ssh tmux vim htop ranger git > /dev/null # SSH setting ! echo "root:root" | chpasswd ! echo "PasswordAuthentication no" > /etc/ssh/sshd_config ! echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config ! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config ! mkdir -p /root/.ssh ! echo <YOUR PUBKEY> ! chmod 700 /root/.ssh ! chmod 600 /root/.ssh/authorized_keys ! service ssh restart > /dev/null # Install localtonet ! wget -q https://localtonet.com/download/localtonet-linux-x64.zip ! unzip -q localtonet-linux-x64.zip ! chmod 777 ./localtonet # Run localtonet !nohup ./localtonet authtoken <YOUR TOKEN> > /dev/null 2>&1 & # Colabの環境変数を設定 !echo 'source <(cat /proc/1/environ | tr "\0" "\n" \ | awk '\''{print "export", $0}'\'') &>/dev/null' \ >> /root/.bashrc |
やっていることは、sshサーバーの起動とlocaltonetの起動ですが、
ちょっと工夫している点として、環境変数PID1のプロセスの環境変数を.bashrcに書き込んでいます。
GoogleColabのインスタンスはコンテナとして起動されているらしく、コンテナ起動時に環境変数が外から設定されており、設定ファイルがインスタンス内になさそうだったのでこの方法を使っています。
これをしないとGPUのライブラリが正常に読み込まれません。
トンネル起動
localtonetに戻って作ったトンネルを起動します。
作成したトンネルのACTIONの欄にあるボタンを押すと接続され、接続に成功するとSuccessが表示されます。
ターミナルから接続
自分の好きなターミナルを使ってトンネルのSERVER DOMAINにrootユーザーでアクセスするとコラボのインスタンス内に入れます。
見てください、メモリが300GB以上あります。
環境変数設定やってるのでちゃんとGPUも認識されています。
まとめ
今回は、GoogleColabにトンネルを掘って自分の好きなターミナルからアクセスしてみました。
あんまりこんなことをやる人はいないかもしれませんが、ためにしにちょっと大きめの生成AIを実行したいときに、設定ファイルをshellから送れるのでちょっと便利です。
やってないのですが、同じ方法でgithub-actionsのコンテナとかにも入れると思うので、暇があれば、入って中がどんな風に設定されているのかを見るのも面白いかもしれません。
- GoogleColabにトンネルを掘る - 2024-12-10
- ラズパイで映像をストリーミングしてみた - 2023-12-06