(Part2) MNIST classifier 訓練範例程式
登入後,進入
JupyterHub
。選擇至少有 1 virtual CPU 及 2GB RAM 的
instance type
。選擇有
Tensorflow 1.14
環境的image
。點擊
start
起始 JupyterHub。
我們將會利用已開啟的group volume
;依照步驟將程式存在group volume
:
雙擊進入 group volume folder
點擊右方工作區
Other
下的Text File
,開啟文字編輯檔。按右鍵選擇
rename
將untitled.txt
改名為train_mnist.py
。輸入下方的程式碼;此為 MNIST classifier 訓練用的範例程式。
import tensorflow as tf import argparse import shutil import os parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--dropout', type=float, default=0.2) args = parser.parse_args() mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(512, activation=tf.nn.relu), tf.keras.layers.Dropout(args.dropout), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test) export_path = "params_dropout-{}".format(args.dropout) if os.path.isdir(export_path): print('Cleaning up\n') shutil.rmtree(export_path) os.mkdir(export_path) model.save(os.path.join(export_path, 'my_model'))
請注意: 在範例程式中,我們將 model 存在 group volume 的相對路徑。
到此,我們已經把job submission
前置準備都做好了。
Submit Job
回到user portal
,進入Job Submission
。
點擊右上方的
Create Job
按鈕。從左方選擇
group
、instance type
及image
;確保跟我們用來起始JupyterHub
的環境一致。在右方將 job 命名為
training mnist
。因為我們的範例程式存放在 group volume 且 group volume 會被掛載在
/project/<group name>
,在Commnad
欄位輸入下方指令; 請置換<group name>
為實際名稱:cd /project/<group name>/ python -u train_mnist.py --dropout 0.2
Command 範例說明:
- 因為我們產出
my_model
在 group volume 相對路徑,所以我們需要先cd /project/<group name>
。 <group name>
大小寫有差別;請依照group name
大小寫,而非在 jupyterhub 內看到的group volume directory
的大小寫。- python command 參數
-u
強制 python 直接輸出 log 不要先 buffer;在 logs 頁籤可以更即時看到 log。 - 參數
--dropout
是範例程式中,指定要接收的輸入參數。 - Job Submission 會依序執行一行一行的指令,如同執行 script 般。
- 滑鼠指標移到小圖示
?
上方,可以看到更多提示。
Jobs 列舉及 refresh 按鈕
當 job 遞交後,起初會在Pending
狀態;點擊右上方Refresh
按鈕可以更新其狀態。
Logs 頁籤
點擊Logs
頁籤可以查看 job 即時執行記錄。此時 job 正在背景執行,我們可以離開此頁面去做其它事,不必開啟頁面等候;事後回來查看狀態及記錄。
當完成後,範例會輸出my_model
至 group volume,我們可以開啟 JupyterLab 查看。
Test Outputted Model in JupyterLab
到了驗證我們訓練 MNIST classifier 的時候。
Outputted model file located in JuypterLab
先在同樣環境下起始 JupyterLab tab, 我們可以在 group volume 下看到params_dropout-0.2/my_model
。
如果沒有看到輸出的檔案,那就須回到該 job 的 Logs 頁籤,查看記錄及問題;查明並修正問題後,再次遞交 job。
讓我們來依照步驟來驗證 MNIST classifier:
先進入
group volume
點擊右方工作區
Notebook
下的Python 3
。輸入下方驗證用的程式碼至第一個
cell
:Example Code
import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.load_model('params_dropout-0.2/my_model') model.evaluate(x_test, y_test)
按下
shift + enter
執行該cell
。model accuracy 將近 ~0.98;我們可以忽略 warning。
至此我們已經透過Job Submission
訓練出一個MNIST classifier
。之後我們可以遞交多個 job 帶入不同的 drop rates 來驗證分別產出的結果。
建議:先用 notebook 來快速驗證程式,沒問題後,再轉成 python file 交付給 job submission。
Job Submission 進階教學
想要試試其它 job submission 進階教學,請參考英文教學文件: