栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

irace调参神器入门教程

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

irace调参神器入门教程

目录
  • 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的安装和使用方法

由于irace的很多功能只能在GNU/Linux系统实现,所以推荐在Linux上运行该调参工具,下面介绍也是针对Linux进行。

注意:irace运行需要R语言运行环境,R语言运行环境依赖有可能会跟较老版本gnome桌面系统冲突,尽量在新版本的Linux系统上进行操作,或者没有桌面系统的服务器上操作。

1. 安装R语言运行环境

以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 的一种

在文件末尾追加如下内容:

# Replace  with 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}

其中的修改为上面复制的irace的安装路径。

修改完之后保存,使用source指令使其立即生效。(以*.bashrc*举例)

source ~/.bashrc

然后命令行输入irace --help验证是否配置完成。

3. 项目配置

一个典型的irace项目配置由以下部分构成

  • 调试算法的可执行文件
  • target-runner,算法执行脚本
  • scenario.txt, 场景配置文件
  • parameters.txt, 需要调试的参数配置文件
  • /Instances文件夹,放置测试用例
  • /arena文件夹,irace运行实验的数据存储文件夹
  • (可选)default.txt,调试参数的默认设置
  • (可选)forbidden.txt,参数的禁止选择范围或条件
3.1 算法可执行文件

由于irace在执行调参的过程中需要拼接命令行,所以可执行文件必须具有参数解析的功能,例如

./numvc --i test.mtx --c 15 --s 234789434

3.2 target-runner设置

官方模板的target-runner大部分内容都不需要动,只需要修改跟我们项目相关的部分

  1. 修改算法可执行文件路径
# Path to the exe of your alghorithm:
EXE=/home/eric/repository/numvc_code/numvc
  1. 命令行固定参数,不需要调参的部分, 注意前后留空格
FIXED_PARAMS=" --c 15 "
  1. 执行算法的核心指令
# 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

具体参数设置,按照自己的算法执行所需修改。

  1. 输出结果截取
COST=$(cat ${STDOUT} | grep -e '^[0-9.e]*$')

该指令用于截取可执行程序输出文本的最后一行的数据,这个数据用于评价一组参数选择的好坏,最后排出的最后参数排序也是按照这个数据来的。建议我们在可执行文件最后的输出里只输出用于决定参数选择好坏的关键值,比如程序找出最优解所花时间。

irace在评价一组参数好坏的时候,认为目标值越小该组参数越好,如果想目标值越大越好,则需要在程序输出时结果值-1。

  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 = 2
3.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更多高阶操作,可访问这里的官方指导手册。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号