302 M.tune 调优任何代码
由jliang创建,最终由jliang 被浏览 321 用户
从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,会替换执行模块\nlocals_["name"] = "xxx"
*匹配任何模块
*.id表示对所有模块应用此参数。如果模块不支持此参数,会自动忽略。实际应用了哪些参数,可以在日志中看到。
代码
https://bigquant.com/codesharev2/25d9c694-9bc7-41de-83a4-c5cbef1c0a95
\