BigQuant使用文档

160-alpha挖掘大杀器——并行模块tune

由qxiao创建,最终由qxiao 被浏览 10 用户

导语

平台有大量算力,但是个人开发环境算力有限,因此怎样将一份AI策略,修改下模型策略的参数,让他在远程集群环境运行呢,比如我模型学习率是0.01 ,希望在0-1整数之间按0.01遍历呢?

这里有100种情形,100组参数。如果每组参数要跑10分钟,那跑100组参数的时间太长了,接近16个小时,这大大影响策略投研效率,因此本文介绍平台最近优化的并行模块tune.我们可以在几十分钟就完成16个小时的事情,这也是并行模块的初衷,让您可以在短时间完成之前for循环模式需要大量运行时间的任务。

模块简介

M.tune是一个并行模块,之前的使用文档见:302 M.tune 调优任何代码 ,之前目录下也给出了一些示例,但建议使用本文的代码,因为本文是优化后的最新使用介绍。M.tune模块目前适用于带可视化画布的任务跑并行,这是需要单独说明的,如果您的策略是纯python代码,我们后续单独给出一个文档。

设计机制

因为M.tune是针对画布的任务进行并行,其工作机制是这样的:

每一个画布有多个可视化模块,我们并行的目的是让可视化模块的参数取不同的数值运行,因此我们需要将画布取一个名称。然后,新建一个cell,调用这个画布时,将不同的模块参数传入。

这样M.tune就实现了使用不同的参数赋予可视化的某个具体模块,让其成为一个单独的子任务,最终全部任务运行完毕,我们就知道了不同参数下的运行结果,达到我们投研的目的。

代码说明

我们先通过模版创建一个AI可视化的策略:

我们切换到代码模式,给画布取个名称,因为后续M.tune要调用画布,所以需要传入画布名称

切换后,我们再第一行代码里,使用两个百分号加字母tune开头,给画布取一个名称

上面截图可以看出,我的画布名称是 hyper_run

这里单独提示下,如果画布加了取名称的代码,那么这个画布的运行功能被屏蔽了,如果运行的话,只会输出这个画布的名称,不会真实运行,如果我们要真实运行画布里模块,想看模块的运行结果,需要把取名称的这一行代码去掉(即将两个百分号+tune这一行代码去掉)

接下来就是重点,如何使用M.tune调用画布代码

这里没有什么特别说明的,因为上图截图注释已经非常详细了,上图是希望对m5这个训练模块的参数进行按不同的参数值进行并行运行,分别是两个参数:叶节点数量和学习率

可能小伙伴会疑惑,那我怎么知道这俩参数的参数名称是什么呢?怎么看呢?很简单,咱们切换到代码模式,找到对应模块,就知道参数名称了

最后,我们直接调用M.tune模块,参数的数量就是任务的数量,本例子是120个任务。

运行完成后,全部结果都在result变量中(因为上面代码我们定义是result=M.tune),我们可以使用Python代码直接查看或者画图,画图可以按自己需求来,热力图、柱状图、表格图都行,这里我们是柱状图举例

横轴表示第几个子任务


比如我们看到数值最高的柱子是第21个子任务,我们通过位置就能看出是哪组参数:

可以看出15、0.2是最佳参数,那我们模拟交易就可以使用这组参数了。

值得注意的是:这个代码不能直接提模拟交易,因为这个是研究代码,因此你需要把画布取名的代码去掉或者注释掉,把下面M.tune代码删除,然后将m5叶子节点数手动改为15,学习率改为0.2,才能提交模拟交易。

\

性能说明

本例是120组任务,每组子任务运行时长是58.02秒,总共花了116分钟。单独运行一个子任务是需要10分钟左右,相当于我们把10分钟的任务提速到1分钟完成,效果还是非常明显,确实是大杀器

克隆代码

下面代码可以克隆,但不能提交模拟交易哈,只是投研用来研究跑并行的代码,如果要提模拟和实盘交易,你需要把画布取名的代码去掉或者注释掉,把下面M.tune代码删除,然后将m5叶子节点数手动改为15,学习率改为0.2。

https://bigquant.com/codesharev3/b6c82557-d969-4ae6-8baf-608f39300d3d







\

{link}