需求分析
在之前的文章中我们讨论了如何使用Pycharm连接远程服务器并进行调试,Pycharm中SSH、SFTP连接远程服务器编辑调试全面手把手教程,成功在Pycharm中添加了远程Python解释器,并用其运行了服务器上的.py
文件,但是对于很多数据科学工作者,Jupyter Notebook的灵活易用性仍然是他们选择其的重要一环,目前的教程讲解的多是如何在服务器上开启jupyter notebook服务并在Pycharm中使用,而并没有关注到多人服务器中的JupyterHub配置情况。因此,本文章重点讨论如何在远程服务器开启JupyterHub且不能私自打开jupyter notebook服务的情况下如何配置Pycharm使其可以使用远程Jupyter notebook服务。
登录网页JupyterHub
由于无法自己开设jupyter notebook服务,因此首先需要知道服务器的IP和JupyterHub的端口,在浏览器中输入(将IP替换为你的服务器IP,Port替换为你的服务器的JupyterHub所占用的端口)
http://IP:Port/
进入JupyterHub服务页面,如下图所示
这个时候会输入用户名和密码,这里的用户名和密码对应服务器的用户名和密码,填好后点击登录,此时会自动开启服务,并进入你的JupyterLab页面,如下图所示,画红圈的地方代表了你的虚拟环境。
如果需要向jupyterlab中添加自己的anaconda环境,首先进入该环境,然后执行以下命令:
python -m ipykernel install --user --name 参数1 --display-name "参数2"
注意需要安装ipykernel这个包,命令中的“参数1”需要改为你的conda创建的环境的名称,“参数2”需要改为你想要在jupyterlab上展示的名字。例如:
python -m ipykernel install --user --name pytorch1.6 --display-name "pytorch1.6"
执行完这条命令后,会在用户目录下创建相关kernel,此时再打开jupyterhub,就能选择这个kernel了,我这里的kernel名字是torch1.13。
正常来讲这个时候我们就可以在浏览器的JupyterLab里面打开文件敲代码了,接下来配置Pycharm
Pycharm配置远程JupyterHub
打开你需要在服务器运行的Jupyter项目,配置好与服务器的SFTP设置(如何配置请参考"需求分析"中的连接),初始状态如下图所示,红圈和绿圈分别对应着本地和远程服务器mapping的项目文件,接下来我配置mi_estimation.ipynb
文件来作为演示。
进入设置中的Jupyter Server页面,如下图所示,选择Configured Server
在这个地方输入与前面浏览器打开JupyterHub相同的网址,即http://IP:Port/
,点击确定,Pycharm会自动验证该地址。这个时候可以看到下图红色标记处就已经有你的Jupyter Server了。
接着尝试运行任意一个cell,会弹出JupyterHub的认证页面,如下图所示
在这里要尤其注意的是,这里的Username是你在服务器的用户名。但是!但是!这里需要填的是Token,而不是密码,接下来我们需要获取Token。
回到在上个阶段打开的JupyterHub网页,选择左上角File->Hub Control Panel
弹出下图所示页面,选择图中圈出的Token
在这个地方列出了目前所有用到JupyterHub Api的地方,如下图所示
因为我们需要在Pycharm上再配一个Jupyter,所以点击上方按钮“Request new API token”,如下图所示
接下来,粘贴此Token至Pycharm刚才弹出的对话框的Token位置,点击OK
这个时候刚才我们运行的那个Cell已经开始运行了,并给出了运行结果,右上角可以选择虚拟环境
至此,Pycharm配置JupyterHub服务来远程运行Jupyter文件已全部结束。
一点思考
根据之前的文章可以发现,当我们运行.py
文件时,点击运行的那一刻,Pycharm是先将本地的文件上传至服务器覆盖相应文件后,再调用远程Python解释器来运行服务器文件。而针对.ipynb
文件却不是这种逻辑,在运行每一个Cell的时候,其实Pycharm并没有将整个文件上传到服务器上,而是仅仅使用Jupyter服务来运行相应Cell代码,只有当我们手动将整个文件upload到服务器上时才会对服务器上相应文件进行更新。