Dask: очень низкая загрузка ЦП и несколько потоков? это ожидается?

Я использую dask как в , как распараллелить многие (нечеткое) сравнение строк с использованием apply в Pandas?

По сути, я делаю некоторые вычисления (без записи чего-либо на диск), которые вызывают Pandas и Fuzzywuzzy (которые, по-видимому, не освобождают GIL, если это помогает), и запускаю что-то вроде:

dmaster = dd.from_pandas(master, npartitions=4)
dmaster = dmaster.assign(my_value=dmaster.original.apply(lambda x: helper(x, slave), name='my_value'))
dmaster.compute(get=dask.multiprocessing.get)

Однако вариант кода работает уже 10 часов и еще не закончился. Я заметил в диспетчере задач Windows, что

  • RAM utilization довольно низкий, соответствующий размеру моих данных
  • CPU usage подпрыгивает от 0% до 5% каждые 2/3 секунды или около того
  • У меня есть около 20 Python processes размером 100 МБ, и один процесс Python, который, вероятно, содержит данные размером 30 ГБ (у меня машина на 128 ГБ с 8-ядерным процессором)

Вопрос: ожидается ли такое поведение? Я, очевидно, ужасно ошибаюсь, устанавливая здесь некоторые dask параметры?

Конечно, я понимаю, что особенности зависят от того, что именно я делаю, но, может быть, шаблоны выше уже могут сказать, что что-то ужасно неправильно?

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


person ℕʘʘḆḽḘ    schedule 01.07.2016    source источник
comment
Сколько времени, по вашему мнению, ожидается, займет этот процесс? Эта машина может быть полностью бездействующей, заблокированной или просто чего-то ожидающей. Единственное, что мы можем сказать наверняка, это то, что он не выглядит так, как будто он на самом деле делает что-либо.   -  person Ian McLaird    schedule 01.07.2016
comment
Спасибо @IanMcLaird за ваш вклад. Я действительно думаю, что вычисления должны быть закончены, особенно если есть многопроцессорность. По существу, какие здесь степени свободы? Установить другое значение для npartitions?   -  person ℕʘʘḆḽḘ    schedule 01.07.2016


Ответы (1)


Конечно, я понимаю, что специфика зависит от того, что именно я делаю, но, может быть, приведенные выше шаблоны уже могут сказать, что что-то ужасно неправильно?

Это довольно точно. Выявить проблемы с производительностью сложно, особенно когда в дело вступают параллельные вычисления. Вот некоторые вещи, которые приходят на ум.

  1. Многопроцессорный планировщик должен каждый раз перемещать данные между различными процессами. Цикл сериализации/десериализации может быть довольно дорогим. Лучше использовать распределенный планировщик.
  2. Ваша функция helper может делать что-то странное.
  3. Как правило, использование apply, даже в Pandas, лучше избегать.

Как правило, хороший способ определить эти проблемы — создать минимальный, полный, поддающийся проверке пример, чтобы другие могли воспроизвести и поиграть с ним. без труда. Часто при создании такого примера вы все равно находите решение своей проблемы. Но если этого не произойдет, по крайней мере, вы можете переложить ответственность на сопровождающего библиотеку. Пока такой пример не создан, большинство сопровождающих библиотек не тратят на это свое время, почти всегда имеется слишком много деталей, характерных для рассматриваемой проблемы, чтобы гарантировать бесплатное обслуживание.

person MRocklin    schedule 01.07.2016
comment
привет, MRocklin, да, вы правы, хотя я думаю, что иногда простое выявление симптомов (низкий уровень ЦП и т. д.) может сказать что-то о глубинной причине. Я постараюсь придумать cme, если это возможно. Еще раз спасибо за ваше время - person ℕʘʘḆḽḘ; 02.07.2016