HDBSCAN не будет использовать все доступные процессоры. Процессы просто спят

В течение последних нескольких недель я пытался провести довольно большой кластерный анализ, используя HDBSCAN алгоритм в python 3.7, Данные, о которых идет речь, составляют примерно 4 миллиона строк на 40 столбцов, около 1,5GB в CSV формат. Это смесь целых, bools и плавает до 9 цифр.

В течение этого периода каждый раз, когда мне удавалось передавать данные в кластер, это занимало 3 с лишним дня, что кажется странным, учитывая HDBSCAN почитается за его скорость, и я запускаю его на Google Cloud Compute Instance с 96 процессорами. Я потратил несколько дней, пытаясь заставить его использовать вычислительную мощность экземпляра облака, но безрезультатно.

Использование автоматического определения алгоритма в HDBSCAN, он выбирает boruvka_kdtree как лучший алгоритм для использования. И я попытался передать всевозможные значения параметру core_dist_n_jobs. С -2, -1, 1, 96, multiprocessing.cpu_count(), до 300. Кажется, что все имеют аналогичный эффект, заставляя 4 основных процесса Python использовать полное ядро, порождая больше спящих процессов.

Я отказываюсь верить, что я делаю это правильно, и это действительно, сколько времени это займет на этом оборудовании. Я убежден, что я должен пропустить что-то вроде проблемы, где использование JupyterHub на той же машине вызывает какое-то GIL заблокировать, или я пропускаю какой-то параметр для HDBSCAN,

Вот мой текущий звонок HDBSCAN:

hdbscan.HDBSCAN(min_cluster_size = 100000, min_samples = 500, algorithm='best', alpha=1.0, memory=mem, core_dist_n_jobs = multiprocessing.cpu_count())

Я следил за всеми существующими проблемами и постами, связанными с этой проблемой, которую я мог найти, и пока ничего не помогло, но я всегда стараюсь даже радикальные идеи, потому что это даже не полные данные, которые я хочу кластеризовать и этот показатель занял бы 4 года, чтобы объединить полные данные!

0 ответов

По мнению автора

Только вычисление расстояния между ядрами может использовать все ядра, к сожалению, это, по-видимому, первые несколько секунд. Остальные вычисления, к сожалению, сложно распараллелить, и они будут выполняться в одном потоке.

вы можете прочитать проблемы по ссылкам ниже:

Не используются все доступные процессоры?

core_dist_n_jobs =1 или -1 -> никакой разницы и время вычислений чрезвычайно велико

Другие вопросы по тегам