本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文This site is available in English.View in Englishこのサイトには日本語版があります。日本語で表示이 사이트는 한국어로도 제공됩니다.한국어로 보기Diese Website ist auch auf Deutsch verfügbar.Auf Deutsch ansehenEste sitio web también está disponible en español.Ver en españolQuesto sito è disponibile anche in italiano.Visualizza in italianoCe site est également disponible en français.Afficher en françaisEste site também está disponível em português.Ver em portuguêsDeze website is ook beschikbaar in het Nederlands.In het Nederlands bekijkenЭтот сайт также доступен на русском языке.Смотреть на русскомयह वेबसाइट हिन्दी में भी उपलब्ध है।हिन्दी में देखेंهذا الموقع متاح أيضًا باللغة العربية.عرض بالعربيةSitus ini juga tersedia dalam bahasa Indonesia.Lihat dalam bahasa IndonesiaBu site Türkçe olarak da mevcut.Türkçe görüntüleTa strona jest dostępna także po polsku.Wyświetl po polskuTrang web này cũng có phiên bản tiếng Việt.Xem bằng tiếng Việtاین وب‌سایت به فارسی هم در دسترس است.مشاهده به فارسیЦей сайт також доступний українською.Переглянути українськоюTato stránka je k dispozici také v češtině.Zobrazit v češtiněAcest site este disponibil și în limba română.Vizualizare în românăเว็บไซต์นี้มีเวอร์ชันภาษาไทยดูเป็นภาษาไทย

GPU-gyorsítás PixInsightban: CUDA-beállítás és valós teljesítménytesztek

Eszközök és hardver2021.12Régebbi jegyzetek

Ez a cikk a 2021 és 2024 között készült jegyzeteimből áll össze; egyes eszközök, CUDA-verziók és beállítási lépések azóta frissültek (a későbbi PixInsight-verziók már egykattintásos beállítást is támogatnak), ezért olvasás közben érdemes szem előtt tartani az időbeli hátteret.

Amióta az olyan neuronhálós folyamatok, mint a csillagtalanítás, a mesterséges intelligenciás (MI) zajcsökkentés és élesítés, sorra beépültek a PixInsight munkafolyamatába, nagyon is gyakorlati kérdéssé vált, hogy „érdemes-e videokártyát tenni a feldolgozó számítógépbe?” Ebben a cikkben az elmúlt évek GPU-gyorsítással kapcsolatos tapasztalatait és beállításait gyűjtöttem össze: miért érdemes GPU-t használni, hogyan kapcsolható be, mennyi időt takarít meg, és miben térnek el egymástól az egyes platformok.

Miért van szükség GPU-gyorsításra

A PixInsightban jelenleg GPU-gyorsítást támogató folyamatok elsősorban azok, amelyek sok neuronhálós számítást igényelnek: a StarNet++, a StarNet 2, a StarXTerminator (SXT), a NoiseXTerminator (NXT) és a BlurXTerminator (BXT). Ha ezeket a folyamatokat csak CPU-n futtatjuk, különösen nagyobb képméret esetén, a várakozási idő igen jelentőssé válik.

Nagyon szemléletes példa erre a kötegelt csillagtalanítás: amikor az újabb módszerrel dolgozunk fel üstökösöket, lineáris állapotban, képenként kell csillagtalanítani minden még nem stackelt üstökösfelvételt. Egy több mint 200 képből álló, 9 megapixeles sorozatnál például az RTX 3060 Laptop kártyával gyorsítva egy-egy kép csillagtalanítása csak kb. 20 másodpercig tart; ha valaki tisztán a CPU-ra hagyatkozik, az összidő már az élet nagy döntéseit is megkérdőjelezteti az emberrel.

Ha valaki egyszer kipróbálta a GPU-gyorsítást, onnantól nagyjából nincs visszaút.

Amikor először sikerült bekapcsolnom a CUDA-t

2021 végén, miután órákon át teszteltem az NVIDIA CUDA, a cuDNN és a TensorFlow különböző verzióit, végre sikerült bevetnem a GPU-t (NVIDIA RTX 3060) a csillagtalanítás segítésére:

  • A StarXTerminatornak csak kb. 15 másodpercre volt szüksége;
  • a StarNet++ esetében kevesebb mint 10 másodpercre;

ennyi idő alatt fejeződött be egyetlen kép csillagtalanítása. A tiszta CPU-hoz képest a különbség nagyon szembetűnő volt.

Az a képernyő, amelyen először sikerült bekapcsolni a CUDA-gyorsítású csillagtalanítást egy RTX 3060-as videokártyán

Hogyan kapcsoljuk be: a kézi beállítástól az egykattintásos telepítésig

A régi módszer: fájlok kézi elhelyezése

Régen a GPU-gyorsítás bekapcsolásához magunknak kellett letölteni a megfelelő verziójú CUDA-, cuDNN- és TensorFlow-fájlokat, és a megfelelő helyre másolni őket. Ez a folyamat nem volt egyszerű, és emellett csak azokra a Windowst futtató felhasználókra vonatkozott, akiknek a gépén telepítve volt a PixInsight, és CUDA-magos NVIDIA videokártyával rendelkeztek. Az AMD videokártyát (beleértve az integrált grafikát is) használók nyugodtan hagyják ki ezt a részt, a Linux-felhasználóknak pedig maguknak kell megkeresniük a megfelelő lépéseket. A beállítás után jelentősen felgyorsult a StarNet, a StarNet++, az SXT, az NXT és a BXT futása.

A bosszantó az volt, hogy minden PixInsight-frissítéskor gyakran újra el kellett helyezni ezeket a fájlokat, amit könnyű volt elfelejteni.

A jelenlegi módszer: a PI beépített egykattintásos beállítása

2024 elejére a helyzet sokat javult – mostantól elég egy frissítési adattárat (repository) hozzáadni a PixInsighthoz, és rögtön használható a GPU-gyorsítás, külön telepítés és beállítás nélkül. Ez a módszer RC-től (Russell Croman), az XTerminator-sorozat szerzőjétől származik, aki a PixInsight fórumán tette közzé. Akkoriban ez a funkció csak Windows alatt működött, a Linux-verzió még fejlesztés alatt állt; a macOS-nek pedig eleve sosem volt szüksége ilyen beállításra.

Hogyan ellenőrizzük, hogy a GPU valóban dolgozik-e

Ha szeretnénk kideríteni, hogy csillagtalanításkor vagy zajcsökkentéskor tényleg dolgozik-e a GPU, Windows 10/11 alatt a következőt tehetjük: nyissuk meg a Feladatkezelőt, váltsunk a „GPU” lapra, majd válasszuk ki a „CUDA” allapot. Ha a CUDA-magoknál kihasználtság jelenik meg, az azt jelenti, hogy a GPU dolgozik (SXT futtatásakor például láthatjuk, hogy a CUDA-magok kihasználtsága 87%-ra ugrik); ha a CUDA-magoknál egyáltalán nincs mozgás, akkor a GPU nincs kihasználva.

A GPU kihasználtságának ellenőrzése a Feladatkezelő CUDA allapján A GPU feldolgozási folyamatának vázlata A CUDA alapvető architektúrájának vázlata

Valós teljesítménytesztek

Csúcskategóriás CPU a közepes/alsó kategóriás GPU ellen

Sokan kérdezik: ha elég erős a CPU, akkor tényleg nincs szükség videokártyára? Egy fogyasztói csúcskategóriás CPU-t (AMD R9-7950X) állítottam szembe egy fogyasztói közepes/alsó kategóriás videokártyával (RTX 3060 12G), a szoftver PI 1.8.9-1 és SXT 2.05 AI 11 lite volt:

  • Első képsorozat, M1 (14,75 MP): CPU-s csillagtalanítás 1 perc 45 másodperc; GPU-s csillagtalanítás 10,2 másodperc.
  • Második képsorozat, Webb NGC 3372 (123 MP): CPU-s csillagtalanítás 12 perc 31 másodperc; GPU-s csillagtalanítás 1 perc 05 másodperc.

Két szabályszerűség rajzolódik ki: minél nagyobb a kép mérete, annál kifejezettebb a GPU-gyorsítás hatása; és még egy csúcskategóriás CPU-t egy közepes/alsó kategóriás GPU-val szembeállítva is legalább tízszer annyi időbe telik a CPU-nak ugyanazt a munkát elvégezni, mint a GPU-nak. Ha valakinek nem csúcskategóriás a CPU-ja, a különbség csak nagyobb lesz. Ezért, ha a munkafolyamatban ismételten szükség van MI-s folyamatokra, nagyon ajánlom, hogy legalább egy közepes/alsó kategóriás RTX 30-as sorozatú videokártyát szerezzünk be.

A csillagtalanítási idő összehasonlítása csúcskategóriás CPU és közepes/alsó kategóriás GPU között

Már a CUDA-szoftver frissítése is majdnem megduplázza a sebességet

Van egy másik meglepő felfedezésem is. Kicsit több mint egy éve kapcsoltam be először a CUDA-gyorsítást az RTX 3060 Laptop videokártyás noteszgépemen, majd bő egy évvel később, anélkül, hogy bármilyen számítási hardvert lecseréltem volna (a noteszgépen amúgy sem lehet), csak a kapcsolódó szoftvereket frissítettem, és ugyanazokkal a képekkel újramérve a sebesség meglepő módon majdnem megduplázódott.

Vegyük példaként egy 120 megapixeles kép csillagtalanítását (PI 1.8.9-1, SXT 2.05 AI 11 lite, RTX 3060 Laptop 6GB):

  • 1. CUDA-beállítás (CUDA 11.2.2, TensorFlow 2.6, cuDNN 8.2.1): kb. 2,5 perc.
  • 2. CUDA-beállítás (CUDA 11.8, TensorFlow 2.9, cuDNN 8.7, ZLib DLL x64 1.2.3): mindössze 1 perc 20 másodperc.

Aki tehát régen telepítette a CUDA-t, és azóta nem frissítette, ne felejtse el frissíteni a CUDA-szoftvert – érdemes a fenti „2. beállítás” kombinációt követni, ez olyan, mintha fél teljesítményt kapnánk ingyen.

A csillagtalanítási idő összehasonlítása a CUDA-szoftver frissítése előtt és után A feldolgozási idő különbsége az egyes CUDA-verziók között

Asztali és noteszgép videokártya

Éppen kéznél volt egy RTX 3060 12G és egy RTX 3060 Laptop 6G kártya is, ugyanazzal a szoftververzióval mérve a csillagtalanítási idő:

  • RTX 3060 12G: 1 perc 4 másodperc;
  • RTX 3060 Laptop 6G: 1 perc 20 másodperc.

A két kártya chipje megegyezik, a különbség csak a memóriakapacitásban és az asztali/noteszgép változat fogyasztási tervezésében van, ezért a csillagtalanítási idő nem tér el sokat. Ár-érték arányban egy NVIDIA videokártyával felszerelt gamer noteszgép (amely akkoriban körülbelül 30 000 tajvani új dollárba került) egészen kedvező választásnak számít.

A csillagtalanítási idő összehasonlítása az asztali és a noteszgép RTX 3060 között

Még egy régi bányászkártyán is érezhető a különbség

Otthon van egy kb. négy éve összerakott régi gépem (AMD R5-3600), amelynek eredeti videokártyája (R9-270) már közel járt élettartama végéhez. Neten szereztem kevesebb mint 3000 tajvani új dollárért egy NVIDIA GTX 1660s bányászkártyát, és ezen teszteltem egy teljes méretű kép (kb. 60 megapixel) csillagtalanítását:

  • csak CPU: 5 perc 40 másodperc;
  • GPU: 51 másodperc;

Az időkülönbség kb. 6,6-szoros. Bár az 1660s CUDA-magjainak száma csak valamivel több mint 1400, a megtakarított idő így is jelentős. Ha valaki ismételten végez olyan műveleteket, mint a csillagtalanítás, az MI-s zajcsökkentés és az MI-s élesítés, a GPU-gyorsítás mindenképp megéri a befektetést.

A GPU-gyorsítású csillagtalanítás idejének összehasonlítása egy GTX 1660s kártyán

A platformok közötti különbségek

A különböző operációs rendszerek és hardverek nem egységesen támogatják, hogy az MI-s folyamatok használhatnak-e GPU-gyorsítást. Összegyűjtöttem a Windows, a Mac és a Linux platform helyzetét (a Mac-es tesztek egy részének eredményét egy hobbitársam bocsátotta rendelkezésre):

  • Windows + NVIDIA: elég egyszer beállítani, és utána a CUDA meghívásával az SXT, a BXT, az NXT és a StarNet mindegyike GPU-gyorsítást kap.
  • Apple Silicon alapú Mac (például M1 / M1 Ultra): a BXT és az NXT bármilyen beállítás nélkül automatikusan meghívja a Metalt a GPU-gyorsításhoz; az SXT futás közben csak a CPU-erőforrások egy részét használja, a GPU-t nem veszi igénybe; a StarNet 2 esetében pedig a hivatalos weboldalon elérhető kísérleti verzióra kell váltani (amely csak parancssoros CLI módban létezik), hogy sikerüljön GPU-gyorsítást használni.
  • Intel alapú Mac: a StarNet csak CPU-t tud használni; az SXT, a BXT és az NXT viszont képes GPU-gyorsításra, és ez AMD GPU-val is működik.

Az Apple Silicon platformon az olyan folyamatok, mint az SXT, natívan támogatják a GPU-gyorsítást, ezért a teljesítményük nagyjából egy szinten van a „Windows + NVIDIA CUDA-gyorsítás” kombinációéval. Ami pedig a PC-s Linux rendszert illeti, az is képes meghívni a GPU-t a számítások gyorsításához.

Tesztelési eredmények arról, hogy az MI-s folyamatok az egyes platformokon tudnak-e GPU-gyorsítást használni

Összefoglalás

Ha visszatekintünk az elmúlt évek változásaira: a GPU-gyorsítás eljutott onnan, hogy „órákat kellett tölteni a megfelelő CUDA-verzió összeállításával”, odáig, hogy „a PI beépítve, egy kattintással elintézi”; egyre több folyamat gyorsítható, és még egy néhány száz tajvani új dollárért beszerezhető régi bányászkártya is többszörös gyorsulást hozhat. Ha valakinek a munkafolyamata erősen támaszkodik MI-s folyamatokra, egy közepes/alsó kategóriás NVIDIA videokártya (vagy egy Apple Silicon alapú Mac) szinte elengedhetetlen.