赞
踩
jupyter notebook 是一个非常有用的工具,我们可以在浏览器中任意编辑调试我们的python代码,并且支持markdown 语法,可以说是科研利器。但是这种情况适合个人使用,也就是jupyter notebook以我们自己的主机作为服务器,然后我们用自己的浏览器编辑自己本机的python代码。最近实验室搭建了深度学习的服务器,每个人都有一个用户可以使用GPU资源,但是每次写代码要在本地调试好了然后再ssh提交到服务器运行,如果有问题,还要再在本地更改然后再次提交,非常的麻烦。为了解决这个烦恼,我们在GPU服务器上搭建了jupyterhub, 它和notebook不同之处在于它是一个hub,哈哈,也就是notebook的服务器,把它装在服务器上,然后大家可以通过局域网在浏览器上进行python代码的编辑和调试。
jupyterhub 和 jupyter notebook一样是python的一个包,可以通过pip安装,也可以通过 conda安装,在服务器端安装就可以供大家使用。关于jupyterhub的教程请看:官方教程 既然有了官方教程了为什么我还要写这篇文章呢?原因是因为:1.在安装过程中遇到了一些在教程中解决不了的问题 2. 避免大家走弯路。
这篇教程在使用jupyterhub的时候是在anaconda的虚拟环境中安装的,如果你的是本机的python环境,不用担心,其原理都是一样的。
这里是第一个坑,在官方教程中,它告诉我们需要提前装依赖项nodejs,
sudo apt-get install npm nodejs-legacy
但是当我通过这种方式安装后,再安装jupyterhub 后发生了错误,找了很久的原因没有找到,后来看错误提示,猜测可能是nodejs的版本问题,也就是说我们通过apt-get 安装的nodejs 版本不符合我们的需要,我们的系统是ubuntu 16.04, 使用的apt 源是阿里云的源。可能其他源或者ubuntu18.04不会出现这种问题吧。如果在安装jupyterhub的时候它提示你nodejs的错误,很有可能是版本呢问题。
解决方案:去官网下载对应的版本
下载最新版应该也是可以的,下载下来是一个压缩包,我们将它解压后放到固定的文件夹,例如
/usr/local/nodejs
接下来将nodejs 的bin目录放到path 路径中,这样在命令行中敲入node
就会有提示信息,代表nodejs安装成功了。path 路径的配置随便百度一下就会有很多教程。我把path路径的配置放到了 /etc/bash.bashrc
中,你也可以放到~/.bashrc
当中。这里不详细讨论环境变量的问题。 nodejs安装成功后我们就可以着手安装jupyterhub了。
根据官方教程,有两种方式安装:
- pip 安装
python3 -m pip install jupyterhub
npm install -g configurable-http-proxy
python3 -m pip install notebook # needed if running the notebook servers locally
- conda 安装
conda install -c conda-forge jupyterhub # installs jupyterhub and proxy
conda install notebook # needed if running the notebook servers locally
选择其中一种安装即可,我们使用第一种pip
安装,因为conda安装总会出现连接超时的问题。
如果上述过程都没有问题,我们就可以在命令行中敲入jupyterhub -h
看看是否有帮助提示,有帮助提示代表安装成功,在虚拟环境中安装的需要先进入到虚拟环境中source activate **
。
接下来需要我们配置jupyterhub了,这个配置过程比较简单,按步骤走就行了
- 生成配置文件
jupyterhub --generate-config
这个命令会在你的当前目录下生成一个jupyterhub_config.py
文件,接下来我们需要在这个文件中配置我们的网络和用户管理。
- 启动jupyterhub
jupyterhub -f /path/to/jupyterhub_config.py
上述命令可以根据你的配置文件启动jupyterhub。
- 怎么配置/upyterhub_config.py
下面给出我们的参考配置:
c.JupyterHub.ip = '192.168.24.***'
c.JupyterHub.port = 445
c.PAMAuthenticator.encoding = 'utf-8'
c.LocalAuthenticator.create_system_users = False
c.Authenticator.whitelist = {'dada',
'haha',
‘name’
}
c.Authenticator.admin_users = {'famu'}
c.Spawner.env_keep.append('LD_LIBRARY_PATH')
c.JupyterHub.statsd_prefix = 'jupyterhub'
JupyterHub.ip
是你本机局域网的ip,记得是局域网
JupyterHub.port
是我们指定的端口,随便指定一个不和其他服务冲突的端口就行
Authenticator.whitelist
比较重要,这里面需要将linux的用户名添加进入,这样该用户就可以通过浏览器利用linux的用户名和密码登录自己的账户,jupyterhub采用和linux系统相同的认证方式,所以我们不需要另外建立用户,只需要登录linux的用户和密码即可。
c.Spawner.env_keep.append('LD_LIBRARY_PATH')
这行是我们踩的坑,因为用了GPU版的tensorflow,这个目的是将LD_LIBRARY_PATH
的路径放到jupyterhub中,这样才能正确使用GPU版的tensorflow。
- 最后登录使用
在同一个局域网的电脑中,打开浏览器输入刚才配置的ip和端口,然后输入登录linux的用户名和密码即可登录使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。