DeepLearning4j k-означает очень медленно

Я пытаюсь использовать реализацию K-Means DL4J. Я настроил это следующим образом:

int CLUSTERS = 5;
int MAX_ITERATIONS = 300;
String DISTANCE_METRIC = "cosinesimilarity";
KMeansClustering KMEANS = KMeansClustering.setup(CLUSTERS, MAX_ITERATIONS, DISTANCE_METRIC);

Мои точки данных - это векторы размером 300 (удваивается), и мой тестовый набор состоит из ~ 100 точек данных каждый раз (отдача или взятие). Я запускаю его на своем процессоре (4 ядра) однопоточным способом.

Оценка занимает очень много времени (несколько секунд на пример).

Я взглянул на реализацию алгоритма, и похоже, что уровень его параллелизма очень высок - создается много потоков (по одному на точку данных, если быть точным) и выполняется параллельно. Возможно, это перебор? Есть ли способ, которым я могу контролировать это через конфигурацию? Другие способы ускорить это? Если нет, есть ли другое быстрое решение на основе Java для выполнения k-средних?

1 ответ

"DL4J поддерживает графические процессоры и совместим с распределенными вычислительными программами, такими как Apache Spark и Hadoop". с https://deeplearning4j.org/

Экземпляр Extra Spark или Hadoop может помочь в масштабировании производительности.

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