LINUX.ORG.RU

ffmpeg cuvid

 


0

1

Есть машина с 4 Titan X.
Пытаюсь кодировать видео на всех картах сразу (нужно пережать в меньшее разрешение).

ffmpeg -v info -y -hwaccel cuvid -hwaccel_device 2 -c:v:0 h264_cuvid -i /root/1.mkv -c:v:0 h264_nvenc -b:v:0 650000 -filter:v:0 scale_npp=-2:360 -f mp4 /dev/null


На каждую карту запускаем по два подобных процесса.

На двух картах картина вроде внятная:

nvidia-smi dmon -c 1
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0   102    48     -    20     9    14   100  3304  1189
    1   105    54     -    25     9    17    99  3304  1201
    2    15    27     -     0     0     0     0   405   135
    3    15    27     -     0     0     0     0   405   135

Упираемся в декодер и в общем-то все логично (пережимаем большое видео в маленькое и декодер напрягается больше энкодера).

Но если запустить процессы на 4х картах, то производительность проседат

nvidia-smi dmon
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0    89    45     -     8     3     5    37  3304  1189
    1    92    50     -     9     3     6    30  3304  1201
    2    76    42     -     9     3     6    29  3304  1201
    3    87    44     -     9     3     6    33  3304  1189

Причем суммарная производительность ниже, чем на двух картах.
Два CPU по 12 ядер, SSD диски. В atop ничего не показывает даже близко упирающегося в лимиты.

В чем может быть проблес?



Последнее исправление: Hett (всего исправлений: 1)

С двумя картами вообще проблем нет, но стоит на третьей запустить хотя бы один поток, как все сразу проседает

nvidia-smi dmon -c 1
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0    98    48     -    32     6    26    53  3304  1189
    1    95    52     -    17     4    15    39  3304  1201
    2    71    39     -     4     1     5    18  3304  1126
    3    15    27     -     0     0     0     0   405   135

Hett
() автор топика

Если использовать 2 прохода, второй должен нормально распараллелиться.
Но, это не точно.

anonymous
()
Ответ на: комментарий от annulen

Была такая мысль, но вроде не такой большой поток данных:

nvidia-smi dmon -s pucvmet -c 1
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk pviol tviol    fb  bar1 sbecc dbecc   pci rxpci txpci
# Idx     W     C     C     %     %     %     %   MHz   MHz     %  bool    MB    MB  errs  errs  errs  MB/s  MB/s
    0    97    47     -    14     8     8   100  3304  1189     0     0   669     2     -     -     0    39    11
    1   103    52     -    14     8     9   100  3304  1201     0     0   669     2     -     -     0    34    12
    2    89    47     -     7     5     7    68  3304  1316     0     0   222     2     -     -     0    22    10
    3    88    42     -     7     4     8    75  3304  1189     0     0   222     2     -     -     0    17     3


PS^ тут еще хорошая картина, но такое редкость.

Hett
() автор топика
Ответ на: комментарий от Hett

Вот тут видно что и шина вроде не нагружена и скорость низкая при этом

 nvidia-smi dmon -s put -c 1
# gpu   pwr gtemp mtemp    sm   mem   enc   dec rxpci txpci
# Idx     W     C     C     %     %     %     %  MB/s  MB/s
    0    89    44     -    10     3     8    30    12     7
    1    80    45     -     8     2     8    23    21     4
    2    92    46     -    10     5     7    57    31     8
    3    89    45     -    10     4     7    46    34     9

Hett
() автор топика

А если использовать софтовое кодирование, что-то изменяется? Или наоборот, софтовое декодирование (хотя тут уже может в проц упереться)

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

Даже декодирование в проц упирается, в карте декодер быстрее, чем на цпу. Поэтому заюзать все декодеры карт предпочтительнее.

Ну про энкодинг и говорить не стоит :)

Hett
() автор топика
Ответ на: комментарий от Hett

А если сделать размер кадра на выходе меньше? Насколько я понимаю, сложность кодирования примерно пропорциональна площади кадра

annulen ★★★★★
()
Ответ на: комментарий от annulen

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

annulen ★★★★★
()

В порядке бреда: а что если попробовать с irqbalance запустить?

annulen ★★★★★
()
Ответ на: комментарий от annulen

Не совсем понял. Можно пример?

Hett
() автор топика

Titan X

вот интересно, кодинг видео так ли зависит от крутости видяхи... что-то мне подсказывает...

mos ★★☆☆☆
()
Ответ на: комментарий от mos

вот интересно, кодинг видео так ли зависит от крутости видяхи

У старишх моделей тупо больше вычислительных ядер

annulen ★★★★★
()

Я бы еще попробовал без hwaccel и scale_npp запустить, то что в вики называется «Partial hardware transcode, with frames passed through system memory». Если в таком режиме не воспроизведется, можно локализовать проблему, да и общая пропускная способность может оказаться лучше, чем с двумя картами

annulen ★★★★★
()
Ответ на: комментарий от annulen

по крайней мере на бумаге их дрова+ваапи выглядят наиболее многообещающе + штеуд когда ему надо вкладывается в инструменты. купили же целого бабаяна для конпиляторов))

mos ★★☆☆☆
()

Что-то не так с человеком с четырьмя титанами, который приходит за саппортом в linux.org.ru. Попробуйте другую версию драйверов новее\старее, обратитесь за саппортом к nvidia

hizel ★★★★★
()
Ответ на: комментарий от mos

по крайней мере на бумаге их дрова+ваапи выглядят наиболее многообещающе

Пока они не выкинут свой Media SDK (или он не станет тупо оберткой над VAAPI на онтопике), не выглядит

annulen ★★★★★
()
Ответ на: комментарий от mos

Не зависит. Но в общем-то что дали.
Сравнивал декодер с 970, 1080Ti и 2080, «на глаз» примерно одинаково. Разве что новые карты поддерживают больше опций и самих кодеков (первая в списке, например, не может HEVC)

Hett
() автор топика
Ответ на: комментарий от annulen

Пробовал без hwaccel, CPU грузит в потолок, а производительность не особо выше (но держутся на 50% декодеры).

Hett
() автор топика
Ответ на: комментарий от Hett

не, это я всё знаю.
базовый декодинг какого-нибудь h264 работает и на офисной карте (причем офисной уже много лет назад, сейчас такую только на помойке можно найти).

я о «промышленном» использовании... много потоков там и всё такое. Титан выглядит очень уж оверкилом даже для этого.

ну раз что дали то понятно.

mos ★★☆☆☆
()
Ответ на: комментарий от mos

Просто дали поюзать из того, что было собрано.

Hett
() автор топика
Ответ на: комментарий от annulen

Пробовал, без разницы. Стабильно под 100% работают любые две карты. Запуск на третьей дает просадку.

Hett
() автор топика
Ответ на: комментарий от annulen

Запустил без hwaccel (ну и фильтр соответственно scale, который на cpu работает).
Картина такая:

nvidia-smi dmon -c 1
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0    89    43     -    30     5    15    79  3304  1189
    1    93    48     -    28     5    21    78  3304  1201
    2    87    44     -    58     5    15    89  3304  1316
    3    87    44     -    54     5    19    78  3304  1189

Процессоры нагрузило по полной (два E5-2620 v3)
То есть получается, поток декодится на карте, потом передается на CPU для скейлинга, возвращается на карту, энкодится. И этот подход работает быстрее.
В общем странно, возможно проблема действительно где-то в scale_npp (фильтр работающий на карте). Без фильтра я попробовать не могу, да и смысла в этом не вижу, нужен он.

Hett
() автор топика
Ответ на: комментарий от Hett

Похоже на софтовую проблему, либо бага у ffmpeg (последняя версия?) либо где-то у нвидии. Было бы неплохо написать в рассылку ffmpeg и описать проблему с вышеперечисленными наблюдениями

А если со scale_npp пережать маленькое видео в очень маленькое, баг воспроизводится?

annulen ★★★★★
()
Ответ на: комментарий от annulen

Сегодня добавили сервер в заббикс (это тестовый стенд и он не мониторился раньше) и увидили вот такую картину.
http://joxi.ru/L21V68YT8b3dzA

Явно всё упирается в процессор. До того как все «уперлось» работала одна карта. Потом в 11:45 примерно включили вторую.

Собстна с одной CPU расходовался больше, чем с двумя.
Вот что было с 1 картой:

nvidia-smi topo --matrix
        GPU0    CPU Affinity
GPU0     X      1-1,3-3,5-5,7-7,9-9,11-11,13-13,15-15,17-17,19-19,21-21,23-23,25-25,27-27,29-29,31-31


Вот так стало когда добавили вторую:


nvidia-smi topo --matrix
        GPU0    GPU1    CPU Affinity
GPU0     X      SYS     0-7,16-23
GPU1    SYS      X      8-15,24-31

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe switches (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing a single PCIe switch
  NV#  = Connection traversing a bonded set of # NVLinks


Идеи?

Hett
() автор топика
Ответ на: комментарий от Hett

Так nvidia-smi topo --matrix показывает GPUDirect communication, а у тебя разные задачи на разных GPU (вроде бы)

annulen ★★★★★
()
Ответ на: комментарий от Hett

Мб стоит CPU affinity для ffmpeg'а назначить такую же, как у карты на которой он работает

annulen ★★★★★
()
Ответ на: комментарий от Hett

Теперь как-то так:

nvidia-smi dmon -c 1
# gpu   pwr gtemp mtemp    sm   mem   enc   dec  mclk  pclk
# Idx     W     C     C     %     %     %     %   MHz   MHz
    0   101    50     -    27     8    15   100  3304  1189
    1   105    54     -    25     8    12   100  3304  1201
    2   104    52     -    48    10    19   100  3304  1316
    3    97    50     -    23     9     8   100  3304  1189

Hett
() автор топика
Ответ на: комментарий от Hett

Кто-нибудь может объяснить, почему не работало без `hwdownload,format=nv12` и нормально работает с ним?
Я что-то до конца не вкуриваю смысла всего. Вроде у нас декодер и так на стороне GPU и энкодер на стороне GPU, и фильтр применяется на стороне GPU (scale_npp). И судя по документации флаг hwaccel - предполагает полный хардварный транскодинг.

Hett
() автор топика
Ответ на: комментарий от Hett

Либо просто я усложнил цепочку событий, но это как-то помогло с каким-то багом и стало лучше?

Hett
() автор топика
Ответ на: комментарий от Hett

Ну пайплайн наверное криво составляется или баг в дровах всплывает. Репорти в ффмпег, у них наверное четырёх титанов нет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.