рабочая память хранится между задачами - PullRequest
0 голосов
/ 23 декабря 2018

Intro

Я распараллелываю некоторый код, используя dask.distributed (смущающая параллельная задача).

  • У меня есть список путей, указывающих на различные изображения, которые я рассылаю работникам.
  • Каждый работник загружает и фильтрует изображение (3D-стек) и выполняет некоторую фильтрацию.3D-фильтрация с помощью scipy сохраняет промежуточные выходы.
  • Каждое отфильтрованное изображение сохраняется в формате npy и / или png на диске.
  • Я выполняю локальное тестирование перед запуском в кластер, и мои настройки:

.

from dask.distributed import Client, LocalCluster
cluster = LocalCluster(n_workers=2, threads_per_worker=1,memory_limit =8e9)
client = Client(cluster)

Проблема:

  • Когда я обрабатываю только два изображения (1 изображение / рабочий), все в порядке
  • КогдаЯ разбрасываю более одного изображения на одного работника. Я получаю это предупреждение, в котором значение памяти процесса увеличивается.

.

distributed.worker - WARNING - Memory use is high but worker has no data to store to disk.
Perhaps some other process is leaking memory?  Process memory: 6.21 GB -- Worker memory limit: 8.00 GB

, предполагая, что часть оперативной памяти, используемая работником,не freed между различными файлами (я думаю, что это промежуточные продукты фильтрации ...)

Вопрос

Есть ли способ освободить память работника перед началом обработкиследующее изображение?нужно ли запускать цикл garbage collector между запущенными задачами?

edit

Я включил gc.collect() вызов в конце функции, выполняемой рабочим, но не исключилПредупреждения.

Большое спасибо за помощь!

...