是否可以将 vscode(在本地机器上)与 Google Colab(免费服务)运行时连接?

Rik*_*ika 24 visual-studio-code google-colaboratory

我知道在 GCP 上,我们可以设置一个 vscode 服务器并连接到它。但是我在这里想要的是知道是否可以从本地运行的 vscode连接到 Google Colab 上的运行时实例(免费的,即:https://colab.research.google.com)。如果我没记错的话,我们可以在 vscode 中连接到任何远程 Jupyter 内核,而不是在本地创建一个新实例并连接到它。

所以我想知道是否可以先创建一个 Python 3 notebook,然后从本地机器启动 vscode,连接到 Colab 运行时并在 vscode 中编写代码?

这里没有任何本地内容,所有文件、笔记本、一切都驻留在 Google Colab 上,它只是使用 vscode 而不是 Google 自己的编辑器来编码和执行代码(调试等)。

更新

感谢回答,我可以成功连接到 Google Colab。但是,当我退出 ssh 并尝试再次登录时,我遇到了以下情况:

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)
Run Code Online (Sandbox Code Playgroud)

我重新启动了 Google Colab 运行时,我什至更改了 ngrok 令牌并再次尝试,没有运气!

Kor*_*ich 16

我刚刚找到了另一种不使用 ssh 的方法。

# Install jupyterlab and ngrok
!pip install jupyterlab==2.2.9 pyngrok -q

# Run jupyterlab in background
!nohup jupyter lab --ip=0.0.0.0 &

# Make jupyterlab accessible via ngrok
from pyngrok import ngrok
print(ngrok.connect(8888))
Run Code Online (Sandbox Code Playgroud)

然后它会显示一个 JupyterLab URL

http://f1fe6fb39df6.ngrok.io  # for example
Run Code Online (Sandbox Code Playgroud)

您现在可以单击它来运行 JupyterLab。或者将 URL 与 VSCode 一起用于远程 Jupyter 内核

你也可以使用我的库来缩短它。

!pip install kora -q
from kora import jupyter
jupyter.start(lab=True)
Run Code Online (Sandbox Code Playgroud)

  • 事实证明,在 2021 年 1 月底,有些您必须安装 `jupyter-client==6.1.5` 和 `jupyterlab==1.2.18` 或另一对以满足所有依赖项并打开整个服务器 (2认同)

den*_*niz 11

当前接受的答案对我不起作用。对我有用的是在谷歌协作中运行以下命令:

\n
import random, string\npassword = \'\'.join(random.choice(string.ascii_letters + string.digits) for i in range(64))\n\n# install pyngrok for opening a tunnel\n!pip install pyngrok -q\n#Setup sshd\n! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null\n\n#Set root password\n! echo root:$password | chpasswd\n! mkdir -p /var/run/sshd\n! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config\n! echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config\n! echo "LD_LIBRARY_PATH=/usr/lib64-nvidia" >> /root/.bashrc\n! echo "export LD_LIBRARY_PATH" >> /root/.bashrc\n\n#Run sshd\nget_ipython().system_raw(\'/usr/sbin/sshd -D &\')\n\n#Ask token\nprint("Copy authtoken from https://dashboard.ngrok.com/auth")\nimport getpass\nauthtoken = getpass.getpass()\n\n#Create tunnel\nfrom pyngrok import ngrok\nngrok.set_auth_token(authtoken)\nprint(ngrok.connect(22, "tcp"))\n!whoami\nprint("Password: {}".format(password))\n
Run Code Online (Sandbox Code Playgroud)\n

输出看起来像这样(只是重要的部分):

\n
.\n.\n.\nCopy authtoken from https://dashboard.ngrok.com/auth\n\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\xc2\xb7\nNgrokTunnel: "tcp://5.tcp.ngrok.io:12345" -> "localhost:22"\nroot\nPassword: <64-digit-password>\n
Run Code Online (Sandbox Code Playgroud)\n

然后你就可以做ssh root@5.tcp.ngrok.io -p 12345,当询问时,输入<64-digit-password>就可以了!

\n


小智 8

是的,这是很有可能的。今天刚搞定。

您需要做的是创建与 google collab 的 ssh 连接。在 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'])"
Run Code Online (Sandbox Code Playgroud)

检查您的 ngrok 状态以获取您的端口号(通过网站)

之后,您可以通过 ssh 连接到 collab:

这是终端命令:

$ ssh <user>@0.tcp.ngrok.io -p <portNum>
Run Code Online (Sandbox Code Playgroud)

(它会要求您提供上述 snipet 生成的密码)您现在应该可以连接了。

但是如果你想使用vscode,通过远程SSH扩展重复与ssh的连接

来源:

远程 ssh:https : //marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh连接:从 PC 的控制台通过 ssh 连接到 google collab

  • 我想当我尝试时我确实选择了不同的端口!这就是导致错误的原因吗?我现在该如何解决呢?请看看这个[链接](https://pasteboard.co/IONKNQo.jpg)。这是我的 vscode ssh 配置。两个都是空的!不过这次我收到了一个新错误!我得到: ```Traceback(最近一次调用最后):文件“&lt;string&gt;”,第 1 行,在 &lt;module&gt; IndexError:列表索引超出范围``` (2认同)
  • 我能够毫无问题地连接。但我想知道我通过 vscode 获得并连接到的存储和机器是来自 colab 的吗?如果是这样,是否有办法使我创建的文件持久存在?因为一旦会话超时就会发生......一切都消失了。仅供参考:我正在使用 colab pro (2认同)

Adi*_*dre 8

有一个为此构建的 python 包colab-ssh。不过,您必须从浏览器手动打开 colab 才能创建实例,因为 colab 还没有 API 来执行此操作。