Ускорение 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, без дополнительной установки и настройки. Это способ, который предложил на форуме PixInsight RC (Russell Croman), автор серии XTerminator. На тот момент эта функция работала только в Windows, версия для Linux ещё разрабатывалась; что касается macOS, там подобная настройка изначально не требовалась.
Как проверить, что 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) — практически обязательный атрибут.