Kedro内存管理

2024-09-30 16:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个Kedro 0.17.2项目,该项目正在内存不足的问题上运行,我正在努力减少内存占用

我使用memory-profiler库中的mprof进行分析,我注意到在运行节点的第一次计算之后,总有一个子进程,主进程中的内存似乎重复。Kedro是否可能正在复制内存中的数据帧?如果是这样,有没有办法避免这种情况

注:

  • 我正在使用SequentialRunner
  • 我没有使用is_asynccli选项
  • 我没有在节点执行中使用多线程或多处理

enter image description here


Tags: 数据项目内存节点进程is选项情况
2条回答

嗨@Ilspinheiro很难确定到底发生了什么。简言之,我们并不期望Kedro能够在开箱即用的情况下复制内存,理论上这可能是由hooks.py中的某些内容引入的

无论哪种方式,我都可以帮助您减少内存占用:

  1. 更频繁地持久化数据,减少隐式MemoryDataSets的使用
  2. 了解节点中的特定逻辑,您在熊猫中做什么?有没有一种矢量化的方式来做你想做的事情
  3. 如果反复使用相同的数据集,请使用CachedDataSet
  4. 将管道分成更小的部分,分别运行每个部分。主要是缩小问题范围

原来这个问题是由memory-profiler库中的一个可能的bug引起的,该库在kedro.extras.decorators.memory_profiler.mem_profile装饰器中使用

kedro decorator使用memory-profiler模块中的memory_usage函数。它用于对python进程中正在运行的函数使用的总内存进行采样

关于这个问题有一个悬而未决的问题,但还没有解决办法。 https://github.com/pythonprofilers/memory_profiler/issues/332

目前,我刚刚拆除了装饰器

相关问题 更多 >