远程服务器(恒源云)上使用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调参工具使用方法