远程服务器(恒源云)上使用NNI进行训练调参的详细流程
一、环境配置
- pip下载安装nni,(可使用豆瓣源,可快速下载,在安装命令后加 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com)
- 恒源云服务器一台
- python编辑器
二、训练调参步骤
1. 修改源代码
在原始代码文件中修改4部分:修改主程序,修改config文件,添加search_space.json文件,编写config.yml脚本文件
具体的修改操作为:将config.py文件中需要搜索的参数,设置为params[‘graph_emb’],params作为传入参数输入
例:原始为:
import argparse
def config():
    parser = argparse.ArgumentParser()
    parser.add_argument('--graph_emb', default=950, type=int)
    return parser.parse_args()
修改为:
import argparse
def config(params):
    parser = argparse.ArgumentParser()
    parser.add_argument('--graph_emb', default=params['graph_emb'], type=int)
    return parser.parse_args()
2.设置搜索空间
新建search_space.json文件,为超参数设置搜索范围。
{     
       "graph_emb": {"_type":"quniform","_value": [50, 1000, 50]}, #均匀搜索方式     
       "num_heads": {"_type":"choice", "_value": [2,4,6,8]}  #预设参数值方式 
}
3. 在主程序中添加如下指令
if __name__ == '__main__':
    args = {'graph_emb': 50,
            "num_heads": 2}
    tuner_params = nni.get_next_parameter()
    args.update(tuner_params)  # 更新参数
    run_experiment(args)
4. config.yml脚本文件编写
authorName: default
experimentName: default
trialConcurrency: 2     # 当前处理好并开始等待的实验数,若有空卡,则运行处理好的实验
maxExecDuration: 30h   # 最大搜索时间
maxTrialNum: 50    # 最多实验运行数
#choice: local, remote, pai   
trainingServicePlatform: local
searchSpacePath: search_space.json  #search_space.json的路径
useAnnotation: false 
tuner:
  builtinTunerName: TPE
  classArgs:
    optimize_mode: maximize   # 训练目标参数最大化还是最小化
trial:
  command: python run_experiment.py  # 主程序路径和其他超参
  codeDir: .
  gpuNum: 1   # 每个实验要几块gpu
localConfig:
  useActiveGpu: true
  maxTrialNumPerGpu: 1   # 一个GPU允许运行的最多实验数
  gpuIndices: "0,2"   # 使用的GPU编号
5. 服务器运行
(1)在本地电脑cmd中输入远程服务器端口和IP,建立通信连接:
ssh -p 远程服务器端口号 -L 8080:127.0.0.1:8080 用户名@远程服务器IP   
# 需保证8080可用,否则更改其他端口,下面命令均与此对应
这里我们使用租赁的恒源云服务器,输入ssh验证信息和密码即可连接成功,如下图:
 
 (2)在浏览器输入如下命令,即可在浏览器中看到可视化的搜索结果:
127.0.0.1:8080
(3)接下来,我们需要将本地的代码上传到云服务器,并在服务器内部运行实验,启动命令如下:
nnictl create --config config.yml -p 8080  #在自己创建的云服务器环境下运行config.yml脚本文件
(4)服务器端终止:
nnictl stop  # 脚本文件终止方式
经过上述步骤,我们就能在本地电脑上实时查看云服务上运行的实验情况。
参考文献:NNI调参工具使用方法



















