ayshakhatun9365 Początkujący

Dołączył: 11 Lis 2024 Posty: 1
|
Wysłany: Pon Lis 11, 2024 04:34 Temat postu: Jeszcze szybszy i bardziej skalowalny UMAP na GPU z RAPIDS c |
|
|
UMAP to popularny algorytm redukcji wymiarów stosowany w takich dziedzinach jak bioinformatyka, modelowanie tematów NLP i wstępne przetwarzanie ML. Działa poprzez tworzenie grafu k-najbliższych sąsiadów (k-NN), który w literaturze jest znany jako graf wszystkich sąsiadów, w celu zbudowania rozmytej topologicznej reprezentacji danych, która jest używana do osadzania danych wielowymiarowych w niższych wymiarach.
RAPIDS cuML zawierał już przyspieszony UMAP, który zapewniał znaczną poprawę prędkości w porównaniu z oryginalnym UMAP opartym na CPU. Jak pokazujemy w tym poście, wciąż było pole do poprawy.
W tym poście Dane telegramu badamy, jak korzystać z nowych funkcji wprowadzonych w RAPIDS cuML 24.10. Zagłębiamy się również w szczegóły algorytmu nn-descent i procesu wsadowego. Na koniec udostępniamy wyniki testów porównawczych, aby podkreślić możliwe zyski wydajnościowe. Mamy nadzieję, że pod koniec tego posta będziesz podekscytowany korzyściami, jakie może zapewnić szybszy i skalowalny UMAP RAPIDS.
Wyzwania
Jednym z wyzwań, z jakimi się zmierzyliśmy, był fakt, że faza budowy grafu obejmującego wszystkich sąsiadów zajmuje dużo czasu, zwłaszcza w porównaniu do innych kroków algorytmu UMAP.
Początkowo w cuML UMAP do obliczenia grafu wszystkich sąsiadów stosowano wyłącznie podejście siłowe , które w literaturze jest zwykle nazywane grafem wszystkich sąsiadów, ponieważ wymaga ono wyczerpującego przeszukiwania wszystkich wektorów w zestawie danych.
Ponieważ wyczerpująco oblicza odległości dla każdej pary wektorów w zestawie danych, metoda brute force ma tendencję do słabego skalowania. Tak więc, w miarę jak liczba wektorów w zestawie danych rośnie, ilość czasu spędzonego na tym etapie rośnie kwadratowo (liczba wektorów do potęgi 2) w porównaniu do wszystkich innych etapów w UMAP.
Rysunek 1 pokazuje proporcję czasu spędzonego na budowie grafu wszystkich sąsiadów dla kilku popularnych zestawów danych. Proporcja czasu spędzonego na budowie grafu wszystkich sąsiadów szybko osiąga 99% i więcej w skalach wektorowych 1M i 5M.
Cztery wykresy kołowe pokazują proporcje czasu, jaki algorytm UMAP spędza na obliczaniu grafu wszystkich sąsiadów, w porównaniu z czasem spędzonym na obliczaniu wszystkiego innego. W przypadku małych zestawów danych, takich jak MNIST, ponad połowa czasu (57%) jest spędzana na obliczaniu grafu wszystkich sąsiadów, podczas gdy większe zestawy danych (z wektorami 1M i większymi) spędzają ponad 99% czasu na obliczaniu grafu wszystkich sąsiadów.
Rysunek 1. Czas poświęcony na zbudowanie grafu obejmującego wszystkich sąsiadów
Drugim wyzwaniem, z którym musieliśmy się zmierzyć, było to, że – jak w przypadku wielu algorytmów cuML – cały zbiór danych musiał zmieścić się w pamięci procesora graficznego.
Obsługa dużych zestawów danych, takich jak te o rozmiarze setek GB, może być szczególnie trudna, gdy do przetwarzania dostępny jest tylko procesor graficzny NVIDIA RTX klasy konsumenckiej. Mimo że procesor graficzny NVIDIA H100 oferuje 80 GB pamięci, może to nie wystarczyć dla zestawu danych o rozmiarze 80 GB, ponieważ algorytmy takie jak UMAP wymagają wielu niewielkich tymczasowych alokacji pamięci, które mogą się sumować w trakcie trwania algorytmu.
Przyspieszanie i skalowanie UMAP
Rozwiązaliśmy te wyzwania za pomocą nowego algorytmu wsadowego przybliżonego najbliższego sąsiada (ANN). Podczas gdy ogólne podejście można zastosować do dowolnej zdolności algorytmu wyszukiwania najbliższych sąsiadów, użyliśmy wersji szybkiego algorytmu o nazwie nearest neighbors descent ( nn-descent ) z biblioteki RAPIDS cuVS , przyspieszonej przez GPU, zwanej nearest neighbors descent (nn-descent ) , która świetnie nadaje się do konstrukcji grafu all-neighbors.
Algorytmy ANN przyspieszają proces budowania grafu wszystkich sąsiadów, wymieniając jakość na szybkość. Ogólnie rzecz biorąc, przybliżone metody mają na celu zmniejszenie liczby odległości, które należy obliczyć, aby znaleźć najbliższych sąsiadów. Ponieważ ten algorytm może obliczyć pojedynczy graf wszystkich sąsiadów w częściach, moglibyśmy umieścić większe zestawy danych w pamięci RAM i pobrać tylko to, czego potrzebujemy, do pamięci GPU, gdy tego potrzebujemy. _________________ Dane telegramu |
|