如何远程连接到 GCP ML Engine/AWS Sagemaker 管理的笔记本?

How to remotely connect to GCP ML Engine/AWS Sagemaker managed notebooks?

GCP 终于发布了托管的 Jupyter 笔记本。我希望能够通过连接到本地笔记本电脑进行交互。 IE。我使用 PyCharm 通过传递其 URL 和令牌参数来连接到外部配置的 jupyter notebbok 服务器。

问题也适用于 AWS Sagemaker 笔记本。

在 AWS 上,您可以使用 AWS Glue 创建 developer endpoint,然后从那里创建 Sagemaker notebook。开发人员端点允许您通过 ssh 连接到您的 python 或 Scala spark REPL,它还允许您通过隧道连接和从任何其他工具访问,包括 PyCharm.

对于 PyCharm 专业人士,我们甚至 tighter integration,允许您远程 SFTP 文件和调试。

如果您需要在笔记本上安装任何依赖项,除了直接在笔记本上安装外,您始终可以选择 new>terminal,您将直接从您的 jupyter 环境连接到该机器你可以安装 anything you want.

你好olive_tree,

感谢您使用 Amazon SageMaker。

您是否尝试过 CreatePresignedNotebookInstanceUrl 使用 url 访问您的笔记本实例?

我们总是根据客户的要求重新评估我们积压的功能,因此我们感谢对此功能的反馈。

如果还有什么我们可以帮忙的,请告诉我们。

谢谢,
尼拉姆

GCP 的 AI Platform Notebooks 会自动创建一个永久性 URL,您可以使用它来访问您的笔记本。这就是您要找的吗?

AWS 本身不支持通过 SSH 连接到 SageMaker 笔记本实例,但没有什么能真正阻止您自己设置 SSH。

唯一的问题是这些实例没有获得 public IP 地址,这意味着您必须创建反向代理(例如使用 ngrok)或通过 bastion box 连接到它。

使 ngrok 解决方案起作用的步骤:

  • curl https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip > ngrok.zip
  • 下载 ngrok
  • unzip ngrok.zip
  • 创建 ngrok 免费帐户以获得 tcp 隧道的权限
  • 运行 ./ngrok authenticate 用你的代币
  • ./ngrok tcp 22 > ngrok.log & 开始(并将其置于后台)
  • 日志文件将包含 url 因此您知道连接到哪里
  • 创建 ~/.ssh/authorized_keys 文件(在 SageMaker 上)并粘贴您的 public 密钥(可能 ~/.ssh/id_rsa.pub 来自您的计算机)
  • ssh 通过调用 ssh -p <port_from_ngrok_logfile> ec2-user@0.tcp.ngrok.com(或他们分配给您的任何主机,它将位于 ngrok.log)

如果你想自动化,我建议使用lifecycle configuration scripts

另一个好技巧是将下载、解压缩、身份验证和启动 ngrok 包装到 /usr/bin 中的某些二进制文件中,这样您就可以在它死掉时从 SageMaker 控制台调用它。

完全解释如何使用生命周期脚本使其自动化有点太长了,但我已经在 https://biasandvariance.com/sagemaker-ssh-setup/ 上写了详细的指南。

有一种方法可以通过 SSH 连接到 Sagemaker notebook 实例,而无需使用 ngrok 等第三方反向代理,也无需设置 EC2 堡垒,也无需使用 AWS Systems Manager,您可以通过以下方式实现。

先决条件

  • 为笔记本实例使用您的自己的 VPC,而不是 AWS/Sagemaker 管理的 VPC
  • 在笔记本实例的安全组中配置入口规则以允许 SSH 流量(TCP 端口 22)

怎么做

  • 创建实例启动时执行的生命周期脚本配置
  • 在生命周期脚本中添加以下代码片段:
INSTANCE_IP=$(/sbin/ifconfig eth2 | grep 'inet addr:' | cut -d: -f2 | awk '{ print }')
echo "SSH into the instance using : ssh ec2-user@$INSTANCE_IP" > ~ec2-user/SageMaker/ssh-instructions.txt
  • /home/ec2-user/.ssh/authorized_keys 中添加你的 public SSH 密钥,可以使用 jupyterlab UI 的终端手动添加,也可以在上面的生命周期脚本中添加

当您的用户打开 Jupyter 界面时,他们会找到 ssh-instructions.txt 文件,其中提供了要使用的主机和命​​令:ssh ec2-user@<INSTANCE_IP>

如果您想从本地环境使用 SSH,您可能需要连接到在 VPC 内路由流量的 VPN。