Akceleracja GPU w programie PixInsight: konfiguracja CUDA i rzeczywiste testy wydajności
Ten artykuł powstał na podstawie notatek z lat 2021–2024. Część narzędzi, wersji CUDA i procedur konfiguracji została już zaktualizowana (zwłaszcza że późniejsze wersje programu PixInsight obsługują konfigurację jednym kliknięciem), więc czytając, miej na uwadze kontekst czasowy.
Odkąd do przepływu pracy w programie PixInsight zaczęły kolejno trafiać procesy oparte na sieciach neuronowych — usuwanie gwiazd, odszumianie AI, wyostrzanie AI — pytanie „czy dołożyć kartę graficzną do komputera do obróbki?” stało się całkiem praktyczne. W tym artykule zbieram swoje pomiary i doświadczenia z konfiguracją akceleracji GPU z ostatnich kilku lat: po co w ogóle GPU, jak je włączyć, ile czasu da się zaoszczędzić oraz jakie są różnice między platformami.
Dlaczego potrzebna jest akceleracja GPU
Procesy w programie PixInsight, które obecnie obsługują akcelerację GPU, to głównie te oparte na obliczeniach sieci neuronowych: StarNet++, StarNet 2, StarXTerminator (SXT), NoiseXTerminator (NXT), BlurXTerminator (BXT). Jeśli uruchamiasz je wyłącznie na CPU, czas oczekiwania robi się bardzo długi, zwłaszcza gdy rośnie rozmiar obrazu.
Bardzo wymownym przykładem jest wsadowe usuwanie gwiazd: przy obróbce komet nową metodą trzeba w stanie liniowym usunąć gwiazdy z każdej pojedynczej klatki komety, jeszcze przed integracją. Na przykład przy ponad dwustu klatkach o rozdzielczości 9 megapikseli, z akceleracją na RTX 3060 w wersji Laptop, jedna klatka zajmuje tylko około 20 s; jeśli zdasz się wyłącznie na CPU, łączny czas każe ci zwątpić w sens życia.
Kiedy raz spróbujesz akceleracji GPU, raczej nie ma już powrotu.
Pierwszy raz, gdy udało mi się włączyć CUDA
Pod koniec 2021 roku, po kilku godzinach testowania różnych wersji NVIDIA CUDA, cuDNN i TensorFlow, w końcu udało mi się użyć GPU (NVIDIA RTX 3060) do wspomagania usuwania gwiazd:
- StarXTerminator potrzebował tylko około 15 s;
- StarNet++ niecałe 10 s;
żeby usunąć gwiazdy z pojedynczej klatki. W porównaniu z samym CPU różnica była bardzo wyraźna.

Jak to włączyć: od ręcznej konfiguracji do instalacji jednym kliknięciem
Dawna metoda: ręczne wgrywanie plików
We wczesnym okresie włączenie akceleracji GPU wymagało samodzielnego pobrania odpowiednich wersji plików CUDA, cuDNN, TensorFlow i tak dalej oraz umieszczenia ich we właściwych miejscach. Próg wejścia nie był niski, a do tego dotyczyło to wyłącznie użytkowników systemu Windows, którzy mają zainstalowany program PixInsight i kartę graficzną NVIDIA z rdzeniami CUDA. Użytkownicy kart graficznych AMD (w tym układów zintegrowanych) powinni to po prostu pominąć, a użytkownicy systemu Linux muszą sami odszukać odpowiedniki. Po zakończeniu konfiguracji prędkość działania StarNet, StarNet++, SXT, NXT i BXT rośnie bardzo znacząco.
Kłopot w tym, że po każdej aktualizacji programu PixInsight często trzeba było wgrywać te pliki od nowa, a o tym łatwo zapomnieć.
Obecna metoda: wbudowana w PI konfiguracja jednym kliknięciem
Na początku 2024 roku sytuacja bardzo się poprawiła — teraz wystarczy dodać w programie PixInsight repozytorium aktualizacji (repository) i akceleracji GPU można używać od razu, bez dodatkowej instalacji i konfiguracji. To metoda, którą na forum PixInsight udostępnił RC (Russell Croman), autor serii XTerminator. Wtedy funkcja ta działała tylko w systemie Windows, a wersja dla systemu Linux była jeszcze w przygotowaniu; jeśli chodzi o system operacyjny Mac, tam tego rodzaju konfiguracja i tak nigdy nie była potrzebna.
Jak sprawdzić, czy GPU naprawdę liczy
Jeśli chcesz wiedzieć, czy przy usuwaniu gwiazd albo odszumianiu GPU faktycznie się przykłada, w systemie Windows 10/11 otwórz Menedżer zadań (Task Manager), przejdź na kartę „GPU” i wybierz podstronę „CUDA”. Jeśli przy rdzeniach CUDA widać wykorzystanie, znaczy to, że GPU pracuje (na przykład przy uruchomieniu SXT widać, jak rdzenie CUDA skaczą do 87% wykorzystania); jeśli rdzenie CUDA w ogóle się nie ruszają, to GPU nie jest używane.

Pomiary wydajności
Wysokiej klasy CPU vs GPU ze średnio-niskiej półki
Wiele osób pyta: jeśli CPU jest dostatecznie mocny, to czy karta graficzna jest w ogóle potrzebna? Zestawiłem konsumencki procesor z wysokiej półki (AMD R9-7950X) z konsumencką kartą graficzną ze średnio-niskiej półki (RTX 3060 12G); oprogramowanie to PI 1.8.9-1 i SXT 2.05 AI 11 lite:
- Pierwszy obraz, M1 (14.75 MP): usuwanie gwiazd na CPU 1 min 45 s; usuwanie gwiazd na GPU 10,2 s.
- Drugi obraz, Webb NGC 3372 (123 MP): usuwanie gwiazd na CPU 12 min 31 s; usuwanie gwiazd na GPU 1 min 05 s.
Widać dwie prawidłowości: im większy obraz, tym wyraźniejszy efekt akceleracji GPU; a nawet gdy zestawi się wysokiej klasy CPU z GPU ze średnio-niskiej półki, procesor potrzebuje na tę samą pracę co najmniej dziesięć razy więcej czasu niż karta. Jeśli twój procesor nie jest modelem z górnej półki, różnica będzie tylko większa. Dlatego jeśli tylko twój przepływ pracy wymaga wielokrotnego korzystania z procesów AI, bardzo polecam kupno przynajmniej karty graficznej RTX serii 30 ze średnio-niskiej półki.

Sama aktualizacja oprogramowania CUDA potrafi przyspieszyć niemal dwukrotnie
Jest jeszcze jedno zaskakujące odkrycie. Jakiś rok z okładem temu po raz pierwszy włączyłem akcelerację CUDA na laptopie z RTX 3060 Laptop, a nieco ponad rok później, nie wymieniając żadnego podzespołu obliczeniowego (w laptopie i tak nie ma czego wymieniać), zaktualizowałem tylko odpowiednie oprogramowanie i powtórzyłem pomiar na tym samym obrazie — okazało się, że prędkość wzrosła prawie dwukrotnie.
Weźmy za przykład usuwanie gwiazd z obrazu o rozdzielczości 120 megapikseli (PI 1.8.9-1, SXT 2.05 AI 11 lite, RTX 3060 Laptop 6GB):
- Konfiguracja CUDA numer jeden (CUDA 11.2.2, TensorFlow 2.6, cuDNN 8.2.1): około 2,5 min.
- Konfiguracja CUDA numer dwa (CUDA 11.8, TensorFlow 2.9, cuDNN 8.7, ZLib DLL x64 1.2.3): tylko 1 min 20 s.
Dlatego jeśli zainstalowałeś CUDA dawno temu i od tamtej pory nic nie aktualizowałeś, pamiętaj, żeby odświeżyć oprogramowanie CUDA — możesz się wzorować na powyższym zestawie „konfiguracja numer dwa”, co jest jak darmowe zgarnięcie połowy wydajności.

Karta graficzna w wersji desktopowej vs laptopowej
Akurat miałem pod ręką dwie karty: RTX 3060 12G i RTX 3060 Laptop 6G. Czasy usuwania gwiazd przy tej samej wersji oprogramowania:
- RTX 3060 12G: 1 min 4 s;
- RTX 3060 Laptop 6G: 1 min 20 s.
Obie mają ten sam układ, różnią się tylko pojemnością pamięci oraz konstrukcją poboru mocy w wersji desktopowej i laptopowej, więc czasy usuwania gwiazd są zbliżone. Jeśli chodzi o stosunek jakości do ceny, laptop gamingowy z kartą graficzną NVIDIA (wtedy w cenie około 30 000 dolarów tajwańskich) to całkiem opłacalny wybór.

Nawet stara karta pokopalniana robi różnicę
W domu mam stary komputer złożony jakieś cztery lata temu (AMD R5-3600), którego oryginalna karta graficzna (R9-270) dobiegała już kresu życia. Kupiłem w sieci kartę pokopalnianą za niecałe 3000 dolarów tajwańskich — NVIDIA GTX 1660s — i przetestowałem na niej usuwanie gwiazd z obrazu pełnoklatkowego (około 60 megapikseli):
- Samo CPU: 5 min 40 s;
- GPU: 51 s;
czyli różnica około 6,6 razy. Choć 1660s ma tylko nieco ponad 1400 rdzeni CUDA, oszczędność czasu i tak jest bardzo wyraźna. Jeśli tylko wielokrotnie wykonujesz operacje takie jak usuwanie gwiazd, odszumianie AI czy wyostrzanie AI, akceleracja GPU jest inwestycją, która się opłaca.

Różnice między platformami
To, czy procesy AI mogą korzystać z akceleracji GPU, wygląda różnie w zależności od systemu operacyjnego i sprzętu. Zebrałem sytuację dla trzech platform: Windows, Mac i Linux (część wyników testów na komputerach Mac przekazał mi jeden z kolegów po fachu):
- Windows + NVIDIA: wystarczy wszystko poprawnie skonfigurować, żeby wywołać CUDA i przyspieszyć na GPU wszystkie procesy: SXT, BXT, NXT i StarNet.
- Mac z Apple Silicon (na przykład M1/M1 Ultra): BXT i NXT bez żadnej konfiguracji same wywołują Metal i korzystają z akceleracji GPU; SXT przy działaniu zajmuje tylko część zasobów CPU i nie sięga po GPU; jeśli zaś chodzi o StarNet 2, trzeba przejść na wersję eksperymentalną z oficjalnej strony (dostępną wyłącznie w trybie wiersza poleceń CLI), żeby akceleracja GPU w ogóle zadziałała.
- Mac w wersji Intel: StarNet może korzystać tylko z CPU; SXT, BXT i NXT mogą używać akceleracji GPU, i działa to nawet na GPU firmy AMD.
Na platformie Apple Silicon procesy takie jak SXT natywnie obsługują akcelerację GPU, więc ich wydajność jest mniej więcej porównywalna z „Windows + akceleracja CUDA na kartach NVIDIA”. Jeśli chodzi o system Linux na PC, tam również można wywołać GPU do przyspieszenia obliczeń.

Podsumowanie
Patrząc wstecz na zmiany z ostatnich lat: akceleracja GPU przeszła drogę od hardkorowej konfiguracji, w której „całe godziny schodzą na dobieranie wersji CUDA”, do „PI załatwia to wbudowaną funkcją jednym kliknięciem”; procesów, które da się przyspieszyć, jest coraz więcej, a nawet stara, kosztująca grosze karta pokopalniana potrafi dać kilkukrotne przyspieszenie. Jeśli twój przepływ pracy mocno opiera się na procesach AI, karta graficzna NVIDIA ze średnio-niskiej półki (albo Mac z Apple Silicon) jest praktycznie niezbędna.