Підвищити швидкість впровадження t-sne в python для величезних даних


18

Я хотів би зробити скорочення розмірності на майже 1 мільйон векторів кожних 200 вимірювань ( doc2vec). Я використовую для цього TSNEреалізацію з sklearn.manifoldмодуля, і головна проблема - складність у часі. Навіть при method = barnes_hutцьому швидкість обчислення залишається низькою. Деякий час навіть не вистачає пам'яті.

Я працюю на 48-ядерному процесорі зі 130G ОЗУ. Чи є метод запустити його паралельно або скористатися рясним ресурсом, щоб прискорити процес.


Ви спробували зменшити карту в такій рамці, як Spark?
Зорі33

Ні .. як це працює і чи можете ви мене, будь ласка, направити ..
yazhi

Pl пройти через документації Спарк в для розуміння його :)
Dawny33

1
Перевірте, чи працює ця програма Spark.
Емре

1
Це Scala for Spark. Якщо ви хочете реалізувати python, ви можете перекласти його; Іскра працює також на пітоні.
Емре

Відповіді:



7

Ознайомтеся з t-SNE на основі інтерполяції на основі FFT ( папір , код та пакет Python ).

З реферату:

Ми представляємо швидку інтерполяцію на основі інтерпреляції на основі Фур'є на основі F-FI (FIt-SNE), що значно прискорює обчислення t-SNE. Найбільш трудомісткий крок t-SNE - це згортання, яке ми прискорюємо, інтерполюючи на рівнобіжну сітку і згодом використовуючи швидке перетворення Фур'є для виконання згортки. Ми також оптимізуємо обчислення подібності вхідних даних у великих розмірах, використовуючи багатопотокові приблизні найближчі сусіди.

Документ також містить приклад набору даних з мільйоном точок і 100 розмірами (аналогічно налаштуванню ОП), і, здається, це займе ~ 1 годину.


5

Оскільки відповіді в ТА немає, я запитав себе на сторінці github, і питання було закрите, заявивши наступну відповідь від GaelVaroquaux.

Якщо ви хочете лише паралелізувати векторну операцію, то вам слід використовувати збірку numpy, складену з MKL (не намагайтеся зробити це самостійно, це складно).

Можуть бути підходи до паралелізму високого рівня в самому алгоритмі, що, ймовірно, призведе до більших вигод. Однак після швидкого перегляду коду я не побачив ясного способу зробити це.

Я буду заздалегідь і закрити це питання, оскільки це скоріше список бажань блакитного неба. Я повністю згоден, я хотів би, щоб TSNE пройшов швидше, і було б чудово, щоб паралелізм був легким. Але в теперішньому стані речей потрібно більше працювати, щоб бути в стані, коли ми можемо вирішити такий список бажань.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.