Считаем не производительность, а счет за месяц
Задача звучала как «прогнать архив через модели». Первый же расчет показал, где будет больно: 4,8 петабайта нужно прочитать, декодировать и обработать, и на этом пути видеокарты — самая заметная, но далеко не самая дорогая часть.
Реальные статьи расходов такого проекта: чтение данных из хранилища, декодирование видео, передача между узлами и хранение промежуточных результатов. Инженер, оптимизирующий только модель, снижает пятую часть счета и удивляется, почему итог не изменился.
Дорогая модель не должна видеть весь архив
Ключевое решение — каскад. Поток проходит через ступени, каждая следующая дороже предыдущей и получает заметно меньше материала.
- Отбор по метаданным. Часть архива отсекается до чтения: длительность, источник, дата, уже посчитанные ранее признаки.
- Разреженный просмотр. Читаются только опорные кадры. Для поиска сцен и грубой классификации этого достаточно.
- Дешевый фильтр. Легкая модель отбрасывает заведомо неинтересное — статичные планы, черные кадры, дубли.
- Тяжелая модель. Работает по фрагментам, прошедшим предыдущие ступени.
До последней ступени доходят доли процента исходного объема. Именно это дало основную часть экономии; ускорение инференса тут вторично.
Декодирование — скрытый пожиратель
Полное декодирование видео стоит дорого и почти всегда избыточно. Мы читаем опорные кадры без полного разбора потока, а полное декодирование включается только для отобранных фрагментов.
Второй прием — держать данные и вычисления рядом. Перекачивание петабайтов между зонами хранилища и вычислительными узлами стоит реальных денег и времени; задачи планируются туда, где лежат данные.
Прерываемые машины требуют дисциплины
Основной парк для такой работы — дешевые прерываемые вычислительные мощности, которые могут отобрать в любой момент. Экономия существенная, плата за нее — требования к коду.
- Задача обрабатывает независимый фрагмент и может быть перезапущена в любой момент.
- Результат записывается атомарно: недописанный кусок не считается готовым.
- Повторная обработка того же фрагмента дает тот же результат и не портит уже посчитанное.
- Прогресс фиксируется мелкой гранулярностью, чтобы потеря машины стоила минут, а не часов.
Без этих четырех правил прерываемые мощности превращаются в бесконечный перезапуск, который съедает всю экономию.
Учет сделанного важнее скорости
На объеме в тысячи часов видео главный вопрос эксплуатации звучит скучно: что уже посчитано и чем именно. Версия модели меняется, часть архива обработана старой, часть новой, отдельные фрагменты переобрабатывались после сбоя.
Поэтому в конвейере ведется реестр: фрагмент, версия обработки, результат, время. Он позволяет ответить на вопросы «что нужно пересчитать после обновления модели» и «почему по этому файлу нет результата» без археологии по логам. Он же дает возможность обновлять модель постепенно, не останавливая конвейер.
Одиннадцатикратный рост — из чего сложился
Обработка одиннадцати часов видео в сутки на прежнюю единицу мощности собрана из трех источников: сокращение объема, доходящего до тяжелых ступеней; отказ от полного декодирования; и плотная утилизация мощностей за счет того, что задачи мелкие и очередь всегда полна.
Ни один из источников не связан с ускорением самой нейросети. Это типично для больших конвейеров: выигрыш живет в организации потока.
Что заказчик получил кроме результатов
Помимо разметки архива — работающий конвейер и цифру стоимости обработки часа видео. Последнее оказалось важнее всего: имея цену часа, продуктовая команда сама решает, какие коллекции прогонять через дорогие ступени, а какие — оставить на дешевых. До проекта такой разговор был невозможен, потому что стоимость обработки не измерялась вообще и растворялась в общем счете за инфраструктуру.
Хранение промежуточного — отдельная статья
Каждая ступень каскада порождает свои артефакты: вырезанные фрагменты, признаки, эскизы кадров. На петабайтном архиве они складываются в объем, сопоставимый с исходником, и незаметно удваивают счет за хранение.
Правило простое: у каждого промежуточного результата есть срок жизни и владелец. Все, что дешевле пересчитать, чем хранить, не хранится вообще — и это решение принимается арифметикой: стоимость гигабайто-месяца против стоимости пересчета. Для дешевых ступеней пересчет почти всегда выигрывает.
Где такая схема не подходит
- Задачи реального времени: каскад с фильтрами оптимизирован под пакетную обработку архива.
- Материал, где важен каждый кадр — например, покадровый контроль качества. Разреженный просмотр там неприменим.
- Архивы с жесткими требованиями к локации данных, если дешевые мощности доступны только в другом контуре.
Направления рядом — эксплуатация ML в продакшне, видеоаналитика и высоконагруженные модели.