MindOpt Tuner调参器,提升求解速度、性能(一)

   日期:2024-12-26    作者:gzyayun88 移动:http://ljhr2012.riyuangf.com/mobile/quote/49601.html

MindOpt 调参器MindOpt Tuner,简称 MTuner)是一款超参自动优化工具。

MindOpt Tuner调参器,提升求解速度、性能(一)

它可以帮助运筹优化工程师在使用求解器时自动搜索最佳参数组合。优化求解器往往拥有很多配置参数,例如启发式方法的开关、割平面方法的开关、预处理的配置以及各种误差容忍度等等。MindOpt Tuner会尝试不同的参数组合,评估每组参数的性能,然后基于这些结果来确定最佳参数。这样可以大大减少手动调整参数的时间和精力,并且可以帮助提升求解性能。

不同于常见的贪心算法、遗传算法、粒子群算法等调参算法,MindOpt Tuner使用了团队新研发的快速算法,只需要相对少的评估就能给出性能很好的参数。

输入:

  • 业务场景中的优化问题数据,一个或者多个均可以
  • 待调的求解器
  • (可选)这个求解器待调的参数。若没有指定,则会自动用MindOpt Tuner内部内置的能力。

输出

  • 一套最优参数。采用此参数运行该求解器,在您的业务场景上会得到更优的效果。
  • 一系列结果文件和日志,给出调参效果分析。比如会列出对效果影响更大的几个参数。

MindOpt Tuner 当前支持以下几种用法

  1. web页面作业提交:可直接在浏览器访问“作业提交”来提交和管理任务、获取结果,在其他渠道提交的任务也可在此任务管理查看到。
  2. Notebook容器:类似MindOpt求解器和建模语言,可以访问MindOpt建模求解平台的Notebook容器中使用Mtuner。其内核同单机版,但无需安装步骤直接浏览器中使用。采用Notebook项目方便记录笔记、查询接口和参数说明、混合编程、公开分享项目等。
  3. 单机版:支持在MacOS、Linux、Windows平台环境下来创建并触发调参任务。适合需要定制化集成或私有化部署的客户,安装包获取>>

本篇系列将重点讲解下Notebook容器中如何使用命令行(本篇PythonAPI,并且给出web页面任务提交用法示例截图。

:下面的文件包含code源码,您可复制本项目,然后在浏览项目内容页点击右上角的NoteBook按钮,进入环境后查看、运行、修改调试代码。

下文将通过以下顺序讲解

  1. 提交任务:根据一个问题调优
  2. 学习查询指令
  3. 查询结果
  4. 使用结果
  5. 提交一组数据用于调参(本地和OSS
  6. 其他常用指令

这里假设我们业务场景搜集到两个数据,nl_train_1.nl用来调参,nl_test_1.nl用来验证调参结果可用。

首先我们运行如下指令提交一个调参任务:

 
 

这里需注意:为了节省数据存储空间,同用户下的MD5值相同的数据文件,服务端仅会存一次。因此重复提交后会提醒文件已存在。此时调参任务继续执行,线上存的数据不更新。

这里小编已经提交了测试过,新提交taskID会和后文描述不一样。小编提交的taskID是 。后文将基于此ID来讲解获取结果,用户请注意更换自己的ID测试。

这段任务提交的指令可以解析为

指令段说明!使用cell magic,让可以在Python内核的Notebook的code cell里面运行命令行指令。mindopt-tuner是MindOpt Tuner调参器的可执行程序的名称create-task创建任务。还有其他指令可以通过 去查询–solver cbc选择求解器为cbc。还有其他参数可以通过 去查询–problem ‘https://blog.csdn.net/MindOpt_003/article/details/model/nl_train_1.nl’使用’https://blog.csdn.net/MindOpt_003/article/details/model/nl_train_1.nl’数据用于调参。–max-tuning-time 600设置调参任务的时间额度为600秒,到时间后会停止调优。

在上一节中我们提到了

指令段说明create-task创建任务。还有其他指令可以通过 去查询–solver cbc选择求解器为cbc。还有其他参数可以通过 去查询

这里,我们可以试运行以下指令,查询接口的用法

 
 

这里我们得到了操作词和功能说明,然后我们还可以根据 来查询对应操作词的使用说明。比如如何获取结果

 
 
 

根据上面的指令,我们可以通过以下方式来查询我们刚刚提交的任务的结果。用户测试时候,请注意更换上面自己任务的ID号。

 
 

这个日志列出了比较详细的信息,其中

  • 代表调参前的求解时间是 3.21s
  • 调参结束后的 代表的是优化调参后的建议取值和重要性评估。
  • 这句话代表,调参后的最快速度是0.09秒求解(wallclock_time,比原始参数提速 35.67 = 3.21/0.09 倍。

我们还可以运行如下指令,去获取上面表格 里面的文件信息,比如

 
 
 

这里我们可以验证下效果。刚求解的是.nl文件,可以参考MindOpt APL建模语言的设置求解器参数的指引来使用和设置参数。

如以下跑的代码

  1. 用cbc默认参数,原始参数求解完后,(Wallclock seconds):2.07 秒。
  2. 用MindOpt Tuner调参后的参数,(Wallclock seconds): 0.09 秒。

2.07 / 0.09 ≈ 23 倍

这里需要注意的是不同机器运行的耗时不一样,因此计算的提升倍数有差异,最优参数推荐值也可能不一样。上面调参器调优的结果是在云平台的远程服务器中运行,与本容器的环境并不一致,从本容器的运行结果大致也能看到速度有明显提升。

下面的指令输出的日志太长,为了优化阅读体验,我们删除了运行记录,您可以将下面的cell属性从Raw更改为Code后运行

 

这里我们还可以测试以下这个参数的迁移性,nl_test_1.nl文件是和nl_train_1.nl相似的一个问题,我们可以看看用训练出来的参数求解表现如何。

从运行结果看,花费的时间与训练数据接近,调优后的参数能提速近20倍。

下面的指令输出的日志太长,为了优化阅读体验,我们删除了运行记录,您可以将下面的cell属性从Raw更改为Code后运行

 
 

除了对于单个文件调参,还可以根据一组数据进行调参。举例:我们将数据存在 文件夹(这些数据来源于MindOpt求解器单机版的安装包的 文件夹,其访问路径(相对本运行环境)存储为一个txt文件mps_train_local.txt。

同时不仅仅支持文件存在本地容器,也支持存在云端oss。这个方式适合大文件(不适合浏览器上传或者这个容器放不下,我们可以用阿里云的对象存储OSS。这里我们举例有几个数据,存在了云端OSS(公开可访问,然后将数据的地址存入mps_train_oss.txt。

然后我们运行如下提交指令进行测试提交

 
 
 
 

小编运行的时候得到taskID:438398613857509376New 和 438398626012602368。
运行结束后,我们可以获得结果。从结果可以看出,可以得到提升。
Tips :对于求解器的调参,我们建议只在同一场景的问题上调优。如果问题结构差异很大,调参效果并不一定好

 
 
 

如果任务等待了很久,忘记了taskID,您还可以运行下面的指令查询自己账号下面的所有任务ID。任务排队也可以查看当前环境和账号支持的额度。更多的指令可以参考上文的 的 来表示。


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号