BigQuant 2026年度私享会

ETF轮动宝-低内存优化版

由neoblackxt创建,最终由neoblackxt 被浏览 62 用户

运行轮动宝策略参数调优时内存不足,python内核崩溃?

内存不够不用怕!看我内存优化大法,单核6G内存照样跑全程!

https://bigquant.com/codesharev3/ad2867df-2d70-40f3-a9e9-93ae6e45d9eb

使用tune模块并行加速,4核16G内存配置下17分钟即可完成参数寻优。而运行未优化的版本,会在运行30分钟左右时内存占用超过16G而发生内核崩溃,即使用8核32G内存配置的机器完成回测大概也需要38分钟左右。优化可使效率提升100%以上。如果启用FAI集群增加并行计算实例数量,理论上还可以再成倍提升运行速度。

https://bigquant.com/codesharev3/8b0a05bf-ceb5-466f-b6a5-9e658b234072

2025.11.12日更新:

  • 跟随上游修正ETF代码(只改了第二版)
  • 补充裂掉的图,notebook中无法修正,分享出来一定会裂开,只能在本文中单独补充

其他想法:

  • 能否在回测开始前,把各种情况的ETF权重数据提前计算出来,存在数据库表中。回测 handle_data 时直接取结果,就像取预计算因子数据一样,避免重复计算。对性能的影响有多少呢?
  • 双层 tune:FAI 集群中的每个节点有多个CPU核心,在单个节点上使用多进程 tune 并行计算,在 FAI 集群上多节点并行计算。 (我发现新建 FAI 节点配置时,最低配置是双核,应该尽量榨干这些算力)

思路总结:

  • 能用 SQL 计算,就不用 python 计算
  • 不需要的数据不要多取,尽量使用缓存复用需要 IO 操作获取的数据,避免 IO 等待浪费时间,也避免浪费数据库资源和内存资源
  • 用完的大对象及时释放内存
  • 能在 initialize 阶段批量预计算,就不在 handle_data 阶段逐个K线实时计算
  • 对于长耗时任务,能用多核并行计算就不用 for 循环遍历


感谢阅读,请多多指点

\

标签

Python
评论
  • 不错,我们宽豆马上要上线了,上线了第一个就给你发
  • 感谢打赏
  • 感谢所有打赏的朋友
{link}