(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 a Job

回到user portal,進入Job Submission。

- 點擊右上方的 - Create Job按鈕。
- 從左方選擇 - group、- instance type及- image;確保跟我們用來起始- JupyterHub的環境一致。
- 在右方將 job 命名為 - training mnist。
- 因為我們的範例程式存放在 group volume 且 group volume 會被掛載在 - /home/jovyan/<group name> -> /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>orcd <group name>/。
- <group name>大小寫有差別;
- 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 進階教學,請參考英文教學文件:
