[Vorstellung] HomeServer Mini mit Ubuntu 22.04 und INTEL QSV

Nachdem ich meinen HomeServer erfolgreich auf Ubuntu umgerüstet habe, versuche ich selbiges nun zu reinen Testzwecken  an einem vorhanden Mini PC System von ASROCK.

Das ist die Hardwarekonfiguration des Mini PC Systems, aufgrund der größe und der Leistung habe ich das System einige male als „Server“ verwendet.

  • Mini PC System ASROCK DeskMini H470 (HDMI Buchse defekt 🙁 , Ausgabe über Display Port)
  • Prozessor 11th Gen Intel(R) Core(TM) i5-11500 @ 2.70GHz (6 Kerne, 12 Threads, 2.7GHz Grundtakt, bis zu 4.6GHz Turbo)
  • Arbeitsspeicher 32GByte DDR4
  • 1Stück Festplatten CRUCIAL P3 SSD NVMe PCIe 1TB
  • Grafikkarte Intel UHD Graphics 750 @ 1,30 GHz [Integrated]

 

Im Gegensatz zum „großen“ HomeServer mit eigener NVIDIA Grafikkarte habe ich hier nur eine OnBoard Grafikkarte (GPU) von INTEL, dazu auch noch ein älteres Modell aufgrund des Prozessors. Um es vorweg zu nehmen: Wiedergabe von Konvertierung / Transcodierung von Videos mittels FFMPEG funktioniert einwandfrei, natürlich mit Hardwareunterstützung, aber es dauert länger als mit der NVIDIA Grafikkarte und deren CUDA Kernen.

Beispiel einer Videotranscodierung mit NVIDIA CUDA und mit INTEL QSV Grafikkartenunterstützung:

Videodatei: demo.ts, Auflösung 1920×1080, H264, 31 Minuten 4 Sekunden Länge, Dateigröße 1.1GByte,

ffprobe -hide_banner demo.ts

Input #0, mpegts, from ‚demo.ts‘:
Duration: 00:31:03.97, start: 1.400000, bitrate: 4711 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, progressive), 1920×1080 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn
Stream #0:1[0x101](und): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 130 kb/s

 

Transcodierung

time ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i demo.ts -c:a copy -c:v h264_nvenc -f mp4 output_cuda.mp4

mit CUDA:
real 2m25,880s
user 0m17,359s
sys 0m4,810s

363 fps im Durchschnitt, Geschwindigkeit ca 12.6x, neue Dateigröße 488MByte (von ursprünglich ca. 1100MByte)

 

time ffmpeg -y -hwaccel qsv -hwaccel_output_format qsv -i demo.ts -c:a copy -c:v h264_qsv -f mp4 output_qsv.mp4

mit QSV:
real 3m36,238s
user 1m2,472s
sys 0m18,946s

245 fps im Durchschnitt, Geschwindigkeit ca 8.5x, neue Dateigröße 484MByte (von ursprünglich ca. 1100MByte)

 

Deutlicher wird der Unterschied beim Transcodieren der Datei nach HEVC:

time ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i demo.ts -c:a copy -c:v hevc_nvenc -f mp4 output_cuda.mp4

mit CUDA:
real 1m56,462s
user 0m17,362s
sys 0m4,480s

456 fps im Durchschnitt, Geschwindigkeit ca 15.9x, neue Dateigröße 492MByte (von ursprünglich ca. 1100MByte)

Ich habe keine Ahnung, warum HEVC schneller ist als x264?! Auch die Dateigröße ist zu groß (HEVC soll kleine sein als X264, bei vergleichbarer Qualität. Vielleicht stimmt auch etwas mit meiner FFMPEG Version nicht, ich bin noch auf Spurensuche …

 

time ffmpeg -y -hwaccel qsv -hwaccel_output_format qsv -i demo.ts -c:a copy -c:v hevc_qsv -f mp4 output_qsv.mp4

mit QSV:
real 7m37,499s
user 2m6,805s
sys 0m35,614s

116 fps im Durchschnitt, Geschwindigkeit ca 4x, neue Dateigröße 138MByte (von ursprünglich ca. 1100MByte)

 


Wie immer benötige ich FFMPEG, diesmal mit INTEL QuickSync (QSV) Unterstützung.

Mein Prozessor INTEL i5-11500 ist aus der 11.Gen, Produktname Rocket Lake. die OnBoard GPU läuft unter der Bezeichnung Intel® UHD Graphics 750.

zuerst benötige ich Grafikkartentreiber, dazu sind folgende Installationsschritte nötig:

wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
  sudo gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg

echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \
  sudo tee /etc/apt/sources.list.d/intel-gpu-jammy.list

echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \
  sudo tee /etc/apt/sources.list.d/intel-gpu-jammy.list

sudo apt update

sudo apt install -y \
  intel-opencl-icd intel-level-zero-gpu level-zero intel-level-zero-gpu-raytracing \
  intel-media-va-driver-non-free libmfx1 libmfxgen1 libvpl2 \
  libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
  libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 libxatracker2 mesa-va-drivers \
  mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all vainfo hwinfo clinfo libigc-dev \
  intel-igc-cm libigdfcl-dev libigfxcmrt-dev level-zero-dev


sudo gpasswd -a ${USER} render


REBOOT durchführen


Danach habe ich nach folgender Anleitung das Intel® oneAPI Toolkit installiert:

wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list

sudo apt update

sudo apt install intel-basekit

Die Aktivierung der Installation erfolgt mittels source /opt/intel/oneapi/setvars.sh

Nun benötigen wir die Intel® Video Processing Library (Intel® VPL) und die Intel® Video Processing Library (Intel® VPL) GPU Runtime

git clone https://github.com/intel/libvpl
cd libvpl
export VPL_INSTALL_DIR=`pwd`/../_vplinstall
sudo script/bootstrap
cmake -B _build -DCMAKE_INSTALL_PREFIX=$VPL_INSTALL_DIR
cmake --build _build
cmake --install _build
git clone https://github.com/intel/vpl-gpu-rt vpl-gpu-rt
cd vpl-gpu-rt
mkdir build && cd build
cmake ..
make
make install
Weitere Informationen bezüglich FFMPEG und QSV gibt es HIER direkt bei INTEL.


Als nächstes benötige ich FFmpeg, für mich das wichtigste Tool bezüglich Videos und Konvertierung. Aktuell verfügbar (Stand 06/2024) ist FFmpeg in der Version 7.0.1, in Ubuntu 22 ist als Paket Quelle die Version 4.4.2 verfügbar, ohne INTEL QSV Unterstützung. Ich benötige jedoch die aktuelle Version inkl. entsprechender (aktueller) Codecs für die Nutzung der GPU Funktionalität. Zauberwort: selbst Compilieren aus den Quellen (Build from Source), ein Glück das Google funktioniert hat....

 

Schreibe einen Kommentar