在Linux服务器上运行Jupyter notebook server教程

摘要:
于是想给实验室的服务器配置jupyternotebook,供本机远程访问。服务器已经装了Anaconda并且自带Jupyternotebook。唯一需要配置的就是如何安全运行notebookserver以便能够远程访问它。主要参考官方文档Runninganotebookserver。配置JupyterNotebookServer生成notebook配置文件先查看服务器是否已有notebook配置文件,linux下的路径一般是“/home/USERNAME/.jupyter/jupyter_notebook_config.py”。notebook5.0以上的版本,需要运行一行命令jupyternotebookpassword,会让你填写密码和确认密码,并且生成含有密码的hash的jupyter_notebook_config.json在配置文件夹下。于是需要给notebook设置新的kernel。
在Linux服务器上运行Jupyter notebook server教程

很多deep learning教程都推荐在jupyter notebook运行python代码,方便及时交互。但只在本地运行没有GPU环境,虽然google colab是个好办法,但发现保存模型后在云端找不到模型文件,且需要合理上网才能访问。于是想给实验室的服务器配置jupyter notebook,供本机远程访问。踩了不少坑,码一下教程以供参考。

服务器环境是Ubuntu 16.04.5 LTS 。本机windows10。分配给我的账号没有root权限,自用的python环境是用conda建了一个虚拟环境。

服务器已经装了Anaconda并且自带Jupyter notebook。唯一需要配置的就是如何安全运行notebook server以便能够远程访问它。主要参考官方文档Running a notebook server


配置Jupyter Notebook Server


生成notebook配置文件

先查看服务器是否已有notebook配置文件,linux下的路径一般是“/home/USERNAME/.jupyter/jupyter_notebook_config.py”。如果没有进行过配置,默认是没有这个文件的,需要自己生成:

$ jupyter notebook --generate-config

这行代码会在当前路径下生成一个.jupyter文件夹,并且文件夹中含有配置文件jupyter_notebook_config.py


配置密码

如果是notebook5.3以上的版本,此时可以直接运行jupyter notebook命令,会以一个带有token的地址访问notebook,打开后会让你填写token和设置新的password,之后就都以设置的密码登录。

notebook5.0以上的版本,需要运行一行命令 jupyter notebook password ,会让你填写密码和确认密码,并且生成含有密码的hash的jupyter_notebook_config.json在配置文件夹下。


$ jupyter notebook password
Enter password:  ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json

配置ssh

为了安全起见,使用密码的同时最好也使用SSL,这样就不会直接发送未加密的密码hash。

用openssl生成自签名证书(365天有效期):

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

给notebook配置·certfile:

$ jupyter notebook --certfile=mycert.pem --keyfile mykey.key

写入配置文件

编辑 .jupyter 文件夹下的 jupyter_notebook_config.py,按照注释说明加入以下这几行代码,填入之前生成的mycert.pemmykey.key的路径,以及jupyter_notebook_config.json文件中的密码hash串。


# Set options for certfile, ip, password, and toggle off
# browser auto-opening
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>'
c.NotebookApp.open_browser = False

# It is a good idea to set a known, fixed port for server access
c.NotebookApp.port = 9999

这时候在本机浏览器键入https://xx.xx.xx.xx:9999(服务器ip)就可以访问了。


给notebook指定新的kernel


由于notebook的默认python环境是服务器的base,但我需要用自己的虚拟环境下的python解释器。于是需要给notebook设置新的kernel。

在Linux服务器上运行Jupyter notebook server教程第1张


查看当前的python解释器路径

进入我的虚拟环境下运行python,查看Python解释器所在位置:


>>>import sys
>>>sys.executable

同时在Jupyter notebook运行这两行代码,看到的果然是base的路径。


新建notebook kernel

回到base环境运行如下代码,找到Jupyter的内核所在位置。


$jupyter kernelspec list

Jupyter是通过kernels文件夹下的子文件夹来管理kernel的,这时候能看到只有一个python3文件夹。所以如果要建新的kernel,需要新建一个自命名的文件夹,然后把python3文件夹下的kernel.json复制过来,修改参数值(需要root权限)。

编辑新的kernel.json文件,将python路径改为自己虚拟环境中的python,display_name取一个不是python3的以作区分。


{
 "argv": [
  "/home/lcy/.conda/envs/lcyVenv/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "lcyPy",
 "language": "python"
}

此时打开Jupyter notebook看到了刚刚自定义的新kernel,但新建一个lcyPy文件却发现提示无法连接到kernel。

在Linux服务器上运行Jupyter notebook server教程第2张

查到的解决方案是在虚拟环境下安装ipython kernel,代码如下:


$source activate lcyVenv          
$conda install notebook ipykernel  
$ipython kernel install --user	 

然后回到base下开启jupyter notebook就能用了。

免责声明:文章转载自《在Linux服务器上运行Jupyter notebook server教程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java笔试练习题structs 标签库(html)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux下IM server搭建

一步一步开始做。 附录: 一套开源协议:http://www.igniterealtime.org/index.jsp Proso:http://prosody.im/ 那谁网友的笔记http://www.cppblog.com/converse/archive/2009/01/13/71902.html 网友的一些观点: msn是用几个不同的服务器分别运...

Python获取命令行参数

sys.argv[] 包含命令行参数的字符串列表,通过下标获取参数。 例如: ? #!/usr/bin/python # Filename: using_sys.py    importsys    print'The command line arguments are:' fori insys.argv:     printi    p...

C#程序执行Python脚本

方法介绍:      通过调用“Python.exe”程序,执行脚本文件。所以,本方式要求电脑上已经安装了Python,拥有程序Python.exe程序。 现在,有如下py脚本:Add.py import sys def Add(a,b): return a+b if __name__=='__main__': X = int(sys....

linux服务器无法解压rar文件的解决方法

报错是:command not found 解决方法: 先下载一下rarlinux的包,但是尽量下载64位的,因为现在的服务器基本都是64位的,如果你不小心下错了版本就会很麻烦以下的代码可以让客服帮你运行,因为需要管理员权限: 首先先下载: wegt https://www.rarlab.com/rar/rarlinux-x64-5.8.0.tar.gz...

linux下/etc/rc.d目录的介绍及redhat启动顺序

init inittab rc0 rc1 rc2 rc3 rc5 rc6 rcS init.dinit 系统启动超级进程inittab 进程启动配置文件rc0 - rc6 各启动级别的启动脚本rcS 单用户模式启动脚本init.d 启动脚本存放目录 init目录有时候是直接在/etc目录下的,/etc目录下有时候也有inittab 、rc0~6等目录,不过...

Squirrel语言初探(可以使用VC6或者MinGW编译)

Squirrel语言初探 为啥我要关注Squirrel语言?原来Squirrel就很像我希望设计出的理想中的语言(当然也不完全符合)。比如我觉得Lua的语法表述不清晰,累赘,于是想用C系语法来代替Lua语法,于是Squirrel实现了;比如Lua中没有类的结构,我想在我的语言里面加入类(基于表来实现),于是Squirrel实现了;比如我痛恨~=号,–[[...