在Linux服务器上运行Jupyter notebook server教程
在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.pem
和mykey.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。
查看当前的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。
查到的解决方案是在虚拟环境下安装ipython kernel,代码如下:
$source activate lcyVenv
$conda install notebook ipykernel
$ipython kernel install --user
然后回到base下开启jupyter notebook就能用了。
在Linux服务器上运行Jupyter notebook server教程的更多相关文章
- 利用本地浏览器远程服务器上的jupyter notebook
windows中访问远程服务器的方式有很多种:使用windows系统自带的网络功能,直接输入服务器地址访问:使用putty软件远程访问:使用xftp软件登陆:还可以使用x2go客户端图形界面远程访问. ...
- 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行
一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...
- 在树莓派上搭建jupyter notebook server
自从搬家后,树莓派闲置了好一段时间,最近打算将其利用起来.想来想去,搭个jupyter notebook用要靠谱的,毕竟经常要实验一些Python脚本. 具体过程参考以下链接: https://www ...
- 本地主机访问远程linux系统服务器上的jupyter notebook
1,机器情况:服务器 centos python环境已经配置好了,在虚拟环境下安装了anaconda 并且在里面安装了jupyter notebook 2,主机是 windows ipytho ...
- 使用服务器上的Jupyter notebook。
1.jupyter notebook --generate-config #产生配置文件 2.from notebook.auth import passwd #进入python环境,生成密码密文.第 ...
- 在Linux服务器上运行jar包,并且使jar包一直处于后台执行
1.我jar包在linux的目录为/a/bbb.jar 正常情况下,使用在/a目录下使用 java -jar bbb.jar 可以直接运行该jar包的项目,运行成功之后使用crtl+ ...
- 服务器上搭建jupyter notebook
参考:https://zhuanlan.zhihu.com/p/44405596 https://blog.csdn.net/cvMat/article/details/79351420 遇到的问题 ...
- 在linux云服务器上运行Jar文件
在linux服务器上运行Jar文件时通常的方法是: $ java -jar test.jar 这种方式特点是ssh窗口关闭时,程序中止运行.或者是运行时没法切出去执行其他任务,有没有办法让Jar在后台 ...
- linux服务器上部署项目,同时运行两个或多个tomcat
在阿里云服务器上部署项目的时候,想使用阿里云提供的负载均衡服务并创建两个监听(如图), 但需要一台服务器提供两个端口,于是就请教前辈并查询资料,得知: 一台服务器提供两个端口,有两种方式: 1.一个t ...
随机推荐
- JVM学习记录-线程安全与锁优化(二)
前言 高效并发是程序员们写代码时一直所追求的,HotSpot虚拟机开发团队也为此付出了很多努力,为了在线程之间更高效地共享数据,以及解决竞争问题,HotSpot开发团队做出了各种锁的优化技术常见的有: ...
- Python中创建守护进程
python 创建守护进程 python 的os.setdid()提供了类似linux c api的 setsid 也可以通过unix双fork创建守护进程. 几个相关的函数 os.umask(0) ...
- 几种常见算法的Python实现
1.选择排序 选择排序是一种简单直观的排序算法.它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后 ...
- 超简单MVC应用程序播放WMV视频
本篇博文,介绍给大家的是,在MVC应用程序中,播放Windows media video(.wmv) 视频文件. Insus.NET的实现方法,把media player组件,嵌入MVC的控制器的Co ...
- 任意的组合,数组或数组,数组或list,list或list不用循环得出匹配的总数和需要的字段列
var res = list.Where(p=> list2.Any(x=>x.Id == p.Id));var count = res.Count();var ids = res.Sel ...
- vue简单的脚手架搭建项目
第一步 node环境安装 1.如果本机没有安装node运行环境,下载node安装包进行安装 下载地址:https://nodejs.org/en/或者http://nodejs.cn/ 第二步 nod ...
- JUC源码1-原子量
什么是原子量,原子量就是一次操作,要么成功,要么失败.比如java中的i++ 或i-- , 不具备原子性,每次读取的值都是不一样的,探究其原因,x86体系中,他的总线是32位的,i++的操作指令必须是 ...
- 【C#数据结构系列】树和二叉树
线性结构中的数据元素是一对一的关系,树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有层次关系.树形结构在现实世界中广泛存在,如家族的家谱.一个单位的行政机构组织等都 ...
- -C++11可变模版参数(转载)
泛化之美--C++11可变模版参数的妙用 1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意 ...
- Linux常用基本命令( touch )
touch命令: 作用:创建空文件,或者改变文件的时间戳属性 格式: touch [option] [file] 1,同时创建一个或者多个空文件 ghostwu@dev:~/linux/mkdir$ ...