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 -> никакой разницы и время вычислений чрезвычайно велико