Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC и Intel Xeоn
  • Серверы с AMD Ryzen и Intel Core i9
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • GPU
  • Распродажа
  • VPS
    GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • Распродажа
    Маркетплейс
    Colocation
  • Размещение серверов в дата-центре в Москве
  • Обслуживание серверов в других ЦОД
  • Кластеры
    Прокат
    Услуги
  • Аренда сетевого оборудования
  • Защита L3-L4 от DDoS атак
  • IPV4 и IPV6 адреса
  • Администрирование серверов
  • Уровни технической поддержки
  • Мониторинг сервера
  • BYOIP
  • USB диск
  • IP-KVM
  • Трафик
  • Коммутация серверов
  • AI-чат-бот Lite
  • О нас
  • Работа в HOSTKEY
  • Панель управления серверами и API
  • Дата-центры
  • Сеть
  • Тест скорости
  • Специальные предложения
  • Отдел продаж
  • Для реселлеров
  • Гранты для специалистов по Data Science
  • Гранты для научных проектов и стартапов
  • Документация и Частые вопросы
  • Новости
  • Блог
  • Оплата
  • Документы
  • Сообщите о нарушении
  • Looking Glass
  • 06.02.2022

    Тестируем многопоточную раздачу видео на игровых GPU

    server one
    HOSTKEY



    При работе с потоковым видео качество и скорость воспроизведения играют ключевую роль. Можно ли настроить многопоточную трансляцию без покупки дорогостоящего «железа»? Попробуем разобраться.

    Проблема.

    Качественная трансляция видео обычно предполагает серьезные издержки: нужно выделить помещение и создать в нем инженерную инфраструктуру, закупить оборудование и нанять сотрудников для его обслуживания, арендовать каналы передачи данных и провести другие необходимые мероприятия. В зависимости от масштаба проекта только капитальные вложения могут потребовать значительных бюджетов.

    Какова альтернатива?

    Существенно снизить капитальные затраты и перевести их в операционные можно за счет аренды облачных серверов с GPU, причем стоит сделать ставку на аппаратное транскодирование на Nvidia NVENC Nvidia NVENC. Кроме сокращения расходов, вы упростите организацию трансляции живых потоков.

    А вот для организации вещания стоит попробовать FFmpeg.

    Мы используем этот бесплатный набор библиотек с открытым кодом для автоматизированного тестирования видеокарт. Внедрить и обслуживать решения на его основе довольно просто, к тому же они отличаются высокой скоростью кодирования и декодирования потоков. Повышение скорости достигается за счет отказа от копирования кодированных файлов в системную память: процесс кодирования осуществляется с использованием памяти графического чипа.

    Схема процесса транскодинга с применением FFmpeg:

    scheme-1
    Арендуйте готовые GPU сервер с моментальным деплоем или сервер индивидуальной конфигурации с профессиональными картами NVIDIA RTX 4000 / 5000 / A6000. Эти решения идеальны для удаленного доступа к высоконагруженным приложениям из любой точки мира.

    Патч для драйвера и сборка FFmpeg

    Проводить тестирование мы будем в Ubuntu Linux, причем начнем с игровых графических ускорителей: GeForce GTX 1080 Ti и GeForce RTX 3090. В реальных проектах они не используются, но продемонстрировать разницу между транскодированием на CPU и GPU вполне способны. Производитель не считает эти адаптеры «квалифицированными» и ограничивает максимальное количество одновременных сеансов транскодирования видео NVENC. Чтобы решить эту проблему, придется применить хитрость и отключить проверку с помощью выложенного энтузиастами на GitHub патча для видеодрайвера.

    Патч не потребуется для профессиональных видеокарт, например, таких как RTX A4000 или A5000, поскольку для них в драйвере нет жесткого ограничения количества потоков. Список видеокарт Nvidia с поддержкой NVENC доступен на сайте производителя. Технологию можно использовать в виде набора разработчика NVENC SDK.

    Также необходимо собрать FFmpeg с поддержкой GPU Nvidia. Пока мы не выложили его в репозиторий, поэтому приведем подробную инструкцию для Ubuntu (в других дистрибутивах Linux порядок действий сходный):

    # Compiling for Linux
    # FFmpeg with NVIDIA GPU acceleration is supported on all Linux platforms.
    # To compile FFmpeg on Linux, do the following:
    # Clone ffnvcodec
    git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
    # Install ffnvcodec
    cd nv-codec-headers && sudo make install && cd –
    # Clone FFmpeg's public GIT repository.
    git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
    # Install necessary packages.
    sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev
    # Configure
    ./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared
    # Compile
    make -j 8
    # Install the libraries.
    sudo make install

    Настройка трансляции

    Для трансляции потокового видео c использованием FFmpeg нам понадобится ffserver. Отредактируем файл ffserver.conf (стандартный путь к нему — /etc/ffserver.conf).

    Пример конфигурации ffserver для потокового вещания:

    # Указываем порт, на котором будет работать сервер.
    HTTPPort 8090
    # Адрес, на котором будет работать сервер (0.0.0.0 — все доступные адреса).
    HTTPBindAddress 0.0.0.0
    # Максимальная пропускная способность на одного клиента в кб/с (до 100000).
    MaxClients 1000
    RTSPPort 5454
    RTSPBindAddress 0.0.0.0
    <Stream name>
    Format rtp
    File /root/file.name.mp4
    ACL allow 0.0.0.0
    #VideoCodec libx264
    #VideoSize 1920X1080
    </Stream>

    Пример команды для запуска потокового вещания

    ffserver ffmpeg bbb_sunflower_1080p_30fps_normal.mp4 http://ip/feed.ffm

    Пример декодирования потокового видео с использованием GPU и декодера NVENC (подключение к трансляции потокового видео и сохранение его на устройство):


    ffmpeg -i rtsp://ip:5454/nier -c:v h264_nvenc Output-File.mp4

    Пример вывода nvidia-smi подтверждает, что FFmpeg использует GPU: 0 N/A N/A 27564 C ffmpeg 152MiB.

    Тестирование

    Сравнительное тестирование транскодинга живых потоков FullHD 1080p в high profile H.264 мы провели на потребительских видеокартах, не проходивших специальной подготовки. Работа GeForce RTX 3090 была проверена без снятия ограничений на количество потоков, а также с пропатченным драйвером (для GTX 1080 Ti тест без патча показался нам избыточным). В качестве исходного видео выбрали один из демофайлов Blender — bbb_sunflower_1080p_30fps_normal.mp4

    Для тестирования сигнала использовался входной поток со следующими параметрами:

    Компрессия видео ОH.264
    Размер кадра 1920 x 1080 пикселей
    Частота кадров 30 кадров/сек
    Битрейт видео 2,996 Мбит/сек
    Компрессия аудио AAC
    Частота аудиосигнала 48 кГц
    Количество аудиоканалов Стерео
    Битрейт аудио 479 кбит/сек
    Компрессия видео H.264
    Размер кадра 1920 x 1080 пикселей
    Частота кадров 30 кадров/сек
    Битрейт видео 2,996 Мбит/сек
    Компрессия аудио AAC
    Частота аудиосигнала 48 кГц
    Количество аудиоканалов Стерео
    Битрейт аудио 479 кбит/сек



    Разрешение FullHD 1080p считается одним из самых распространенных для потокового вещания видео в режиме реального времени и позволяет обеспечить интенсивную вычислительную нагрузку при тестировании.

    Описание тестовой среды:

    Тест на CPU GeForce GTX 1080 Ti GeForce RTX 3090
    CPU 4 x VPS Core 4 x VPS Core 1 x Xeon E3-1230v6 3.5GHz (4 cores)
    RAM 1 x VPS RAM 16Gb 1 x VPS RAM 16Gb 2 x 16 Gb DDR4
    HDD 1 x VPS HDD 240 Gb 1 x VPS HDD 240 Gb 1 x 512Gb SSD
    1 x 120Gb SSD
    Other hardware 1 x VGPU 1080Ti 1 x VGPU 1080Ti 1 x RTX 3090
    Тест на CPU
    CPU 4 x VPS Core
    RAM 1 x VPS RAM 16Gb
    HDD 1 x VPS HDD 240 Gb
    Other hardware 1 x VGPU 1080Ti
    GeForce GTX 1080Ti
    CPU 4 x VPS Core
    RAM 1 x VPS RAM 16Gb
    HDD 1 x VPS HDD 240 Gb
    Other hardware 1 x VGPU 1080Ti
    GeForce RTX 3090
    CPU 1 x Xeon E3-1230v6 3.5GHz (4 cores)
    RAM 2 x 16 Gb DDR4
    HDD 1 x 512Gb SSD
    1 x 120Gb SSD
    Other hardware 1 x RTX 3090



    При тестировании мы получили следующую нагрузку:


    Fan Temp Perf Pwr:Usage/Cap Memory-Usage
    GeForce GTX 1080 Ti 59% 82C P2 86W / 250W 5493MiB/11178MiB
    GeForce RTX 3090 43% 51C P2 149W / 350W 22806MiB /24267MiB
    GeForce GTX 1080Ti
    Fan 59%
    Temp 82C
    Perf P2
    Pwr:Usage/Cap 86W / 250W
    Memory-Usage 5493MiB/11178MiB
    GeForce RTX 3090
    Fan 43%
    Temp 51C
    Perf P2
    Pwr:Usage/Cap 149W / 350W
    Memory-Usage 22806MiB /24267MiB

    Тест на CPU без использования GPU прошел успешно, но максимально загрузил сервер: были задействованы все вычислительные ядра и вся доступная память, а на выходе мы получили лишь несколько потоков. Высокая нагрузка на процессор не позволяет эффективно использовать такой способ для организации реальной трансляции из-за риска возникновения критических ошибок и сбоев. CPU не годится для проведения большого количества параллельных операций.

    При проведении тестирования GPU на вход декодера подавался один поток, а на выходе транскодированные потоки раздавались через протокол rstp. Отметим, что GeForce RTX 3090 без патча драйвера осилила только три потока. При попытке обработать больше мы получили ошибки:

    [h264_nvenc @ 0x55ddbdd3ef80] OpenEncodeSessionEx failed: out of memory (10): (no details)
    [h264_nvenc @ 0x55ddbdd3ef80] No capable devices found
    Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

    Количество потоков после применения патча к видеодрайверу и объем используемой памяти представлены на диаграмме:

    video card testing

    Лимит количества обрабатываемой каждой картой потоков ограничен как объемом памяти GPU, так и оперативной памятью. Модификации GeForce RTX 3090 отличаются по объему видеопамяти, но обрабатывают одинаковое количество потоков, что определяется тестовой сборкой — 32 Гб оперативной памяти. Ниже приведен пример вывода данных об оперативной памяти тестового стенда с видеокартой GeForce RTX 3090 при проведении тестирования:

      Total Used Free Shared Buff Cache available
    Mem 31 G 11 G 234 M 1,3 G 19 G 18 G
    Swap 4,0 G 1,0 M 4,0 G
    Mem
    Total 31 G
    Used 11 G
    Free 234 M
    Shared 1,3 G
    Buff 5493MiB/11178MiB
    Cache available 18 G
    Swap
    Total 31 G
    Used 11 G
    Free 234 M
    Shared
    Buff
    Cache available

    Заключение

    Тестирование на потребительских видеоадаптерах требует грубого вмешательства в системное ПО, но даже оно показывает, что серверы с GPU позволяют организовать транскодирование живых потоков под большими нагрузками.

    То есть FFmpeg вполне можно выбрать для качественной трансляции без покупки коммерческого программного обеспечения и дорогостоящих рабочих станций. Например, как бюджетный вариант для задач видеонаблюдения и сохранения потоков с нескольких десятков камер в файлы: здесь можно взять машину с одной GTX 1080 Ti и писать с нее потоки на NAS самостоятельно.

    Решение также обеспечивает масштабирование трансляции, так как не требует значительных затрат времени и вычислительных мощностей для изменения количества потоков.

    Разумеется, вне вашего офиса/площадки или на территории ЦОДа из-за лицензионных правил NVidia использовать игровые карты не получится, да и незачем: для этого есть профессиональные линейки. Об экспериментах с ними расскажем в следующей части статьи.

    Готовый GPU сервер с моментальным деплоем или сервер индивидуальной конфигурации с профессиональными картами NVIDIA RTX 4000 / 5000 / A6000. Эти решения идеальны для удаленного доступа к высоконагруженным приложениям из любой точки мира.

    Другие статьи

    16.12.2024

    Как посмотреть запущенные контейнеры в Docker?

    Хотите узнать, какие контейнеры запущены в вашем Docker? В этой статье мы расскажем о простых командах, которые помогут это сделать.

    28.11.2024

    OpenWebUI обновился. Что нового привнесла версия 0.4.5?

    OpenWebUI обновился до версии 0.4.5! Новые функции для RAG, групп пользователей, аутентификации, улучшенная производительность и многое другое. Узнайте, как обновиться и использовать его возможности на максимум.

    18.11.2024

    Настройка Nginx на сервере

    Как правильно установить и настроить Nginx на сервере для повышения производительности вашего сайта. Пошаговая инструкция поможет вам настроить Nginx быстро и без ошибок.

    18.11.2024

    Рейтинг быстрых VPS и VDS-серверов

    Топ-10 самых быстрых VPS и VDS-серверов: узнайте, какие серверы обеспечат максимальную производительность и скорость для ваших проектов.

    25.10.2024

    TS3 Manager: что происходит, когда додумываешь документацию

    Есть проблемы с подключением к TS3 Manager после установки на VPS? Управление сервером TeamSpeak через TS3 Manager не такое уж и простое, как кажется. Давайте решим проблемы вместе!

    HOSTKEY Выделенные серверы в Европе, России и США Готовые решения и индивидуальные конфигурации серверов на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS-атак и безлимитный соединением на скорости 1 Гбит/с 30
    4.3 48 48
    Upload