【问题标题】:Is it possible to connect vscode (on a local machine) with Google Colab (the free service) runtime?是否可以将 vscode(在本地机器上)与 Google Colab(免费服务)运行时连接起来?
【发布时间】:2020-04-17 20:45:55
【问题描述】:

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

所以我想知道是否可以先创建一个 Python 3 笔记本,然后从本地计算机启动 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)

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

【问题讨论】:

  • 不,不支持。
  • 那您能把它作为答案发布,这样我们就可以收工了!?

标签: visual-studio-code google-colaboratory


【解决方案1】:

我刚刚找到了另一种不使用 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))

然后它会显示一个 JupyterLab URL

http://f1fe6fb39df6.ngrok.io  # for example

您现在可以单击它来运行 JupyterLab。或者使用带有 VSCode 的 URL 获取remote Jupyter kernel

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

!pip install kora -q
from kora import jupyter
jupyter.start(lab=True)

【讨论】:

  • 原来在2021年1月下旬有些你必须安装jupyter-client==6.1.5jupyterlab==1.2.18或者另外一对才能满足所有依赖并开启整个服务器
  • 最新的非 3 版本 (2.2.9) 仍然有效,所以我指定 jupyterlab==2.2.9 @A.Ametov 感谢您的建议。
【解决方案2】:

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

您需要做的是与 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'])"

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

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

这是终端命令:

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

(它会询问您上述代码片段生成的密码) 您现在应该可以连接了。

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

来源:

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

【讨论】:

  • 非常感谢。将对其进行测试,如果发生任何事情,我会报告;)
  • 我第一次可以成功连接,但是当我退出并再次尝试时,我无法登录!我重置了 ngrok 令牌并再次尝试,但每次都出现错误。我用错误日志更新了问题。如果您能告诉我发生了什么事,将不胜感激
  • 你在vscode配置文件中更改了端口吗?
  • 我想我在尝试的时候确实选择了不同的端口!这是导致错误的原因吗?我现在该如何解决?请看看这个link。这是我的 vscode ssh 配置。两个都是空的!不过这次我遇到了一个新错误!我得到:Traceback (most recent call last): File "&lt;string&gt;", line 1, in &lt;module&gt; IndexError: list index out of range
  • 我可以毫无问题地连接。但是我想知道通过 vscode 给我并连接到的存储和机器来自 colab?如果是这样,是否有办法让我创建的文件持久化?因为一旦会话超时就会发生......一切都消失了。仅供参考:我正在使用 colab pro
【解决方案3】:

当前的accepted answer 不适合我。对我有用的是在 google collab 中运行以下内容:

import random, string
password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(64))

# install pyngrok for opening a tunnel
!pip install pyngrok -q
#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
from pyngrok import ngrok
ngrok.set_auth_token(authtoken)
print(ngrok.connect(22, "tcp"))
!whoami
print("Password: {}".format(password))

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

.
.
.
Copy authtoken from https://dashboard.ngrok.com/auth
··········
NgrokTunnel: "tcp://5.tcp.ngrok.io:12345" -> "localhost:22"
root
Password: <64-digit-password>

然后你可以输入ssh root@5.tcp.ngrok.io -p 12345,当被问到时,输入&lt;64-digit-password&gt; 就可以了!

【讨论】:

  • 这是唯一对我有用的解决方案。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我在第二次登录时遇到了同样的问题,我终于弄明白了。

    此问题是由 ./ngrok 文件没有执行权限引起的。据我了解,当第一次下载ngrok并解压缩时,它获得了执行权限。所以你可以创建一个隧道。但是当 Colab 运行时重新启动时,我认为它会自动回收这些权限,因为当我尝试 ./ngrok authtoken $authtoken .... 时,它给了我权限被拒绝的错误。

    因此唯一需要做的就是重新分配 ./ngrok 执行权限, 例如,运行chmod 755 ./ngrok。脚本将起作用。

    【讨论】:

      【解决方案6】:

      如果退出会话,则无法重新连接,因为我相信它会更改端口。我也试过了,然后报错,说不可以。

      但是,如果您再次运行设置并转到https://dashboard.ngrok.com/status,您将看到端口已更改。然后您将能够将其用作新的远程连接。这样,我设法让它再次连接。

      据我了解,一旦会话终止,Google 将不会保留您的文件。

      【讨论】:

        猜你喜欢
        • 2019-01-13
        • 2021-09-25
        • 1970-01-01
        • 2020-11-15
        • 2021-11-07
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多