前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在远程服务器上运行Jupyter Notebooks?

如何在远程服务器上运行Jupyter Notebooks?

作者头像
AiTechYun
发布2019-07-12 14:58:50
3.8K0
发布2019-07-12 14:58:50
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

Jupyter Notebook是许多数据科学家工具箱中的一个主要工具。作为一个工具,Jupyter Notebook可以通过交互方式简化数据分析、模型建模和实验,从而缩短从编码到查看结果的反馈循环,从而提高工作效率。

在很多情况下,在笔记本电脑或工作站上运行一个Jupyter Notebook就足够了。然而,如果您正在处理大型数据集、执行计算开销较大的数据处理或学习复杂模型,您可能需要比笔记本电脑更强大的额外功能。也许你在大型图形上运行图形卷积网络,或者在大型文本语料库上使用递归神经网络进行机器翻译,需要更多的CPU内核、RAM或几个GPU。幸运的是,您可能在远程服务器上有这些资源可用!

如果您的远程服务器具有图形用户界面(GUI),那么您就很幸运了。您可以使用远程桌面软件来访问远程服务器,或者像您的笔记本电脑一样使用Jupyter Notebook。

但是,许多服务器没有GUI。如果处于这种情况,可以通过在笔记本电脑上编写一个python脚本来设置实验,在数据的一小部分上运行它来验证它是否可以运行,将它复制到远程服务器,然后从命令行执行它。您甚至可以在笔记本中设置实验,并使用jupyter nbconvert将笔记本导出到脚本中——以编写您的“notebook.ipynb”脚本。尽管此工作流确实允许您在远程服务器上运行代码,但您不能再使用Jupyter Notebook来进行试验,例如,以交互方式显示结果。真可惜!

在本文中,我将向您展示如何在远程服务器上运行Jupyter Notebook,以及如何在您的笔记本上访问它。我还将演示如何设置两个bash命令以简化整个过程。

启动远程记事本服务器

我们将使用安全Shell协议(SSH)在远程服务器上启动Jupyter Notebook服务器。SSH允许我们向远程服务器发送命令。基本语法如下:

代码语言:javascript
复制
1ssh username:password@remote_server_ip command

您应该发送的确切命令在一定程度上取决于您的上下文。在我的例子中,我与其他没有在共享环境中安装Jupyter的人共享一个远程服务器。因此,我的第一步是转到我的项目文件夹,激活虚拟环境,并启动notebook服务器。我特别想在远程服务器上执行以下三条命令:

代码语言:javascript
复制
1cd project_folder
2. virtual_environment/bin/activate
3jupyter notebook --no-browser --port=8889

我使用—no-browser标志执行jupyter notebook命令,启动一个浏览器来启动jupyter notebook,因为如果远程服务器没有GUI,则无法显示浏览器。我还使用—port=8889标志将端口从默认端口8888更改为端口8889。这是个人偏好;将本地和远程笔记本放在不同的端口上,以便更容易地查看代码运行的位置。

要在远程服务器上执行命令,我们运行组合命令。

代码语言:javascript
复制
1nohup ssh -f username:password@remote_server_ip "cd project_folder; . virtual_environment/bin/activate; jupyter notebook --no-browser --port=8889"

注意,我用一行代码将这三个命令分隔开来;而不是换行。执行此命令将启动端口8889上的Jupyter Notebook服务器,并让它在后台运行。最后,我在ssh命令中添加了-f标志,以将进程推送到后台,并在前面加上nohup命令,使进程的所有输出保持静默,以便您可以继续使用终端窗口。您可以在这里阅读有关thenohup命令的更多信息。

访问笔记本

现在,您可以访问在URL中键入的笔记本

代码语言:javascript
复制
1remote_server_ip:8889

此命令要求您记住IP地址或为网页加书签。但是,我们可以使用端口转发使远程笔记本像本地笔记本一样容易访问:

代码语言:javascript
复制
1nohup ssh -N -f -L localhost:8889:localhost:8889 username:password@remote_server_ip

-N标志告诉ssh不会执行任何远程命令。此时,我们不需要执行任何远程命令。如前所述,-f标志将ssh进程推到后台。最后,-L标志使用语法local_server:local_port:remote_server:remote_port指定端口转发配置。该配置指定所有发送到本地计算机上的端口8889(例如,您的笔记本电脑)的请求都要发送到远程计算机上的端口8889(用户名:password@remote_server_ip)。与前面一样,nohup命令的前缀是使输出静默。

上述命令的效果是,您现在可以访问浏览器中的远程木星笔记本服务器

代码语言:javascript
复制
1localhost:8889

就像你在本地运行笔记本一样。

停止远程笔记本服务器

原则上,您可以让notebook服务器无限期地运行在远程服务器上(除非重启或崩溃),但是您可能需要停止服务器,例如升级您的jupyter版本。如果您需要停止它,有两种方法:通过浏览器或通过命令行。

通过浏览器窗口

在Jupyter Notebook的最新版本中,您可以在浏览器窗口右上角找到一个退出按钮,如下图中箭头所示。如果Jupyter Notebook您按下它,您将必须使用我们之前看到的启动命令重新启动服务器。

退出按钮

通过命令行

如果无法升级到具有退出按钮的新版本Jupyter,或者只是更喜欢通过终端工作,也可以从命令行停止服务器。Jupyter有一个shell命令停止笔记本:

代码语言:javascript
复制
1jupyter notebook stop 8889

其中8889是端口号。您可以使用命令在远程服务器上执行它

代码语言:javascript
复制
1ssh username:password@remote_server_ip "jupyter notebook stop 8889"

不幸的是,这个命令目前存在bug,但是我将它包含在这里,希望它将来能够工作。但是,作为一种解决方法,您可以使用以下命令来终止jupyter进程:

代码语言:javascript
复制
1ssh username:password@remote_server_ip "pkill -u username jupyter"

其中-u用户名表示只有由用户名启动的Jupyter进程应该被终止。这样做的缺点是,如果一次运行多个笔记本服务器,您将关闭所有的笔记本服务器。最后,您当然可以通过登录到远程服务器、启动notebook服务器并保持终端窗口打开来手动管理服务器。这允许您使用常用的CTRL+C键盘命令关闭笔记本服务器。

梳理你的工作流程

记住所有这些命令可能非常麻烦。幸运的是,我们可以通过为每个命令创建bash别名来简化工作。在~/.bashrc文件中添加以下行:

代码语言:javascript
复制
1alias port_forward='nohup ssh -N -f -L localhost:8889:localhost:8889 username:password@remote_server_ip'
2alias remote_notebook_start='nohup ssh -f username:password@remote_server_ip "cd rne; . virtual_environment/bin/activate; jupyter notebook --no-browser --port=8889"; port_forward'
3alias remote_notebook_stop='ssh username:password@remote_server_ip "pkill -u username jupyter"'

通过在终端中键入source.bashrc来加载命令。现在,您可以使用终端中的“远程笔记本启动”和“远程笔记本停止”命令分别启动远程笔记本服务器(和设置端口转发)并将其关闭。

总结

在这篇文章中,我向您展示了如何使用bash命令在远程服务器上启动、访问和停止Jupyter Notebook,并展示了如何创建bash别名来简化操作。

我希望这些命令可以提高您的数据科学生产力,几乎无缝地允许您从Jupyter Notebook和远程服务器上可用的任何计算资源中获益。

End

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 启动远程记事本服务器
  • 访问笔记本
  • 停止远程笔记本服务器
  • 通过浏览器窗口
  • 通过命令行
  • 梳理你的工作流程
  • 总结
相关产品与服务
机器翻译
机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档