Meningkatkan kecepatan implementasi t-sne di python untuk data yang sangat besar

18

Saya ingin melakukan pengurangan dimensionalitas pada hampir 1 juta vektor masing-masing dengan 200 dimensi ( doc2vec). Saya menggunakan TSNEimplementasi dari sklearn.manifoldmodul untuk itu dan masalah utama adalah kompleksitas waktu. Bahkan dengan method = barnes_hut, kecepatan komputasi masih rendah. Beberapa waktu bahkan kehabisan Memori.

Saya menjalankannya pada prosesor 48 core dengan RAM 130G. Apakah ada metode untuk menjalankannya secara paralel atau memanfaatkan sumber daya yang berlimpah untuk mempercepat proses.

yazhi
sumber
Apakah Anda mencoba reduksi peta dalam kerangka kerja seperti Spark?
Dawny33
Tidak .. bagaimana cara kerjanya dan bisakah Anda mengarahkan saya ..
yazhi
Tolong periksa dokumentasi Spark untuk memahaminya :)
Dawny33
1
Lihat apakah implementasi Spark ini berfungsi.
Emre
1
Ini Scala untuk Spark. Jika Anda menginginkan implementasi python, Anda mungkin bisa menerjemahkannya; Spark juga berjalan pada python.
Emre

Jawaban:

7

Lihat t-SNE berbasis-percepatan FFT yang dipercepat ( kertas , kode , dan paket Python ).

Dari abstrak:

Kami menghadirkan Fast-Fourier Transform-accelerated Interpolation-based t-SNE (FIt-SNE), yang secara dramatis mempercepat perhitungan t-SNE. Langkah yang paling memakan waktu dari t-SNE adalah konvolusi yang kami percepat dengan interpolasi ke grid equispaced dan kemudian menggunakan transformasi Fourier cepat untuk melakukan konvolusi. Kami juga mengoptimalkan perhitungan kesamaan input dalam dimensi tinggi menggunakan perkiraan tetangga terdekat multi-utas.

Makalah ini juga menyertakan contoh dataset dengan sejuta poin dan 100 dimensi (mirip dengan pengaturan OP), dan sepertinya butuh ~ 1 jam.

The_Anomaly
sumber
5

Karena, tidak ada jawaban di SO, saya bertanya pada halaman github dan masalah telah ditutup dengan menyatakan balasan berikut oleh GaelVaroquaux ..

Jika Anda hanya ingin memparalelkan operasi vektor, maka Anda harus menggunakan build numpy yang dikompilasi dengan MKL (jangan mencoba melakukannya sendiri, itu menantang).

Mungkin ada pendekatan untuk paralelisme tingkat tinggi dalam algoritma itu sendiri, yang mungkin akan mengarah pada keuntungan yang lebih besar. Namun, setelah melihat sekilas kode tersebut, saya tidak melihat cara yang jelas untuk melakukan itu.

Saya akan ke depan dan menutup masalah ini, karena ini lebih merupakan daftar whish langit biru. Saya sepenuhnya setuju, saya ingin TSNE berjalan lebih cepat, dan akan lebih baik jika paralelisme itu mudah. Tetapi dalam keadaan saat ini, lebih banyak pekerjaan diperlukan dalam keadaan di mana kita dapat menangani daftar keinginan seperti itu.

yazhi
sumber