2

在遠端 Linux 執行 Jupyter Notebook

 7 months ago
source link: https://blog.darkthread.net/blog/jupyter-on-remote-linux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在遠端 Linux 執行 Jupyter Notebook-黑暗執行緒

最近想試試從 Windows 工作機遠端連上 Linux 伺服器跑 Python,ssh 連上去用終端機跑當然沒問題,但許多學習資源是 Jupyter Notebook,要怎麼從 Windows 在 Linux 跑 Jupyter Notebook 呢?

啟用 RDP 或 VNC 走遠端桌面是無腦解法,但實務上可能因權限不足、無 GUI 環境或防火牆限制無法實現。Jupyter Notebook 本身是個網站,故在 Linux 跑 Jupyter Notebook 再用 SSH Tunneling 連上去也是個解法,只需開通 SSH Port 即可使用。

以下是我的安裝設定筆記。

我選擇在 Linux 上安裝 Anaconda,依據官方文件:Installing Anaconda on Linux,先在 Repo 網頁查最新版本是 2023-09-0,使用以下指令下載安裝:

sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
bash ./Anaconda3-2023.09-0-Linux-x86_64.sh

安裝過程注意事項如下:

  1. 安裝程式會顯示版權同意書,按 Enter 開始,空白鍵下一頁,最後輸入 yes 按 Enter 表示同意。
  2. 預設會安裝在 /home/<username>/anaconda3,沒特殊考量的話就用預設路徑
  3. 下載安裝要花個幾分鐘:
    Fig1_638428177241050909.png
  4. 最後步驟是設定每次登入後自動啟用 conda,輸入 yes 同意:
    Fig2_638428177245270826.png
    註:若選擇不自動啟用 conda,手動指令如下:
    source ~/anaconda3/bin/activate
    conda init
    # 用以下指令啟用或關閉自動啟用 conda
    conda config --set auto_activate_base True
    conda config --set auto_activate_base False
    
  5. 重新登入或 source ~/.bashrc 啟動 conda

Fig3_638428177247427041.png

conda 啟用後,終端機提示指令前方會出現 (base) 顯示目前所在虛擬環境,執行 conda list 顯示目前安裝的套件及版本,代表安裝成功。

開始前先將 jupyter 升級到新版(不然一直有升級提示,頗煩),用 jupyter notebook 啟動 Notebook,Windows 端則另開一個 ssh 啟用 Tunneling,將 Linux 的 Jupyter Notebook TCP Port 導向到 Windows 來。

# 將 jupyter 升級到新版 (7)
conda update jupyter
# 在伺服器啟動 Jupyter Notebook
jupyter notebook --no-browser --port=9527
# 在本機執行 ssh 啟用 Tunneling 將遠端 9527 Port 導向本機 9527 Port
# 註:兩邊 Port 設一樣,開啟 Notebook URL 可直接用較方便
# 參數 -L local-port:remote-ip:remote-port、-N 不執行指令
ssh -N -L 9527:localhost:9527 <user>@<host>

上面有提到本機跟 Linux 的 Port 設一樣會比較方便,理由是瀏覽器開啟 Jupyter Notebook 需要帶一個 token 參數,在 Linux 跑 jupyter notebook 顯示訊息會有連結(下圖箭頭處),Port 相同的話可直接點選連結在 Windows 開啟。

Fig9_638428177251760526.png

這樣就能從本機在 Linux 伺服器跑 Python,充分利用伺服器的算力。

Fig10_638428177253902281.png

不過,身為 Python 新手,沒有 Copilot 的我恐怕剛出新手村就被史萊姆圍毆至死,還是研究一下怎麼用 VSCode 寫 Jupyter Notebook 吧。參考:Manage Jupyter Kernels in VS Code

用 Create: New Jupyter Notebook 建一本新筆記:

Fig4_638428177256048971.png

點右上側的 Select Kernel / Existing Jupyter Server... 輸入含 token 的 URL:

Fig5_638428177258625023.gif

並取個好記的簡短名稱:

Fig6_638428177260749031.png

再選取 Linux 上的 Python Kernel (箭頭即為上一步輸入的名稱):

Fig8_638428177262890038.png

輸入函數註解,Copilot 手把手教你怎麼用 Python 實作出來,學習新程式語言就該這樣,讓 Copilot 帶你飛~~

Fig11_638428177265042455.png

最後實測印出 OS 資訊,證明程式是在 Linux 上執行無誤:

Fig7_638428177267217464.png

雖然整體操作的體驗遠不如本機 Jupyter Notebook 流暢,會損失一些功能(例如:無法逐行偵錯、不能使用 VSCode 終端介面),但此種做法方便從 Windows 調用 Linux 主機 CPU/GPU 算力或網路環境進行作業,仍不失為一個選項。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK