Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC и Intel Xeоn
  • Серверы с AMD Ryzen и Intel Core i9
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • GPU
  • Распродажа
  • VPS
    GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • Распродажа
    Маркетплейс
    Colocation
  • Размещение серверов в дата-центре в Москве
  • Размещение серверов в дата-центре в Амстердаме
  • Обслуживание серверов в других ЦОД
  • Кластеры
    Прокат
    Услуги
  • Аренда сетевого оборудования
  • Защита от DDoS атак
  • IPV4 и IPV6 адреса
  • Администрирование серверов
  • Уровни технической поддержки
  • Мониторинг сервера
  • BYOIP
  • USB диск
  • IP-KVM
  • Трафик
  • Коммутация серверов
  • Поставки оборудования за рубежом
  • О нас
  • Работа в 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. Эти решения идеальны для удаленного доступа к высоконагруженным приложениям из любой точки мира.

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

    17.04.2024

    Как выбрать правильный сервер c подходящими для ваших нейросетей CPU/GPU

    Рассказываем о наиболее важных компонентах, которые влияют на выбор сервера для искусственного интеллекта

    05.04.2024

    VPS, хостинг сайтов или конструктор? Где разместить сайт бизнесу?

    Давайте сравним размещение сайта на VPS, хостингах сайтов (общих хостингах) и в популярных конструкторах сайтов.

    21.03.2024

    Есть ли жизнь после Microsoft Teams и OneDrive?

    Ищем альтернативу облачным сервисам Microsoft. Чем заменить Microsoft Teams, OneDrive, Excel, Microsoft 365 и Azure

    07.03.2024

    Как AI помогает побороть монополию в спортивной рекламе и при чем тут GPU и выделенные серверы

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

    14.02.2024

    От xWiki к static-HTML. Как мы документацию «переезжали»

    Выбор платформы для создания портала с внешней и внутренней документацией. Перенос документов с cWiki на Material for MkDocs

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