Server decoding on video cards🔗

If a software motion detector and/or server-based video analytics modules are used to process video streams received from cameras, video stream decoding on video cards (GPUs) can be enabled on the server. That makes it possible to:

  • Reduce the load on the central processing units (CPUs).

  • Process more cameras on the same server.

  • Use less efficient CPUs.

Requirements and recommendations
  • Only video cards from the list on the NVIDIA website are supported.

  • H.264, H.265 and MJPEG codecs are supported.

    Note

    Decoding video encoded with MJPEG on the GPU does not provide an advantage over decoding that video on the CPU.

    Detailed information on video resolution limitations and supported codec profiles is on the NVIDIA website.

Enabling and customizing

To enable and configure server decoding on the video card:

  1. Start Eocortex Configurator application.

  2. Switch to the Servers page.

  3. Select the server in the list and on the Information tab, click Configure (or select Configure from the context menu).

../../_images/servers.png
  1. In the window that opens, switch to the Other tab.

../../_images/server-config-other.png
  1. Enable the Use decoding on GPU option.

  2. If multiple graphics cards are installed on the server, select the graphics cards to be used for decoding from the list.

  3. Click the Apply server settings to save the changes.

Features of setup and use

After the initial server installation or after upgrading from version 4.0 and below, the Use decoding on GPU option is disabled by default.After upgrading the server from version 4.1 and above, the state of the Use decoding on GPU option is retained.

Video card list:

  • The list displays all NVIDIA video cards found on the system, even if the video cards do not support decoding.

  • The video cards in the list are sorted in descending order of performance. Thus, the first video card in the list (number [0]) will be the one with the highest performance. However, the order of graphics cards in the Eocortex list may not match the order of graphics cards in the NVIDIA System Management Interface utility (nvidia-smi) because the utility sorts graphics cards by bus ID. Also, on Windows, the order of graphics cards in the Eocortex list may not match the order of graphics cards in Task Manager because the latter uses DirectX numbering.

  • The Eocortex server identifies graphics cards by their unique serial numbers (UUID). Therefore, if you replace a previously selected graphics card with a similar one, the new graphics card will not be automatically selected for decoding.

  • For GRID video cards, changing the profile or number of virtual GPUs will also change the UUID.

  • If the Use decoding on GPU option is enabled, and the Eocortex server does not detect any selected for decoding graphics cards - the highest performing (first in the list) graphics card will be automatically selected. Also, the first video card will be selected when the Eocortex server is upgraded from version 4.1 if decoding was enabled before the upgrade.

Load balancing:

  • When the server starts, all cameras are decoded on the CPU. Decoding on GPU will begin only after 30-40 seconds of server operation. The balancing is performed automatically every 10 seconds.

  • Load balancing assumes maintaining the optimal average load of the GPU decoding unit between 75% and 85% and video memory utilization up to 80-90%. Thus, if the load on the GPU decoding block does not exceed 75%, a part of the cameras would transferred to the GPU. If the load on the GPU decoding unit exceeds 85%, then a part of the cameras would transferred to the CPU.

  • Cameras that are disabled in the configurator are not taken into account in load balancing.

  • If multiple streams are received from a camera, all streams are transferred during load balancing.

  • To more optimally distribute the load between GPUs, the principle of reducing the number of cameras distributed per balancing cycle is used. That is, the more graphics cards are used for decoding, the smaller portions of cameras will be transferred to them, and as a result, the load between graphics cards will be distributed more accurately.

Possible problems and their elimination
  1. GPU load is too high.

    Eocortex Client and Eocortex Status Info will display a warning when the total GPU load exceeds 85%. If the load becomes less than the threshold, the warning will disappear.

    Reduce the GPU load by one or more of the following methods:

    • Disable the Use decoding on GPU option in the server settings.

    • Change video analytics settings, including disabling some or all video analytics modules.

    • Install additional GPUs.

    • Move some cameras to another server.

  2. No suitable and/or previously selected video cards were found on the server.

    Error options:

    • Suitable GPUs were not found on the server

    • The following previously selected GPUs were not found on the server: list of GPUs

    The possible cause is that there are no NVIDIA video cards in the system, or they are malfunctioning.

    If server settings are applied in this situation, either the previously selected and newly found graphics cards or the first graphics card in the list will be selected after the problem is fixed.

Related references