В современном научном мире данные рождаются с невероятной скоростью. Обсерватории, телескопы, лазеры и источники рентгеновского излучения генерируют петабайты информации, которые часто оказываются слишком массивными для традиционных процессорных конвейеров. Классическая проблема заключается не в том, что один отдельный вычислительный ядро работает медленно, а в том, что весь путь от считывания сырых данных с сенсора до принятия научного решения разорван на множество этапов, требующих перемещения данных между памятью CPU и GPU. Это создает узкие места, из-за которых получение научных результатов может занимать от нескольких часов до месяцев, хотя сами данные были собраны за секунды. Именно эту фундаментальную проблему решает новый открытый инструмент от NVIDIA — cuPhoton.
NVIDIA cuPhoton — это набор инструментов CUDA-X, который позволяет удерживать изображения в памяти GPU на протяжении всего жизненного цикла обработки: от момента считывания с датчика до финальной классификации. Такой подход радикально сокращает время ожидания, превращая месяцы вычислений в минуты, а иногда и в секунды. Это создает замкнутый цикл, позволяющий исследователям работать интерактивно и обсерваториям успевать за потоком данных, который генерируют их инструменты. В этой статье мы подробно разберем архитектуру cuPhoton, его применение в обсерватории Vera C. Rubin и пошаговый пример создания конвейера обработки астрономических изображений.

01Почему традиционные CPU-конвейеры больше не справляются?
Современные научные установки, такие как телескопы для обзора неба или рентгеновские детекторы, производят данные с частотой, которая превышает возможности стандартных процессорных конвейеров. Типичный сценарий выглядит так: сырые данные считываются с сенсора, передаются по шине PCIe в оперативную память компьютера, где они обрабатываются программным обеспечением на CPU, затем, если требуется визуализация или сложная математика, копируются обратно в видеопамять GPU. Каждый такой переход — это потеря времени и пропускной способности.
Для инструментов с высокой пропускной способностью, генерирующих терабайты данных в час, эта последовательность операций создает колоссальные накладные расходы на перемещение данных. Именно здесь часто «съедается» бюджет задержки, критичный для систем оповещения. Если исследователю нужно принять решение в течение 60–120 секунд после получения кадра, а загрузка и предварительная обработка занимают часы, научная ценность данных резко падает. Не хватает не просто более быстрого ядра для одной операции, а целостного, нативного для GPU пути, охватывающего каждый этап: от сенсора до решения.
02Архитектура NVIDIA cuPhoton: Модульный подход к науке
NVIDIA cuPhoton — это открытый набор инструментов, состоящий из модульных блоков, предназначенных для ускорения задач в спектральной и оптической астрономии, а также в анализе данных временных рядов с использованием лазеров и рентгеновского излучения. toolkit предоставляет специализированные модули, каждый из которых отвечает за свой этап обработки:
- xDataReader: Отвечает за прямое чтение файлов FITS (Flexible Image Transport System) непосредственно в память GPU, минуя CPU.
- xRep: Выполняет выравнивание изображений, помещая их на общую небесную сетку.
- xPois: Осуществляет согласование функций рассеяния точки (PSF) и вычитание изображений.
- xFit: Выполняет дипольную подгонку для оценки позиций движущихся объектов.
- xScan: Предназначен для просмотра и классификации кандидатов.
- xRay: Специализированный модуль для анализа данных рентгеновских детекторов во временных рядах.
Такая модульность позволяет исследователям собирать конвейеры под конкретные задачи, комбинируя только необходимые компоненты. Все модули оптимизированы для работы с CUDA 13 и масштабируются на системах с несколькими GPU и узлами, включая архитектуры NVIDIA Grace Blackwell и NVIDIA Vera Rubin.

03Реальный кейс: Обсерватория Vera C. Rubin
Одним из самых ярких примеров применения cuPhoton является обработка данных с телескопа LSSTCam обсерватории Vera C. Rubin. Этот инструмент делает экспозицию размером 3,2 гигапикселя каждые 39 секунд, когда наступает ночь. За одну ночь обсерватория генерирует до 20 терабайт изображений и выявляет около 10 миллионов кандидатов на обнаружение новых объектов.
Задача конвейера Prompt Processing заключается в том, чтобы сравнить каждый новый кадр с эталонным шаблоном того же участка неба. У исследователей есть всего 60–120 секунд, чтобы классифицировать примерно 10 000 обнаруженных объектов, отделив астрофизические транзиенты (например, новые звезды или астероиды) от артефактов, таких как космические лучи, следы спутников или ошибки обработки. Без GPU-ускорения обработка такого объема данных заняла бы месяцы, что сделало бы невозможным своевременное оповещение научного сообщества о новых объектах.
С использованием cuPhoton этот процесс был радикально ускорен. На репрезентативных рабочих нагрузках, включающих сотни терабайт данных и использование нескольких GPU, cuPhoton ускорил загрузку изображений до 14 900 раз и обработку сигналов до 14 550 раз по сравнению с базовым уровнем на x86 CPU. Аналитика данных, которая ранее занимала девять месяцев, была продемонстрирована за четыре часа на Python с использованием GPU-ускорения. Для меньших наборов данных размером в килобайты весь конвейер cuPhoton выполняется за миллисекунды или даже микросекунды.

04Пошаговый разбор научного конвейера
Чтобы понять, как работает cuPhoton на практике, рассмотрим пример реального научного рабочего процесса. Мы будем использовать синтетическую пару астрономических изображений, которая моделирует типичную ситуацию: есть эталонное изображение (reference) и новое научное изображение (science), на котором мог появиться движущийся объект. Цель — найти этот объект, вычтя эталон.
Конвейер состоит из пяти основных этапов, каждый из которых реализуется отдельным модулем cuPhoton:
- Загрузка данных: Чтение текущего экспонирования и эталонных данных непосредственно в память GPU с помощью
xDataReader. - Выравнивание: Размещение обоих изображений на общей небесной сетке, чтобы одна и та же звезда попадала в один и тот же пиксель. Это делается с помощью
xRep. - Согласование PSF и вычитание: Согласование функций рассеяния точки (PSF) — паттернов, описывающих распределение света по пикселям — в текущем экспонировании и раннем эталоне. После вычитания эталона движущийся объект оставляет характерный паттерн из положительных и отрицательных пикселей, называемый диполем. Этот этап выполняет
xPois. - Подгонка модели: Подгонка двухмодельной PSF к диполю для оценки точных позиций движущегося объекта. Здесь используется
xFit. - Визуализация: Отображение ядра согласования PSF, остатков после вычитания и восстановленного диполя с помощью
xScan.

Шаг 1: Установка и подготовка окружения
Для начала работы необходимо клонировать репозиторий cuPhoton и настроить среду. Инструмент поддерживает Python 3.12–3.14 и CUDA 13 на Linux. Установка выполняется с помощью менеджера пакетов uv, который создает изолированное окружение с необходимыми зависимостями, такими как CuPy, PyTorch, Numba-CUDA, KvikIO и NVIDIA nvCOMP.
git clone --branch v0.1.3 --depth 1 https://github.com/NVIDIA/cuPhoton.git
cd cuPhoton
uv sync --locked --extra dev --extra gpu --extra vizВажным шагом является сборка нативного расширения для xDataReader, которое необходимо для чтения файлов FITS. Это требует наличия компилятора C++17, заголовочных файлов CUDA и cuFile, а также установки библиотеки CFITSIO. Сборка выполняется следующей командой:
bash src/cuphoton/xdr/src/build.shПосле настройки создается рабочая директория для хранения файлов FITS, промежуточных данных и результатов визуализации.
export WORK_DIR="$PWD/blog-run"
mkdir -p "$WORK_DIR"/{fits,npz,figs}Шаг 2: Загрузка FITS напрямую на GPU
Формат FITS является стандартом в астрономии. Традиционно данные читаются с помощью библиотеки Astropy на CPU, а затем копируются в память GPU через cupy.asarray. Этот процесс включает парсинг и декомпрессию на хосте, за которым следует передача по шине PCIe, что создает значительные задержки.
Модуль xDataReader решает эту проблему, распределяя нагрузку: CFITSIO планирует диапазоны байтов на CPU, KvikIO читает их (используя NVIDIA GPUDirect Storage, если доступно), nvCOMP декомпрессирует GZIP-тайлы на GPU, а CuPy хранит результат. Это позволяет избежать передачи данных через CPU.
Основной API-функцией является batch_to_device. Она принимает список файлов и индексы HDU (Header Data Unit), которые нужно загрузить, и возвращает стекированные массивы CuPy, уже находящиеся в памяти GPU.
from cuphoton.xdr import batch_to_device
# Загрузка эталонного и научного изображений
(images,) = batch_to_device(
[WORK_DIR / "fits" / "template.fits", WORK_DIR / "fits" / "science.fits"],
hdu_indices=(1,),
)После успешного выполнения функция возвращает массив формы (2, 256, 256), что подтверждает наличие обоих кадров в памяти GPU. Важно отметить, что на этом этапе изображения все еще находятся в своих родных пиксельных сетках детектора, поэтому звезды на них могут не совпадать из-за смещения pointing.

Шаг 3: Выравнивание изображений (Reprojection)
Два наблюдения одного и того же участка неба редко имеют одинаковую пиксельную сетку из-за дрейфа, вращения и различий в масштабе пластины. Система мировых координат (WCS), хранящаяся в заголовках FITS, является картой, связывающей пиксели с небесными координатами. Модуль xRep использует эту информацию для пересэмплирования изображений на общую северно-ориентированную небесную сетку.
Сначала функция build_stack_spec_from_fits читает решения WCS для обоих изображений и строит общую область покрытия (footprint). Затем reproject_stack искажает каждое изображение, чтобы поместить его на эту общую сетку. По умолчанию используется интерполяция Lanczos-3, которая обеспечивает высокое качество при сохранении деталей.
from cuphoton.xrep import (
BBox,
Grid,
build_stack_spec_from_fits,
make_north_up_wcs,
reproject_stack,
)
# Построение спецификации стека на основе WCS эталонного изображения
native, spec = build_stack_spec_from_fits(
[WORK_DIR / "fits" / "template.fits", WORK_DIR / "fits" / "science.fits"],
hdu=1,
grid=Grid.from_wcs(wcs_t),
output_bbox=BBox(0, 0, SHAPE[1], SHAPE[0]),
interpolation="lanczos3",
mapping_grid_step=16,
)
# Выравнивание изображений
aligned = reproject_stack(native, spec, backend="auto")После выполнения этой операции статичные звезды на обоих изображениях должны совпадать по координатам. Единственным источником, который останется несовпадающим, будет движущийся объект, так как его положение на небе изменилось относительно эталона.
Шаг 4: Согласование PSF и вычитание
Перед вычитанием необходимо убедиться, что функции рассеяния точки (PSF) на обоих изображениях совпадают. PSF описывает, как телескоп распределяет свет от точечного источника по пикселям. Если атмосферные условия или оптические характеристики изменились, PSF на научном изображении будет отличаться от эталонного. Модуль xPois решает эту задачу, находя оптимальное ядро согласования, которое преобразует PSF эталона в PSF научного изображения.
После согласования эталонное изображение вычитается из научного. Статичные звезды полностью исчезают, а движущийся объект оставляет после себя характерный «диполь» — пару пикселей с противоположными знаками (положительным и отрицательным), что указывает на движение источника между моментами съемки.
Шаг 5: Подгонка диполя и визуализация
На финальном этапе модуль xFit подгоняет двухмодельную PSF к найденному диполю, чтобы точно определить координаты движущегося объекта. Это позволяет астрономам с высокой точностью определить положение новых объектов, таких как астероиды или транзиенты.
Результаты визуализируются с помощью xScan, позволяя исследователям увидеть ядро согласования, остатки после вычитания и восстановленный диполь. Это обеспечивает прозрачность процесса и позволяет вручную проверять корректность автоматической классификации.
05Масштабирование на многопроцессорные системы
Одной из сильных сторон cuPhoton является способность масштабироваться на системы с несколькими GPU и узлами, такие как NVIDIA Grace Blackwell и NVIDIA Vera Rubin. Toolkit распределяет полные пары изображений и координаты кандидатов между GPU-воркерами, сохраняя массивы в памяти устройства. Это позволяет обрабатывать огромные наборы данных, превышающие объем памяти одного GPU, эффективно используя ресурсы кластера.
Для запуска распределенного выполнения необходимо следовать руководству по распределенному выполнению, которое доступно в репозитории cuPhoton. Это позволяет научным учреждениям интегрировать cuPhoton в свои существующие инфраструктуры и обрабатывать данные в реальном времени, обеспечивая своевременное оповещение о важных астрономических событиях.
06Что это значит на практике
Внедрение NVIDIA cuPhoton в научные конвейеры означает переход от пакетной обработки данных к интерактивному анализу в реальном времени. Для астрономов это означает возможность получать оповещения о новых объектах в течение минут после их обнаружения, а не дней или недель. Это открывает новые возможности для последующих наблюдений с другими телескопами, которые могут быстро направить свои инструменты на интересующую область неба.
Для исследователей в других областях, таких как физика высоких энергий или медицинская визуализация, cuPhoton предлагает аналогичные преимущества. Удержание данных в памяти GPU устраняет узкие места, связанные с перемещением данных, и позволяет использовать всю вычислительную мощь современных GPU для решения сложных научных задач. Открытый характер инструмента и его интеграция с популярными библиотеками Python, такими как CuPy и PyTorch, делают его доступным для широкого круга пользователей.
Таким образом, NVIDIA cuPhoton не просто является еще одним инструментом ускорения, это фундаментальный сдвиг в подходе к обработке научных данных. Он позволяет ученым сосредоточиться на открытиях, а не на борьбе с ограничениями вычислительной инфраструктуры. С развитием аппаратного обеспечения NVIDIA и расширением возможностей cuPhoton, мы можем ожидать еще более быстрого и эффективного анализа данных в научных исследованиях в ближайшие годы.
Источник: NVIDIA Developer ↗
