Zweiter Versuch

Beim letzten Versuch ist es an den fehlenden cuDNN Paketen von Nvidia gescheitert. Nach etwas Unterbrechung habe ich mir die Doku, hier in der von mir installierten pip Version. Dort ist mir der Hinweis aufgefallen, dass man mit der folgenden Anleitung das installiert bekommt:

GPU execution requires the NVIDIA libraries cuBLAS 11.x and cuDNN 8.x to be installed on the system. Please refer to the [CTranslate2 documentation](https://opennmt.net/CTranslate2/installation.html).

Zurückrollen

Das Zurückkehren zu einem früheren Zustand geht recht einfach:

Ich habe noch einmal einen Versuch gestartet. Dieses Mal mit Hilfe dieser Anleitung auf Github. Es haben nämlich noch ein paar Einstellungen auf dem Proxmox Host gefehlt, damit alles nach einem Neustart weiterhin funktioniert (insbesondere das Blacklisting und die udev Regeln, siehe Anleitung). Dann ich habe noch einmal meine Container Konfig überprüft und sie auch der Anleitung angepasst.

Mit ls -l /dev/nv* Daten auslesen:

crw-rw-rw- 1 root root 195,   0 Apr  5 18:41 /dev/nvidia0
crw-rw-rw- 1 root root 195,   1 Apr  5 18:41 /dev/nvidia1
crw-rw-rw- 1 root root 195, 255 Apr  5 18:41 /dev/nvidiactl
crw-rw-rw- 1 root root 195, 254 Apr  5 18:41 /dev/nvidia-modeset
crw-rw-rw- 1 root root 509,   0 Apr  5 18:41 /dev/nvidia-uvm
crw-rw-rw- 1 root root 509,   1 Apr  5 18:41 /dev/nvidia-uvm-tools
crw------- 1 root root  10, 144 Apr  5 18:41 /dev/nvram

Unter /etc/pve/lxc/<CT-id>.conf die obigen Werte angepasst eintragen:

#cgroup access
lxc.cgroup2.devices.allow: c 195:0 rw
lxc.cgroup2.devices.allow: c 195:255 rw
lxc.cgroup2.devices.allow: c 195:254 rw
lxc.cgroup2.devices.allow: c 509:0 rw
lxc.cgroup2.devices.allow: c 509:1 rw
lxc.cgroup2.devices.allow: c 10:144 rw
 
#device files   
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
lxc.mount.entry: /dev/nvram dev/nvram none bind,optional,create=file

Jetzt geht es wieder wie zuvor im Container.

Fehlende libcudnn Pakete installieren

Dieses Mal gehe ich direkt auf die Nvidia-Seite und lade von auch die notwendigen CUDNN-Pakete runter und folgen der Anleitung:

wget https://developer.download.nvidia.com/compute/cudnn/9.8.0/local_installers/cudnn-local-repo-ubuntu2404-9.8.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2404-9.8.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2404-9.8.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn

WhisperX-User, venv und WhisperX einrichten

Notwendigen Pakete installieren:

apt install python3 python3-venv python3-pip ffmpeg git build-essential

User erstellen:

adduser gpuwhisperxuser

Zum User wechseln:

su gpuwhisperxuser

In’s Home-Verzeichnis wechseln, whisperx Ordner erstellen und hineinwechseln, Python virtuelle Umgebung whenv (whisper-environment) erstellen und aktivieren:

cd /home/gpuwhisperxuser
mkdir whisperx
cd whisperx
python3 -m venv whenv
source whenv/bin/activate

Und jetzt das pip-Paket whisperx installieren:

pip install whisperx

Das dauert ein wenig:

whisperx /pfad/zur/mediendatei.endung --compute_type float16 --model large-v3

Leider kommt wieder der gleiche Fehler, aber dieses Mal habe ich eine Lösung gefunden in diesem Github-Isue Thread. Dort wird empfohlen diese Repo hinzuzufügen:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb 
dpkg -i cuda-keyring_1.0-1_all.deb 
apt update && apt upgrade
apt install libcudnn8 libcudnn8-dev

Also wieder zum Root-User wechseln und ausführen, ich habe jedoch übersehen, dass diese Repo für Ubuntu 22.04 und nicht 24.04 ist.

Eine Warnung kommt auch noch:

update-alternatives: warning: forcing reinstallation of alternative /usr/include/x86_64-linux-gnu/cudnn_v9.h because link group libcudnn is broken
update-alternatives: using /usr/include/x86_64-linux-gnu/cudnn_v8.h to provide /usr/include/cudnn.h (libcudnn) in manual mode

Aber funktionieren tut es jetzt:

Sehr gut, die Transkription ist nun auch um ein Vielfaches schneller geworden. In einem zukünftigen Beitrag beschreibe ich, wie man diese Transkriptionsfähigkeiten in eine sinnvolle Anwendung umsetzen kann.