Kedro - 内存管理

Kedro - Memory management

我正在处理 运行 内存不足问题的 Kedro 0.17.2 项目,我正在努力减少内存占用。

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

备注:

您好@Ilspinheiro,很难确定发生了什么。简而言之,我们不希望 Kedro 开箱即用地复制内存,理论上这可以由 hooks.py.

中的某些内容引入

无论如何,我可以帮助您减少内存占用:

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

原来这个问题是由 kedro.extras.decorators.memory_profiler.mem_profile 装饰器中使用的 memory-profiler 库中可能存在的错误引起的。

kedro 装饰器使用 memory-profiler 模块中的 memory_usage 函数。它用于从 python 进程中对 运行 函数使用的总内存进行采样。

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

目前我刚刚删除了装饰器。