前言
這篇筆記整理如何使用 NNI(Neural Network Intelligence)做超參數搜尋。範例任務是用 CNN 訓練 CIFAR-10,並透過 NNI 搜尋 learning rate、momentum 與 batch size。
作業檔案簡介
程式碼放在 ThreeMonth03/hyperparameter_tuning。
主要目錄如下:
config/:放requirement.txt。src/:放 source code,包含cnn.py與nni_search.py。log/:放 NNI experiment log,可以回放歷史 training 紀錄。
如何從頭復現 NNI Training
1 | git clone https://github.com/ThreeMonth03/hyperparameter_tuning.git |
接著在瀏覽器打開:
1 | http://localhost:[your_port] |
這裡建議不要使用 docker-compose up -d,否則 experiment log 可能不會被正常保存。實際部署時,也記得依照環境調整 port、container name 與 image name。
如何直接看 Training Log
如果只想查看既有 log,可以改用 nni_search.py 裡的 experiment.view:
1 | experiment.view(experiment_id, port=8323, non_blocking=False) |
操作流程:
- Clone repo。
- 依照
nni_search.py內的註解,關閉 training 設定,打開experiment.view(...)。 - 執行
docker-compose up。 - 到
localhost:[your_port]查看結果。
實驗設定
| Hyperparameter | Search Space |
|---|---|
lr |
0.0001 ~ 0.1,log uniform |
momentum |
0 ~ 1,uniform |
batch_size |
4、8、16 |
| Tuner | TPE |
Result
Best hyperparameter:
lr:0.0024724673142795927momentum:0.31344560117709097batch_size:8
Test Accuracy:65%
筆記
如何用 Python API 調 Hyperparameter
NNI 可以透過 terminal 指令或 Python API 控制 hyperparameter。以下是透過 Python API 設定 search space 與 experiment 的範例。
1 | # nni_search.py |
被控制的 model 也要加入 NNI 參數讀取與回報結果的邏輯。
1 | # cnn.py |
小結
NNI 的好處是可以把「手動反覆調參」變成可重現的實驗流程。只要把 search space、tuner 與 training script 接好,就能自動化比較不同超參數組合,並保留 experiment log 供後續分析。