Когда модели учатся на аудио и видео, главное — чтобы эти потоки были синхронны. Но медиафайлы хранят время так, что даже миллисекунды рассинхронизации могут остаться незамеченными, незаметно подрывая обучение. Именно такую проблему Runway обнаружила и решила 10 июля 2026 года, выпустив высокопроизводительный декодер AVTensor.
Runway столкнулась с тем, что стандартные декодеры незаметно нарушали синхронизацию аудио и видео в обучающих данных. Это приводило к тому, что модели учились на данных, где, например, речь не совпадала с движениями губ. Проблема возникала из-за особенностей медиаконтейнеров, таких как MP4, которые хранят независимые потоки, каждый со своим таймером. Три ключевых свойства усложняют синхронизацию:
- Порядок воспроизведения не равен порядку декодирования — кадры могут храниться не по порядку, и декодер должен сначала обрабатывать будущие кадры.
- Таймстампы не равны номерам кадров — время выражается в «тиках» на основе разных временных шкал, а не простых номеров кадров.
- Потоки не обязаны начинаться с нуля или вместе — видео и аудио могут иметь разные начальные смещения. Это приводило к «молчаливому сбою»: пайплайн обучения работал, но модель училась с погрешностями. Например, в одном из реальных случаев первый видеокадр оставался неподвижным больше секунды, пока шло аудио, а остальная часть клипа была рассинхронизирована.
Чтобы решить эту проблему, Runway разработала собственную библиотеку AVTensor на Rust. Она напрямую взаимодействует с C API FFmpeg и декодирует оба потока за один проход, обеспечивая общий «нулевой» момент времени для видео- и аудио-тензоров. Rust был выбран, так как помогает избежать ошибок управления памятью и многопоточности, которые часто встречаются в C++. AVTensor также выполняет декодирование с освобождённым GIL (Global Interpreter Lock), что позволяет Python-потокам продолжать работу.
AVTensor также напрямую потоково читает данные из объектных хранилищ, таких как GCS и S3, используя запросы на чтение диапазонов байтов. Это позволило отказаться от предварительной загрузки всего файла в память, что было особенно важно при обучении на небольших фрагментах больших видео. В бенчмарке загрузки данных это сократило время обработки 100 батчей со 176 до 122 секунд (примерно на 30%). В производственных условиях AVTensor повысил MFU (Machine Learning Unit Utilization — эффективность использования GPU) на 1.8 процентных пункта по сравнению с предыдущим пайплайном на основе torchcodec. Декодер также показал ускорение до 6 раз при изменении размера видео (например, с 1080p до 256x144), поскольку масштабирование происходит внутри фильтр-графа FFmpeg.
AVTensor от Runway — яркий пример того, как незаметные проблемы в базовой инфраструктуре могут напрямую влиять на качество обучения AI-моделей и эффективность использования GPU. Решение лежит не в архитектуре моделей, а в дотошной системной инженерии, направленной на чистоту данных.