Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Описание

Начиная со сборки 5.2.2022, WCS поддерживает аппаратное ускорение при декодировании и кодировании видео с использование NVIDIA GPU.

Требования к серверу

  • Ubuntu 22.04 или новее
  • установленные драйверы NVIDIA
  • установленный графический адаптер NVIDIA

Поддерживаемые сценарии использования

  • транскодинг H264 и H265 в любом сочетании
  • микшер H264 (только кодирование)
  • HLS ABR H264
  • WebRTC ABR H264


Warning

Если поток был декодирован на CPU, то и кодироваться он будет тоже на CPU (за исключением микшера, входящие потоки которого декодируются на CPU, но выходной поток может кодироваиться на GPU) 

Неподдерживаемые сценарии использования

Транскодинг на GPU не поддерживается для:


Warning

Во всех этих случаях поток должен декодироваться и кодироваться на CPU, аппаратное ускорение должно быть отключено

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

Настройка

Для работы аппаратного ускорения на сервере должны быть установлены NVIDIA CUDA драйверы по инструкции с официального сайта. При этом CUDA toolkit устанавливать не нужно:

...

  • sample.mp4 - файл-источник видео для тестирования, должен содержать видео максимального разрешения, которое будет использоваться в эксплуатации, например, 1920x1080
  • --separate-test - провести тестирование всех GPU, установленных на сервере и доступных операционной системе; если этот ключ не указан, проводится тест одного GPU, выбранного случайным образом
  • --interval - интервал в секундах между тестами различных чипов

Для тестирования инструмент использует профили кодирования, заданные в файле /usr/local/FlashphonerWebCallServer/conf/hls_abr_profiles.yml (см HLS ABR на одном узле).

Инструмент проводит тестирование и создает файл настроек с максимальными параметрами GPU по результатам теста. Если тестируется несколько чипов, в настройках будут указаны их идентификаторы на PCI шине. Если тестируется только один чип (ключ --separate-test не указан), в настройках будет имя GPU.

...

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

Мониторинг

Текущую статистику использования GPU можно получить при помощи REST API.

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

  • HTTP: http://streaming.flashphoner.com:8081/rest-api/gpu/info
  • HTTPS: https://streaming.flashphoner.com:8444/rest-api/gpu/info

Здесь:

  • streaming.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательный префикс
  • /gpu/info - используемый REST-вызов

REST методы и статусы ответа

/gpu/info

Получить текущую статистику использования всех GPU

Request example

Code Block
languagejs
themeRDark
POST /rest-api/gpu/info HTTP/1.1
Host: localhost:8081
Content-Type: application/json

Response example

Code Block
languagejs
themeRDark
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json

{
  "cudaVersion": "12.4",
  "nvencVersion": "12.2",
  "driverVersion": "550.90.07",
  "nvmlVersion": "12.550.90.07",
  "numOfAvailableDevices": 1,
  "numOfDecodingSessions": 1,
  "numOfEncodingSessions": 5,
  "numOfHostEncodingSessions": 5,
  "deviceList": [
    {
      "name": "Tesla P100-PCIE-16GB",
      "pciBusId": "0000:02:00.0",
      "computeCapability": "6.0",
      "computeMode": 0,
      "computeModeDescription": "Default compute mode (Multiple contexts allowed per device)",
      "numOfDecodingSessions": 1,
      "numOfEncodingSessions": 5,
      "numOfHostEncodingSessions": 5,
      "fpsStats": {
        "decoderFps": 30,
        "encoderFps": 30
      },
      "nativeEncoderStats": {
        "averageFps": 29,
        "averageLatency": 1225
      },
      "utilizationState": {
        "computeUtilization": 1,
        "memUtilization": 0,
        "decoderUtilization": 5,
        "encoderUtilization": 4,
        "totalMem": "16 GB",
        "freeMem": "15.26 GB",
        "usedMem": "752.25 MB",
        "usedPciBandwidth": "984.76 KB"
      },
      "supportedEncodeCodecs": {
        "H265": {
          "minWidth": 65,
          "minHeight": 33,
          "maxWidth": 4096,
          "maxHeight": 4096
        },
        "H264": {
          "minWidth": 33,
          "minHeight": 17,
          "maxWidth": 4096,
          "maxHeight": 4096
        }
      },
      "supportedDecodeCodecs": {
        "H265": {
          "minWidth": 144,
          "minHeight": 144,
          "maxWidth": 4096,
          "maxHeight": 4096
        },
        "H264": {
          "minWidth": 48,
          "minHeight": 16,
          "maxWidth": 4096,
          "maxHeight": 4096
        }
      }
    }
  ]
}

Return codes

CodeReason
200OK
500Internal server error

Параметры

ПараметрОписаниеПример
cudaVersionВерсия CUDA12.4 
nvencVersionВерсия NVENC12.2
driverVersionВерсия драйверов NVIDIA550.90.07
nvmlVersionВерсия NVIDIA management library12.550.90.07
numOfAvailableDevicesКоличество доступных GPU1
numOfDecodingSessionsКоличество декодеров1
numOfEncodingSessionsКоличество кодировщиков5
numOfHostEncodingSessionsКоличество кодировщиков на сервер5
nameИмя GPUTesla P100-PCIE-16GB
pciBusIdИдентификатор GPU  на PCI шине0000:02:00.0
computeCapabilityИдентификатор возможностей GPU6.0
computeModeРежим вычислений GPU0
computeModeDescriptionОписание режима вычисленийDefault compute mode (Multiple contexts allowed per device)
decoderFpsFPS декодирования30
encoderFpsFPS кодирования30
averageFpsСредний FPS по данным GPU29
averageLatencyСредняя задержка по данным GPU в микросекундах1225
computeUtilizationПроцент использования GPU1
memUtilizationПроцент использования памяти0
decoderUtilizationПроцент загрузки декодирования5
encoderUtilizationПроцент загрузки кодирования4
totalMemОбщее количество памяти16 GB
freeMemКоличество свободной памяти15.26 GB
usedMemКоличество используемой памяти752.25 MB
usedPciBandwidthИспользование пропускной способности шины PCI984.76 KB
minWidthМинимальная ширина картинки для декодирования/кодирования33
minHeightМинимальная высота картинки для декодирования/кодирования17
maxWidthМаксимальная ширина картинки для декодирования/кодирования4096
maxHeightМаксимальная высота картинки для декодирования/кодирования4096