本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文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این وب‌سایت به فارسی هم در دسترس است.مشاهده به فارسی

Ускорение GPU в PixInsight: настройка CUDA и тесты производительности

Инструменты и оборудование2021.12Ранние заметки

Эта статья составлена по заметкам, сделанным в период с 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 разница была очень заметной.

Экран, на котором впервые успешно было включено ускорение CUDA для удаления звёзд на RTX 3060

Как включить: от ручной настройки до установки в один клик

Прежний способ: ручное размещение файлов

Поначалу, чтобы включить ускорение 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 не задействован.

Проверка загрузки GPU на вкладке CUDA в Диспетчере задач Схема процесса обработки на GPU Схема базовой архитектуры CUDA

Тесты производительности

Высокопроизводительный 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.

Сравнение времени удаления звёзд: высокопроизводительный CPU против GPU среднего-низкого уровня

Одно лишь обновление ПО 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» выше; это всё равно что бесплатно получить почти двукратный прирост производительности.

Сравнение времени удаления звёзд до и после обновления ПО CUDA Разница во времени обработки между различными версиями CUDA

Настольная видеокарта против ноутбучной

У меня как раз оказались две карты — RTX 3060 12G и RTX 3060 Laptop 6G. Время удаления звёзд при одинаковой версии ПО:

  • RTX 3060 12G: 1 мин 4 с;
  • RTX 3060 Laptop 6G: 1 мин 20 с.

У обеих карт одинаковый чип, разница лишь в объёме памяти и в схеме энергопотребления настольной/ноутбучной версии, поэтому время удаления звёзд отличается незначительно. Что касается соотношения цена/качество, игровой ноутбук с видеокартой NVIDIA (на тот момент по цене около 30000 новых тайваньских долларов) можно считать весьма выгодным выбором.

Сравнение времени удаления звёзд между настольной и ноутбучной версией RTX 3060

Даже старая майнинг-карта даёт ощутимый эффект

Дома у меня есть старый компьютер, собранный около четырёх лет назад (AMD R5-3600), чья изначальная видеокарта (R9-270) уже приближалась к концу срока службы. Я приобрёл в интернете майнинг-карту меньше чем за 3000 новых тайваньских долларов — NVIDIA GTX 1660s — и протестировал на ней удаление звёзд с полнокадрового изображения (около 60 миллионов пикселей):

  • только CPU: 5 мин 40 с;
  • GPU: 51 с;

разница по времени составила около 6,6 раза. Даже при том, что у 1660s всего немногим более 1400 ядер CUDA, сэкономленное время всё равно весьма значительно. Если вы регулярно выполняете такие операции, как удаление звёзд, шумоподавление с помощью ИИ и повышение резкости с помощью ИИ, ускорение GPU — весьма стоящая инвестиция.

Сравнение времени удаления звёзд с ускорением GPU на GTX 1660s

Различия между платформами

Поддержка возможности использования ускорения 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 процессами ИИ на разных платформах

Итог

Оглядываясь на изменения этих лет: ускорение GPU прошло путь от хардкорной настройки, где «приходилось тратить часы на подбор версий CUDA», до того, что «PI решает всё встроенным способом в один клик»; процессов, которые можно ускорить, становится всё больше, и даже старая майнинг-карта за несколько сотен тайваньских долларов способна дать многократный прирост скорости. Если ваш рабочий процесс сильно зависит от процессов ИИ, видеокарта NVIDIA среднего-низкого уровня (или Mac на Apple Silicon) — практически обязательный атрибут.