請用 VS CODE (或其他習慣的IDE)開啟 nni\examples\trials\mnist-pytorch 的資料夾。
開啟 mnist.py檔案。
先看主程式 line 156 之後:
if __name__ == '__main__':
try:
# get parameters from tuner
tuner_params = nni.get_next_parameter()
logger.debug(tuner_params)
params = vars(merge_parameter(get_params(), tuner_params))
print(params)
main(params)
except Exception as exception:
logger.exception(exception)
raise
我們的模型mnist.py得交給NNI跑好幾次trials,才能最佳化hyper-parameters。所以,這些參數包含自己內部使用的參數( get_params() ),加上NNI需要的參數(tuner_params)。而且,每trial一次,產生的一些結果--中間結果,由每輪epoch所產生(跑完一世代的training data);最終結果,全部training data跑完--全部交給NNI,讓NNI的advisor (assessor, tuner)去判別、調整,而後產生新的config檔案。接著,在進行下一輪的trial。如此周而復始,直到跑至資源設定的上限,如trial數,時間(max duration)…等等。
了解NNI的基本執行流程後,我們先自NNI取出上回產生的超參數,要給本回trial使用的超參數,放入tuner_params中。
tuner_params = nni.get_next_parameter()
接著,自己的超參數,和NNI的超參數合併(用NNI的參數,蓋掉自己的初始參數),如此便產生較佳的超參數(理論上)。
params = vars( merge_parameter(get_params(), tuner_params) )
超參數備妥後,就進入主程式。get_params()請自行理解。
主程式有哪些流程呢?請看下回分解。