- irace的安装和使用方法
- 1. 安装R语言运行环境
- 2. 安装irace并添加到环境变量
- 3. 项目配置
- 3.1 算法可执行文件
- 3.2 target-runner设置
- 3.3 scenario.txt设置
- 3.4 parameters.txt参数设置
- 3.5 default.txt设置
- 3.6 forbidden.txt设置
- 4. irace运行
- 5.错误处理
- 1. 配置问题
- 2. 权限问题
- 3. 输出结果字符串截取问题
- 6. 高阶操作
由于irace的很多功能只能在GNU/Linux系统实现,所以推荐在Linux上运行该调参工具,下面介绍也是针对Linux进行。
1. 安装R语言运行环境注意:irace运行需要R语言运行环境,R语言运行环境依赖有可能会跟较老版本gnome桌面系统冲突,尽量在新版本的Linux系统上进行操作,或者没有桌面系统的服务器上操作。
以debian系Linux举例,使用如下命令安装
sudo apt-get install r-base
如果安装期间出现弹窗,一律选择yes,安装完成后重启系统,如果能顺利进入登录界面,就没有问题。
如果不行,尝试如下命令恢复Linux桌面系统的初始设置。
dconf reset -f /2. 安装irace并添加到环境变量
进入R语言交互环境,命令行进行如下操作
R
install.package("irace")
安装完成后,使用如下命令输出irace安装路径。
library("irace")
system.file(package = "irace")
复制输出的路径
q()
退出R语言交互环境
用vim, nano, gedit, vscode等各种工具的一种打开环境变量配置文件
~/.bash_profile, ~/.bashrc or ~/.profile 的一种
在文件末尾追加如下内容:
# Replacewith the irace installation path export IRACE_HOME= export PATH=${IRACE_HOME}/bin/:$PATH # Tell R where to find R_LIBS_USER # Use the following line only if local installation was forced export R_LIBS=${R_LIBS_USER}:${R_LIBS}
其中的
修改完之后保存,使用source指令使其立即生效。(以*.bashrc*举例)
source ~/.bashrc
然后命令行输入irace --help验证是否配置完成。
3. 项目配置一个典型的irace项目配置由以下部分构成
- 调试算法的可执行文件
- target-runner,算法执行脚本
- scenario.txt, 场景配置文件
- parameters.txt, 需要调试的参数配置文件
- /Instances文件夹,放置测试用例
- /arena文件夹,irace运行实验的数据存储文件夹
- (可选)default.txt,调试参数的默认设置
- (可选)forbidden.txt,参数的禁止选择范围或条件
由于irace在执行调参的过程中需要拼接命令行,所以可执行文件必须具有参数解析的功能,例如
./numvc --i test.mtx --c 15 --s 234789434
3.2 target-runner设置官方模板的target-runner大部分内容都不需要动,只需要修改跟我们项目相关的部分
- 修改算法可执行文件路径
# Path to the exe of your alghorithm: EXE=/home/eric/repository/numvc_code/numvc
- 命令行固定参数,不需要调参的部分, 注意前后留空格
FIXED_PARAMS=" --c 15 "
- 执行算法的核心指令
# Now we can call exe by building a command line with all parameters for it
$EXE ${FIXED_PARAMS} --i $INSTANCE --s $SEED ${CONFIG_PARAMS} 1> $STDOUT 2> $STDERR
具体参数设置,按照自己的算法执行所需修改。
- 输出结果截取
COST=$(cat ${STDOUT} | grep -e '^[0-9.e]*$')
该指令用于截取可执行程序输出文本的最后一行的数据,这个数据用于评价一组参数选择的好坏,最后排出的最后参数排序也是按照这个数据来的。建议我们在可执行文件最后的输出里只输出用于决定参数选择好坏的关键值,比如程序找出最优解所花时间。
irace在评价一组参数好坏的时候,认为目标值越小该组参数越好,如果想目标值越大越好,则需要在程序输出时结果值-1。
- 程序运行的中间文件处理
rm -f "${STDOUT}" "${STDERR}"
脚本默认会把所有的中间文件删除,如果想保留中间文件观察,把这行修改为:
rm -f "${STDERR}"
3.3 scenario.txt设置
只介绍关键信息,所有的设置建议去irace/templates/scenario.txt.tmpl查看
irace运行的终止条件是达到maxExperiments或者运行时间达到maxTime,所以必须在scenario.txt中配置两者之中的一种。
## File that contains the description of the parameters. ## 参数设置文件 parameterFile = "./parameters-numvc.txt" ## Directory where the programs will be run. ## irace工作区,即上文提到的/arena文件夹 execDir = "./numvc-arena1" ## Directory where tuning instances are located, either absolute path or ## relative to current directory. ## 测试用例文件夹 trainInstancesDir = "./Instances" ## The maximum number of runs (invocations of targetRunner) that will performed. It ## determines the (maximum) budget of experiments for the tuning. ## 最大实验次数,需要自己估算好 maxExperiments = 200 ## Indicates the number of decimal places to be considered for the ## real parameters. ## 参数为实数时,取参的精确度,digits = 1即精确到小数点后一位 digits = 1 ## Number of iterations. ## 实验迭代次数 nbIterations = 23.4 parameters.txt参数设置
参数设置举例:
# name switch type values [conditions (using R syntax)] # nnls "--nnls " i (5, 50) | localsearch %in% c(1, 2, 3) # dlb "--dlb " c (0, 1) | localsearch %in% c(1,2,3) optimal_size "--o " c (0) forget_scale "--f " r (0.1,1.0) threshold_scale "--t " r (0.1,1.0)
name列只用于irace输出结果中显示。
switch列用于传参,所以为所执行算法用设置的解析命令行指令,并在指令后加空格,用于拼接参数。
type列为参数类型,以下为常用参数类型:
- c, 分类类型,取值范围为所有可取值的列表。特殊的,当参数只有一个固定取值时,也使用该类型。
- i, 整数类型,取值范围为(lb, ub)之间的所有整数。
- r, 实数类型,取值范围为(lb, ub)之间的所有实数。小数点后的精确位数由scenario.txt里面的digits字段决定,digits = 1即为精确到小数点后1位。
values列为取值范围。
conditions为取值条件,条件需要用R语言语法写。该字段为可选字段。
3.5 default.txt设置default.txt为可选配置。内容为parameters.txt里面参数的默认设置。
3.6 forbidden.txt设置forbidden.txt为可选配置。内容为parameters.txt里面参数的禁止取值范围。
4. irace运行上面的都配置好以后就可以尝试运行irace了。
命令行切换到项目目录, 直接运行irace。irace会在当前目录寻找scenario.txt,调用scenario.txt配置,并运行target-runner。
irace
这样运行,只会占用一个进程,如果想多进程并行运算,需要加上–parallel参数。
irace --parallel 4
这样就可以并行4个线程运算,具体可并行程序数量,查看CPU支持的线程数,然后自行修改。
或者在scenario.txt中加上如下配置(建议采取这种方式):
## 数字为想要并行的线程数量 parallel = 10
通过以下方法查看CPU支持线程数量
# 查看CPU个数 cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l # 查看每个物理CPU含有的核心个数 cat /proc/cpuinfo |grep "cpu cores"|uniq|wc -l # 查看每个CPU核心含有的线程数 cat /proc/cpuinfo |grep "processor"|wc -l # 那么cpu支持的线程数为 cpu数目 * 每个cpu含有的核心数目* 每个核心含有的线程数
如果需要查看irace支持的命令行参数,可以使用:
irace --help
irace运行过程会输出每次迭代已经计算出来的合适参数,所有实验完成后,会降序输出三个最优参数结果,即为想要的结果。
5.错误处理 1. 配置问题Error: == irace == target runner ‘~/tuning/target-runner’ does not exist
没有配置target-runner
2. 权限问题Error: == irace == target runner ‘~/tuning/target-runner’ is not executable
target-runner没有可执行权限,修改权限即可
chmod 777 target-runner
类似的,出现类似于下面的提示
== irace == The output was:
Tue May 3 19:00:37 UTC 2016: error: ~/bin/acotsp: not found or not executable
(pwd: ~/tuning/acotsp-arena)
程序的build文件也没执行权限,一样修改权限即可。
3. 输出结果字符串截取问题Error: == irace == The output of ‘~/tuning/target-runner 1 25 365157769
~/tuning/Instances/1000-31.tsp --ras --localsearch 1 --alpha 0.26 --beta
6.95 --rho 0.69 --ants 56 --nnls 10 --dlb 0 --rasranks 7’ is not numeric!
== irace == The output was:
Solution: 24479793
建议输出的数据只有一个结果即可,另外irace评价参数的标准只有一个,如果有多个评价标准比如权值和耗时,选择最重要的
6. 高阶操作irace更多高阶操作,可访问这里的官方指导手册。



