Jupyter notebook on GCP and connect to Kaggle
無論是刷 kaggle 還是自己研究資料科學,硬體環境總是擾人的困境,尤其是窮學生或窮上班族,沒有錢買強大硬體,只好要找尋其他資源輔助。
因此雲端環境會是一個很好的選擇,且大多都有免費試用,但雲端環境眾多,包含 Amazon 的 AWS 、微軟的 Azure 、 Google 的 GCP ,針對中文化及應用評估,我使用 GCP 作為主要的雲端開發環境。
每個人的 google 帳號都可以啟動 GCP 服務,詳細可以看 這裡,且每個人有$300 美金的免費試用額度,原則上針對一次性專案非常夠用,如果用完再去申請新的帳號即可,只差在要先用信用卡認證而已,以下用 kaggle 的 Santander Customer Transaction Prediction 競賽進行示範,打造一個可以運算的環境。
我們先申請一個 VM 虛擬環境的執行個體,在裡面灌 python 或 R 來開發我們的程式。
建立一個新的執行個體,右邊會根據你的選擇顯示定價,並且預估每個月花費多少,名稱可以隨便取,地區差在機房成本等等,通常選台灣會貴一點,CPU跟RAM單純針對專案設定,磁碟容量請記得配合 dataset 大小,當然選擇 SSD 價格會貴一點,此外也可以申請 GPU 環境,但大多數情況用不太到。
系統我選擇 ubuntu ,純粹因為我比較熟悉而已,可以根據自己喜好調整,最後按下建立,會需要一點時間建置系統,以下供參考。
環境起來後,點 GCP 上的 SSH 就可以進去虛擬環境中了,然後就可以開始做事啦!
接下來就是像一般的 ubuntu 環境進行開發,一樣可以安裝 conda 管理開發環境。我們先建一個 jupyter notebook 的開發環境,首先新裝好的 VM 不一定有 pip可以用,我們先針對 python3 安裝 pip 及 jupyter。
sudo apt update
sudo apt install python3-pip pip3 install jupyterjupyter notebook --generate-config
vim ~/.jupyter/jupyter_notebook_config.py
進 config 設定後,找地方加上以下片段,並開 port 8888:
c = get_config()
c.NotebookApp.allow_remote_access = True
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
此外 GCP 的網路防火牆也要設定,配合指定的 port 開通,我下面是開兩個,其實只要開一個就好,畫面如下:
確認好後回 SSH 畫面,用以下語法啟動 jupyter 服務。
jupyter-notebook --no-browser --port=8888
那我們要怎麼進這個環境呢,首先回到 GCP 的畫面,可以看到有個外部 IP ,貼到瀏覽器打上 port 就可以連上了,如果要輸入 token 就把 SSH 上很長的那一段貼上即可,這樣 python 的開發環境就大功告成了。
接下來要將 kaggle 的資料下載至開發環境裡面,有很多方法,可以用 jupyter notebook 上傳,或者使用 kaggle API 進行下載,先安裝 kaggle的套件。
pip3 install kaggle
接下來到 kaggle 的 My Account 下載 API token,下載下來會是一個 json 檔。
回到 SSH 畫面,利用 GCP 的上傳功能將 json 檔上傳上去。
上傳後會在預設路徑下,將他移動到 ~/.kaggle/kaggle.json 路徑下。
mv kaggle.json ~/.kaggle/kaggle.json
完成後下 SSH 內打上 kaggle,如果沒有出現奇怪訊息就是成功了。回到 kaggle 競賽的網頁,將資料 API 語法複製貼上 SSH 畫面,就可以下載了。
進去 jupyter 會看到,熱騰騰的資料已經放在那等著你分析,全程只要你的電腦可以上網,所有操作都可以透過 SSH 進行,並開始建模,大幅減少環境成本。