2018年5月1日 星期二

利用 Jupyter 來授 ML 課可行嗎?


勞動節勞動了很多。由於要教授機器學習課,我在想:「要學生一步一步安裝所需要的軟件,讓他們能壓必了解箇中細節,能在家裡重新實行,雖然是好事。」;但學生手腳有快有慢,機器設定及配備有高有低,要所有人由頭到尾安裝好,解決當中遇到的問題,相信得花一堂時間,看來不值得。其真只要肯花搜尋功夫,安裝方法會找到很多。所以,我嘗試把學習環境搬到雲端上。利用 Jupyter 這個工具,學生們只需要登入頁面,便能即時進行編程及執行程式,同時能在頁面看到結果。當所需要的 Python 模組都安裝好,學生只需要 import 就成事,十分快捷。於是,我今天就快了很多時間去做一次這樣的實驗。

安裝 Juypter 到 CentOS 6 很簡單,只要:
pip3 install jupyter
python3 -m pip install jupyter
就可以。

之後要生成設定檔:
jupyter notebook --generate-config

由於網頁將會對外開放,所以要為 ~/.jupyter/jupyter_notebook_config.py 加入 SSL 證書及公鑰。然後打開防火場:
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT -m comment --comment "Jupyter port"

決定 Jupyter 的目錄,如 /var/www/html/notebook/,跳進去並以指令啟動:
jupyter notebook

這時,需要為網頁設置密碼。打開新的筆記簿,輸入程式:
from notebook.auth import passwd
passwd("password")

並執行,會得出 SHA1 值。把這個值加進 ~/.jupyter/jupyter_notebook_config.py。重新啟動後,便能用密碼登入。往後要進 Jupyter,可以在瀏覽器輸入服務器的域名及連接埠號碼 8888 便可。

來到這裡一直很順利。在 Jupyter 內能載入 SciKit-learn, Pillow, Matplotlib 等實用的模組。可是 TensorFlow 卻要 Python 3.6 而服務器內卻是 Python 3.5。原來 Jupyter 沒有簡單的設定去處理 Python 升級情況。花了很多時間,最終用 Virtualenv 來解決。建立一個獨立的 Python 3.6 環境:
pip3.6 install virtualenv
virtualenv -p /root/anaconda3/bin/python3.6 python3.6
source python3.6/bin/activate
pip install jupyter
python -m ipykernel install --name=python3.6
pip install ipykernel
conda install tensorflow
重啟之後,Jupyter 頁面的右上角便多了 Python 3.6 的記事簿可用了。

沒有留言: