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

时间:2019-12-28 04:52:16

标签: visual-studio-code google-colaboratory

我知道在GCP上,我们可以设置一个vscode服务器并连接到该服务器。但是我在这里想要了解的是,是否可以从本地运行的vscode连接到Google Colab上的运行时实例(免费的实例,即https://colab.research.google.com)。
如果我没记错的话,我们可以连接到vscode中的任何其他jupyter内核,而不必在本地创建新实例并连接到它。
因此,我想知道是否可以说首先创建一个Python 3笔记本,然后从您的本地计算机启动vscode,连接到colab运行时并在vscode中进行编码?

这里没有本地内容,所有文件,笔记本,所有内容都依赖于Google colab,仅是使用vscode而不是Google自己的编辑器进行编码和执行代码(调试等)。

6 个答案:

答案 0 :(得分:9)

我刚刚发现了另一种不用ssh的方法。

# Install jupyterlab and ngrok
!pip install jupyterlab 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。或将URL与VSCode一起用于remote Jupyter kernel

答案 1 :(得分:4)

为此colab-shh构建了一个python软件包。虽然,您必须手动从浏览器中打开colab并创建一个实例,因为colab还没有API可以执行此操作。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

是的,这很有可能。今天才处理。

您需要做的是与google collab建立ssh连接。 将其写在google collab jupyter笔记本上:

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连接到collab:

这是终端命令: $ ssh @ 0.tcp.ngrok.io -p   (它会询问您上述片段生成的密码) 您现在应该可以连接。

但是,如果您想使用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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

当前的 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 并在系统询问时输入 <64-digit-password> 就可以了!