はじめに
最近は技術記事がGoogle Colaboratoryにあわせてサンプルコードを書いてくれることが多く、Colabを使う機会が格段に増えました。そこでGPUが使用制限に達してしまい、Colab proを使おうかと考えていたのですが、それならVSCodeで使えるようにしたいなと思うようになったので調べていたのですが、そもそもSSHというものをなんとなくでしか知らない状態でやっていたので、時間がかかったため、初心者に向けて手順を省略せずに説明しようと思い、本日は紹介をします。
準備
ngrokのアカウントを作成します。
https://ngrok.com/
Google Colaboratoryを開きます。
そして以下のコードを1つずつセルにコピーして実行します。
import random, string, urllib.request, json, getpass
# Generate root password
password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(20))
# Download ngrok
! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
! unzip -qq -n ngrok-stable-linux-amd64.zip
# Setup sshd
! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null
ngrokのサイトにログインし、Getting Started
->Your Authtoken
を開き、Configuration File
の項目にあるtokenをコピーします。
# これはコードでなくngrokの画面の説明です
# in ngrok.yml
authtoken: XXXXXXXXXXXXX(ここをコピー)
次に以下をColabで実行します。
#Run sshd
get_ipython().system_raw('/usr/sbin/sshd -D &')
# ngrokで自分のトークンを確認する
authtoken = "あなたのトークンをここにいれる"
#Create tunnel
get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 22 &')
!pip install colab_ssh --upgrade
from colab_ssh import launch_ssh# in a separate cell in case you need to restart the service
ngrokToken = "1r395f88TULELKkSEYktSWGLWIT_4g8VkjVdeKHqZybzzWUhd"
launch_ssh(ngrokToken, password="password")
with urllib.request.urlopen('http://localhost:4040/api/tunnels') as response:
data = json.loads(response.read().decode())
(host, port) = data['tunnels'][0]['public_url'][6:].split(':')
print(f'SSH command: ssh -p{port} root@{host}')
これでSSH接続のためのColabでの準備は終了です。
VSCodeでの設定
vscodeを開きます。
ctrl+p
で検索ウィンドウを開きconfig
と入力して .sshにあるconfig
ファイルを開きます。
一番下の行にColabから出力されたものを貼り付けます。
私の場合はこちらを貼り付けました。(人によって内容は異なります)
Host google_colab_ssh
HostName 6.tcp.ngrok.io
User root
Port 11121
SSH接続
左メニューから拡張機能を選択してRemote - SSH
をインストールします。
左のメニューからリモートエクスプローラー(モニターに><のマークのアイコン)を選択して、上のVをクリックして(セレクトボックスから)SSH Targets
を選択します。
google_colab_ssh
を見つけ、Connect to Host in New Window
をクリック (フォルダーマークに+がかかれたアイコン)します。
新たなウインドウが表示されて、パスワードの入力を求められるのでpassword
と入力します。 (Colabで設定しました)
左メニューの拡張機能からPythonをインストールします。
左のメニューからフォルダーを開く(青ボタン)を選択して、上部に/root/
とでるのでOKを押す (これでColabのrootディレクトリをカレントディレクトリにできます)
ctrl+shift+p
でコマンドパレットを開き、Jupyter: Create New Blank Notebook
を検索し、選択することで新しいnotebookを作成できます。
試しにセルに以下を入力して、Colabが動くか確認します。
print("Hello World")
ファイルは保存ボタンを押さないと新規作成されませんので、作成する際には最初に上部メニューの保存ボタンを押して任意のディレクトリに保存してください。
ターミナルから接続する
ターミナルから接続する場合はColabで出力されるコマンドを入力します。
私の場合は以下のように出力されています
SSH command: ssh -p11121 root@6.tcp.ngrok.io
sshコマンドがなかったため、私はapt-get update``apt-get install ssh
を行いました。
コマンドを打った後、ssh接続の確認をとられるので、yes
と入力してからパスワードを打ち込めば接続ができるかと思います。
終わりに
SSH接続など当たり前のようにやっていますが、私のようにやったことないかたも多いのかなと思い、手順を省略せず記事にしてみました。VSCodeの左メニューなどわからないとなったら、調べていただけると簡単にわかるかと思います。
参考サイト
https://qiita.com/hazigin/items/c291adf5dc9ccc13d11f
https://webbigdata.jp/ai/post-7248
https://blog.serverworks.co.jp/tech/2020/02/20/vscode-remote-ssh/