在Linux服務器上運行Jupyter notebook server教程

在Linux服務器上運行Jupyter notebook server教程


不少deep learning教程都推薦在jupyter notebook運行python代碼,方便及時交互。但只在本地運行沒有GPU環境,雖然google colab是個好辦法,但發現保存模型後在雲端找不到模型文件,且須要合理上網才能訪問。因而想給實驗室的服務器配置jupyter notebook,供本機遠程訪問。踩了很多坑,碼一下教程以供參考。html

服務器環境是Ubuntu 16.04.5 LTS 。本機windows10。分配給個人帳號沒有root權限,自用的python環境是用conda建了一個虛擬環境。node

服務器已經裝了Anaconda而且自帶Jupyter notebook。惟一須要配置的就是如何安全運行notebook server以便可以遠程訪問它。主要參考官方文檔Running a notebook serverpython


配置Jupyter Notebook Server


生成notebook配置文件

先查看服務器是否已有notebook配置文件,linux下的路徑通常是「/home/USERNAME/.jupyter/jupyter_notebook_config.py」。若是沒有進行過配置,默認是沒有這個文件的,須要本身生成:linux

$ jupyter notebook --generate-config


這行代碼會在當前路徑下生成一個.jupyter文件夾,而且文件夾中含有配置文件jupyter_notebook_config.pyjson


配置密碼

若是是notebook5.3以上的版本,此時能夠直接運行jupyter notebook命令,會以一個帶有token的地址訪問notebook,打開後會讓你填寫token和設置新的password,以後就都以設置的密碼登陸。windows

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:ssh

$ 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。


查看當前的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就能用了。

相關文章
相關標籤/搜索