Прискорення GPU в PixInsight: налаштування CUDA та реальні тести продуктивності
Ця стаття складена на основі нотаток за 2021–2024 роки; частина інструментів, версій CUDA та процесів налаштування відтоді оновилася (зокрема, пізніші версії PixInsight вже підтримують налаштування в один клік), тож під час читання враховуйте часовий контекст.
Відколи нейромережеві процеси на кшталт видалення зір, зменшення шуму за допомогою ШІ та підвищення різкості за допомогою ШІ один за одним почали входити в робочий процес PixInsight, питання «чи варто додати відеокарту до комп’ютера для обробки» стало дуже практичним. У цій статті я зібрав свій досвід останніх кількох років у тестуванні й налаштуванні прискорення GPU: навіщо потрібен GPU, як його увімкнути, скільки часу це заощаджує, а також чим відрізняються платформи.
Чому потрібне прискорення GPU
Процеси, які зараз у PixInsight підтримують прискорення GPU, — це переважно ті, що потребують інтенсивних обчислень нейронних мереж: StarNet++, StarNet 2, StarXTerminator (SXT), NoiseXTerminator (NXT), BlurXTerminator (BXT). Якщо ці процеси виконувати лише на CPU, особливо коли розмір зображення великий, час очікування стає дуже відчутним.
Дуже наочний приклад — пакетне видалення зір: під час обробки комет новим методом потрібно в лінійному стані видаляти зорі з кожного ще не інтегрованого кадру комети окремо. Наприклад, для понад 200 кадрів по 9 мегапікселів із прискоренням на RTX 3060 Laptop на один кадр іде близько 20 с; якщо покладатися лише на CPU, загальний час змусить вас засумніватися у власних життєвих рішеннях.
Варто один раз скористатися прискоренням GPU — і назад, мабуть, уже не повернетеся.
Як я вперше успішно увімкнув CUDA
Наприкінці 2021 року, витративши кілька годин на тестування різних версій NVIDIA CUDA, cuDNN і TensorFlow, я нарешті зумів задіяти GPU (NVIDIA RTX 3060) для допомоги у видаленні зір:
- StarXTerminator — лише близько 15 с;
- StarNet++ — менш ніж 10 с;
— і саме за такий час завершувалося видалення зір з одного кадру. Порівняно з роботою лише на CPU різниця була дуже помітною.

Як увімкнути: від ручного налаштування до встановлення в один клік
Ранній спосіб: ручне розміщення файлів
На ранньому етапі, щоб увімкнути прискорення GPU, доводилося самостійно завантажувати відповідні версії файлів CUDA, cuDNN, TensorFlow тощо і розміщувати їх у потрібних місцях. Поріг входу в цей процес був не низьким, і, крім того, це стосувалося тільки користувачів Windows, у яких встановлено PixInsight і є відеокарта NVIDIA з ядрами CUDA. Користувачам відеокарт AMD (зокрема інтегрованої графіки) варто одразу пропустити цей розділ, а користувачам Linux доведеться самостійно звірятися з відповідними аналогами. Після завершення налаштування це значно підвищувало швидкість роботи StarNet, StarNet++, SXT, NXT, BXT.
Незручність полягала в тому, що з кожним оновленням PixInsight ці файли часто доводилося розміщувати заново, а про це було легко забути.
Теперішній спосіб: вбудоване налаштування PI в один клік
На початку 2024 року ситуація значно покращилася — тепер достатньо додати в PixInsight репозиторій оновлень (repository), щоб одразу користуватися прискоренням GPU без додаткового встановлення й налаштування. Це спосіб, який RC (Рассел Кроман, Russell Croman), автор серії XTerminator, запропонував на форумі PixInsight. На той момент ця функція працювала лише у Windows, версія для Linux ще розроблялася; що ж до операційної системи Mac, там подібне налаштування взагалі не було потрібне.
Як переконатися, що GPU дійсно виконує обчислення
Щоб дізнатися, чи справді працює GPU під час видалення зір або зменшення шуму, у Windows 10/11 зробіть так: відкрийте Диспетчер завдань, перейдіть на вкладку «GPU» і виберіть підрозділ «CUDA»; якщо бачите, що в ядер CUDA з’явилося завантаження, це означає, що GPU використовується (наприклад, під час запуску SXT можна побачити, як завантаження ядер CUDA підскакує до 87%); якщо ядра CUDA взагалі не показують активності, значить, GPU не задіяний.

Тести продуктивності
Високопродуктивний CPU проти GPU середнього-низького рівня
Багато хто запитує: якщо CPU достатньо потужний, чи потрібна взагалі відеокарта? Я порівняв споживчий високопродуктивний CPU (AMD R9-7950X) зі споживчою відеокартою середнього-низького рівня (RTX 3060 12G), використовуючи програмне забезпечення PI 1.8.9-1, SXT 2.05 AI 11 lite:
- Перше зображення, M1 (14,75 Мп): видалення зір на CPU — 1 хв 45 с; на GPU — 10,2 с.
- Друге зображення, Webb NGC 3372 (123 Мп): видалення зір на CPU — 12 хв 31 с; на GPU — 1 хв 05 с.
Звідси видно дві закономірності: що більший розмір зображення, то помітніший ефект від прискорення GPU; і навіть якщо зіставити високопродуктивний CPU з GPU середнього-низького рівня, CPU потрібно щонайменше в десять разів більше часу, ніж GPU, щоб виконати ту саму роботу. Якщо ваш CPU не є топовою моделлю, розрив буде лише більшим. Тому, якщо у вашому робочому процесі доводиться постійно використовувати процеси ШІ, я дуже раджу придбати хоча б одну відеокарту середнього-низького рівня серії RTX 30.

Саме оновлення програмного забезпечення CUDA здатне прискорити роботу майже вдвічі
Є ще одне вражаюче відкриття. Трохи більше року тому я вперше увімкнув прискорення CUDA на ноутбуці з RTX 3060 Laptop, а трохи більше ніж через рік, зовсім не змінюючи жодного обчислювального обладнання (ноутбук і так не поміняти), просто оновивши відповідне програмне забезпечення, я повторно виміряв на тому самому зображенні — і швидкість зросла майже вдвічі.
Наприклад, видалення зір із зображення на 120 мегапікселів (PI 1.8.9-1, SXT 2.05 AI 11 lite, RTX 3060 Laptop 6GB):
- Конфігурація CUDA 1 (CUDA 11.2.2, TensorFlow 2.6, cuDNN 8.2.1): близько 2,5 хв.
- Конфігурація CUDA 2 (CUDA 11.8, TensorFlow 2.9, cuDNN 8.7, ZLib DLL x64 1.2.3): лише 1 хв 20 с.
Тож якщо ви встановили CUDA свого часу й відтоді жодного разу не оновлювали, не забудьте оновити програмне забезпечення CUDA — можна орієнтуватися на «конфігурацію 2» вище, і це рівнозначно тому, щоб безкоштовно отримати половину продуктивності.

Настільна відеокарта проти ноутбучної
У мене якраз опинилися дві карти — RTX 3060 12G і RTX 3060 Laptop 6G. Час видалення зір за однакової версії програмного забезпечення:
- RTX 3060 12G: 1 хв 4 с;
- RTX 3060 Laptop 6G: 1 хв 20 с.
Обидві карти мають однаковий чіп, різниця лише в обсязі пам’яті та в схемі енергоспоживання настільної/ноутбучної версії, тому час видалення зір відрізняється небагато. Якщо говорити про співвідношення ціна/якість, ігровий ноутбук із відеокартою NVIDIA (на той момент за ціною близько 30000 нових тайванських доларів) можна вважати досить вигідним вибором.

Навіть стара майнінг-карта відчутно допомагає
Удома в мене є старий комп’ютер, зібраний близько чотирьох років тому (AMD R5-3600); його початкова відеокарта (R9-270) уже наближалася до кінця терміну служби. Я придбав в інтернеті майнінг-карту менш ніж за 3000 нових тайванських доларів — NVIDIA GTX 1660s — і протестував на ній видалення зір із повнокадрового зображення (близько 60 мегапікселів):
- лише CPU: 5 хв 40 с;
- GPU: 51 с;
— різниця в часі становить близько 6,6 раза. Навіть попри те, що в 1660s лише трохи більше 1400 ядер CUDA, заощаджений час усе одно дуже помітний. Якщо ви регулярно виконуєте такі операції, як видалення зір, зменшення шуму за допомогою ШІ та підвищення різкості за допомогою ШІ, прискорення GPU — це інвестиція, яка себе виправдовує.

Відмінності між платформами
Підтримка можливості використання прискорення GPU процесами ШІ неоднакова залежно від операційної системи й обладнання. Я узагальнив ситуацію на трьох платформах — Windows, Mac і Linux (частину результатів тестування на Mac надав один із однодумців):
- Windows + NVIDIA: достатньо налаштувати — і можна викликати CUDA, щоб задіяти прискорення GPU для всіх — SXT, BXT, NXT і StarNet.
- Mac на Apple Silicon (наприклад, M1 / M1 Ultra): BXT і NXT без жодного налаштування автоматично викликають Metal для використання прискорення GPU; SXT під час виконання займає лише частину ресурсів CPU й не використовує GPU; щодо StarNet 2 — потрібно перейти на експериментальну версію з офіційного сайту (доступний лише режим командного рядка CLI), щоб успішно скористатися прискоренням GPU.
- Mac на Intel: StarNet може використовувати лише CPU; SXT, BXT, NXT можуть використовувати прискорення GPU, і це працює навіть із GPU від AMD.
На платформі Apple Silicon такі процеси, як SXT, від початку підтримують прискорення GPU, тому їхня продуктивність приблизно на одному рівні з «Windows + прискорення CUDA від NVIDIA». Що ж до системи Linux на ПК, вона теж може викликати GPU для прискорення обчислень.

Підсумок
Озираючись на зміни цих кількох років: прискорення GPU пройшло шлях від хардкорного налаштування, де «доводилося витрачати години на підбір версій CUDA», до того, що «PI вирішує все вбудованим способом в один клік»; процесів, які можна прискорити, стає дедалі більше, і навіть стара майнінг-карта за кілька сотень нових тайванських доларів здатна дати кількаразове прискорення. Якщо ваш робочий процес сильно залежить від процесів ШІ, відеокарта NVIDIA середнього-низького рівня (або Mac на Apple Silicon) — це майже обов’язковий атрибут.