302 M.tune 调优任何代码
由jliang创建,最终由jliang 被浏览 150 用户
从0开始
M.tune 是 301 滚动训练的底层核心
M.tune.run 运行
-
新建一个notebook,任意给个名称
tune.ipynb
\n -
添加一个代码单元,输入如下代码,运行,可以看到并没有输出 hello,而是创建了
tunee 1
(调优对象 1)%%tune 1 print("hello")
-
添加一个代码单元,输入如下代码,运行,可以看到
tunee 1
被执行了一次。from bigmodule import M M.tune.run( "1", {} )
-
添加一个代码单元,输入如下代码,运行,可以看到
tunee 1
被执行了3次。from bigmodule import M M.tune.run( "1", [{}, {}, {}], )
-
M.tune.run
\n
普通参数
-
添加代码单元,创建调优对象 2
%%tune 2 from bigmodule import M M.logger.info(f"hello {M.tune.parameter('name')}")
-
添加代码单元,运行调优对象,并传递2组不同参数
from bigmodule import M M.tune.run( "2", [ {"name": "tom"}, {"name": "john"}, ], )
-
可以看到
M.tune.parameter('name')
获取到了传入的参数\n
\
模块参数
-
添加代码单元,创建调优对象 3,包括一个模块调用
m1 = M.dai_datasource.v3(id="cn_stock_bar1d", m_name="m1")
,注意其中的m_name
需要和前面变量保持一致,在可视化模式下,这个变量会自动维护。%%tune 3 from bigmodule import M m1 = M.dai_datasource.v3(id="cn_stock_bar1d", m_name="m1") print(f"hello {M.logger.info}")
-
添加代码单元,运行调优对象,并传递2组不同参数
from bigmodule import M M.tune.run( "3", [ {"m1.id": "cn_stock_prefactors"}, {"m1.id": "some"}, ], )
-
可以看到模块 m1 自动应用了传入参数
\
收集输出
-
添加代码单元,运行调优对象 3,并传递2组不同参数,其中使用outputs指定要收集回来的变量
from bigmodule import M M.tune.run( "3", [ {"m1.id": "cn_stock_prefactors", "__outputs__": ["m1"]}, {"m1.id": "some", "__outputs__": ["m1"]}, ], )
-
可以看到模块run返回了m1的值
\
调优对象前/后
-
添加代码单元,运行调优对象 3,通过 init 和 exit 设置回调函数,分别在调优代码执行前后被调用
from bigmodule import M def foo_init(locals_): # 参数 locals_, 获得执行环境的变量 print("foo_init") print(locals_) def foo_exit(locals_): # 参数 locals_, 获得执行环境的变量 print("foo_exit") print(locals_) M.tune.run( "3", [ { "m1.id": "cn_stock_prefactors", "__outputs__": ["m1"], "__init__": foo_init, "__exit__": foo_exit, }, {"m1.id": "some", "__outputs__": ["m1"]}, ], )
模块前/后
- 添加代码单元,运行调优对象 3,通过 m1. init 和 exit 设置回调函数,分别在调优代码执行前后被调用,在 init 可以修改 name 和 version,会替换执行模块\n
locals_["name"] = "xxx"
*匹配任何模块
*.id
表示对所有模块应用此参数。如果模块不支持此参数,会自动忽略。实际应用了哪些参数,可以在日志中看到。
代码
https://bigquant.com/codesharev2/25d9c694-9bc7-41de-83a4-c5cbef1c0a95
\