Is it possible to connect vscode (on a local machine) with Google Colab (the free service) runtime?

半城伤御伤魂 提交于 2020-06-24 04:55:42

问题


I know on GCP, we can set up a vscode server and connect to that. But what I'm after here, is to know whether it is possible to connect to the runtime instance on Google Colab (the free one ie: https://colab.research.google.com) from a locally run vscode. If I'm not mistaken, we can connect to any remote Jupyter kernel in vscode instead of creating a new instance locally and connecting to it.

So I want to know if it is possible to first create a Python 3 notebook and then from your local machine, fire up vscode, connect to the Colab runtime and code inside vscode ?

There is nothing local here, all files, notebooks, everything resides on Google Colab, it's just the coding and executing the code (debugging, etc) using vscode instead of Google's own editor.

Update

Thanks to the answer, I could successfully connect to Google Colab. However, when I exited the ssh and tried to log in again I faced this:

Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time ...
2048 SHA256:yxFwLslfRq7YZFWNIhAD8TfJdp6sTfFbR2CXOWcysOA root@7561da0610da (RSA)
Creating SSH2 ECDSA key; this may take some time ...
256 SHA256:6Yo/7I9JPyYfKJYvtiVelNFHrIL7R1xaB09fDWbVYf4 root@7561da0610da (ECDSA)
Creating SSH2 ED25519 key; this may take some time ...
256 SHA256:r1HvJi/Y9twPkXoayNA4cSF55eH4MdOETHhXNSiC4ok root@7561da0610da (ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Copy authtoken from https://dashboard.ngrok.com/auth
··········
Root password: aCsRocquey6953P9tHhF
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.6/json/__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

I restarted the Google Colab runtime, I even changed the ngrok token and tried again, no luck!


回答1:


Yes, it is very possible. Just managed it today.

What you need to do is create an ssh connection with the google collab. Write this on a google collab jupyter Notebook:

import random, string
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
#Set root password
! echo root:$password | chpasswd
! mkdir -p /var/run/sshd
! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
! echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
! echo "LD_LIBRARY_PATH=/usr/lib64-nvidia" >> /root/.bashrc
! echo "export LD_LIBRARY_PATH" >> /root/.bashrc

#Run sshd
get_ipython().system_raw('/usr/sbin/sshd -D &')

#Ask token
print("Copy authtoken from https://dashboard.ngrok.com/auth")
import getpass
authtoken = getpass.getpass()

#Create tunnel
get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 22 &')
#Print root password
print("Root password: {}".format(password))
#Get public address
! curl -s http://localhost:4040/api/tunnels | python3 -c \
    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

Check your ngrok status to get your portnum(via the website)

After that you can connect to collab via ssh:

This is the terminal command:

$ ssh <user>@0.tcp.ngrok.io -p <portNum>

(it will ask you for the password generated by the above snipet) You should be able to connect now.

But if you want to use vscode, repeat the connection with ssh via the Remote SSH extension

sources:

remote ssh: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh connection: Connect to google collab with ssh from console from PC




回答2:


If you exit a session, you can not reconnect, because I believe it changes the port. I tried it too, then it throws an error, saying it's not possible.

But, if you run through the setup again and go the the https://dashboard.ngrok.com/status, you will see, that the port changed. Then you will be able to use it as a new remote connection. This way, I managed it to connect again.

As far as I understand, once a session is terminated, Google will not keep your files.




回答3:


There is a python package that was built for this, colab-shh. Although, you have to manually open colab from and browser to create an instance because colab dosn't have API to do that yet.



来源:https://stackoverflow.com/questions/59508225/is-it-possible-to-connect-vscode-on-a-local-machine-with-google-colab-the-fre

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!