在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.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就能用了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM