NNI (Neural Network Intelligence) 是自动机器学习(AutoML)的工具包。 它通过多种调优的算法来搜索最好的神经网络结构和(或)超参,并支持单机、本地多机、云等不同的运行环境。
话不多说开始正题。
1.下载nni工具包
(nni) D:\pythoncode\SVC>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nni==2.3
这里用的是清华源的(下载比快)nni2.3版本,本来用的是2.4版本但是一直在服务器启动上报错
从代码检查到了host等等,最后发现是版本的问题,nni默认下载时2.4版本,但是2.4版本似乎会出错。
2.配置文件
需要配置一个search-space.json,用来给出模型需要自动调参的参数,以及参数的数据范围
{
"hidden_layer_sizes": {"_type": "quniform" ,"_value":[20,700,2]},
"max_iter": {"_type": "quniform" ,"_value":[100,1000,50]},
"alpha": {"_type": "uniform" ,"_value":[0.1, 1]}
}
参数数据类型主要有:
“uniform”,去设置参数值在某个范围均匀分布的值, 当优化时,此变量值会在两侧区间内。
“quniform”,去设置参数值在某个范围,以一定步长去变化,例如[100,1000,50],参数值在50-1000之间步长为20
“choise”,在你设置的参数中选择一个值,例如[100,300,20,60,80]
等等,具体可以看官网例子
接下来要定义实验配置一个config.yml
authorName: default
experimentName: titanic
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 100
#choice: local, remote
trainingServicePlatform: local
searchSpacePath: search_space.json
#choice: true, false
useAnnotation: false
tuner:
#choice: TPE, Random, Anneal, Evolution
builtinTunerName: TPE
classArgs:
#choice: maximize, minimize
optimize_mode: maximize
trial:
command: python svc.py
codeDir: .
gpuNum: 0
command :用来执行的你的代码
gpuNum,设置gpu的参数
optimize_mode,如果看模型loss参数就选择 minimize,看accuracy就选maximize(应该是这样)
最后改写模型代码
new_PARAMS = nni.get_next_parameter()
PARAMS.update(new_PARAMS)
##需要先给模型设置一个原始的参数
model = MLPClassifier(PARAMS)
scores = cross_val_score(model, x_train, y_train)
score = scores.mean()
nni.report_intermediate_result(score)#一个epochs汇报一次
nni.report_final_result(score)#最后选择最好的结果汇报
接下来说说我踩的坑:
1.nni是去执行config.yml文件去开始训练,而不是主程序.py文件
nnictl create --config config.yml -p 8888
2.需要把nni加入系统环境变量
3.就是nni的版本,我是用2.3版本才成功的