diff --git a/xtts/README.md b/xtts/README.md index fa513f3..95f8db9 100644 --- a/xtts/README.md +++ b/xtts/README.md @@ -46,6 +46,33 @@ GPU-Test + Stack-Start. | `--up` | am Ende `docker compose up -d --build` (Default-Profil) | | `--token ` | `RVS_TOKEN` in `xtts/.env` eintragen (auch via `RVS_TOKEN=…` env) | | `--rvs-host ` | `RVS_HOST` setzen | +| `--upgrade-driver` | NVIDIA-Treiber aus **NVIDIAs** Paketquelle für Debian 13 (siehe unten). Spielt erst durch, zeigt den Plan, fragt nach. Danach Reboot. | +| `--yes` | bei `--upgrade-driver` nicht nachfragen | + +## Treiber für das lokale LLM: `--upgrade-driver` + +Debian hat höchstens Treiber **550** (CUDA 12.4). Die aktuellen llama.cpp- und +llama-swap-Images brauchen CUDA 12.8/12.9. Mit 550 meldet llama.cpp beim Start +`failed to initialize CUDA … forward compatibility …`, findet **keine** Karte und +rechnet still auf der **CPU** — das Modell meldet trotzdem „bereit". Erkennbar +daran, dass `nvidia-smi` auf der LLM-Karte kaum Speicher belegt zeigt. + +```bash +cd ARIA-AGENT/xtts +sudo ./bootstrap.sh --upgrade-driver +sudo reboot +nvidia-smi # zeigt den neuen Treiber und eine CUDA-Version >= 12.9 +docker compose up -d +``` + +Das Script trägt NVIDIAs Paketquelle ein und aktualisiert Treiber, Kernelmodul, +`nvidia-smi` und `libcuda1` an Ort und Stelle (gleiche Paketnamen, neuere +Version). Alte Debian-Teilpakete, die in den neuen aufgegangen sind, werden +entfernt. Das **NVIDIA-Container-Toolkit bleibt unberührt** — würde apt es +anfassen wollen, bricht das Script ab, ohne etwas zu ändern. Ebenso, wenn apt +keinen sauberen Weg findet; die Paketquelle wird dann wieder entfernt. +Whisper und F5-TTS laufen mit dem neuen Treiber weiter (neuere Treiber können +ältere CUDA-Versionen). ## Wichtig diff --git a/xtts/bootstrap.sh b/xtts/bootstrap.sh index f4ae257..d2dadae 100755 --- a/xtts/bootstrap.sh +++ b/xtts/bootstrap.sh @@ -11,8 +11,13 @@ # # Optionen: # --up am Ende den xtts-Stack starten (Default-Profil, OHNE voxtral) -# --upgrade-driver NVIDIA-Treiber aus trixie-backports (modernes CUDA fuer Voxtral). -# Danach REBOOT noetig. Default-Bootstrap laesst 550 unangetastet. +# --upgrade-driver NVIDIA-Treiber aus NVIDIAs eigener Paketquelle fuer Debian 13 +# (Debian selbst hat max. 550 = CUDA 12.4 — zu alt fuer die +# aktuellen llama.cpp/llama-swap-Images, die CUDA 12.8/12.9 +# brauchen; ohne Upgrade rechnet das LLM still auf der CPU). +# Spielt erst durch, zeigt den Plan, fragt nach. Danach REBOOT. +# Default-Bootstrap laesst den Treiber unangetastet. +# --yes bei --upgrade-driver nicht nachfragen # --token RVS_TOKEN in xtts/.env eintragen (alternativ: env RVS_TOKEN=...) # --rvs-host RVS_HOST setzen (Default aus .env.example) # @@ -24,12 +29,14 @@ set -euo pipefail # ── CLI ── DO_UP=0 DO_UPGRADE_DRIVER=0 +ASSUME_YES=0 RVS_TOKEN_ARG="${RVS_TOKEN:-}" RVS_HOST_ARG="${RVS_HOST:-}" while [[ $# -gt 0 ]]; do case "$1" in --up) DO_UP=1; shift ;; --upgrade-driver) DO_UPGRADE_DRIVER=1; shift ;; + --yes|-y) ASSUME_YES=1; shift ;; --token) RVS_TOKEN_ARG="${2:-}"; shift 2 ;; --rvs-host) RVS_HOST_ARG="${2:-}"; shift 2 ;; -h|--help) grep '^#' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; @@ -94,42 +101,88 @@ fi [[ $ENABLED_ANY -eq 0 ]] && ok "non-free schon aktiv" apt-get update -qq # immer neu einlesen, damit der Kandidat sicher da ist -# ── 2b. (opt-in) Treiber-Upgrade via trixie-backports — fuer Voxtral/modernes CUDA ── -# Der Trixie-Standardtreiber (550, CUDA 12.4) ist zu alt fuer den modernen Stack -# (torch 2.13, vLLM). Backports bringt einen neueren, apt-verwalteten Treiber. +# ── 2b. (opt-in) Treiber-Upgrade ueber NVIDIAs Paketquelle fuer Debian 13 ── +# Debian (auch trixie-backports) hat hoechstens 550 = CUDA 12.4. Die aktuellen +# llama.cpp-/llama-swap-Images brauchen CUDA 12.8/12.9 → mit 550 meldet +# llama.cpp "failed to initialize CUDA … forward compatibility …", findet keine +# Karte und rechnet STILL auf der CPU ("ready" meldet es trotzdem). +# NVIDIAs Quelle hat die Pakete unter denselben Namen, nur neuer — apt +# aktualisiert an Ort und Stelle. Alte Debian-Teilpakete (nvidia-driver-bin, +# nvidia-alternative, …) sind in den neuen aufgegangen und werden entfernt. +# Das Container-Toolkit bleibt unberuehrt — ohne es saehe kein Container die GPU, +# darum bricht das Script ab, falls apt es anfassen wollte. # NUR mit --upgrade-driver, damit ein laufendes Setup nicht ungewollt angefasst wird. +NV_REPO="https://developer.download.nvidia.com/compute/cuda/repos/debian13/x86_64" +MIN_DRIVER_MAJOR=575 # CUDA 12.9 braucht mindestens Treiber 575 if [[ "$DO_UPGRADE_DRIVER" -eq 1 ]]; then - step "NVIDIA-Treiber-Upgrade (trixie-backports)" - BP_FILE="/etc/apt/sources.list.d/backports.sources" - if ! grep -rqs "trixie-backports" /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null; then - cat > "$BP_FILE" <<'EOF' -Types: deb -URIs: http://deb.debian.org/debian -Suites: trixie-backports -Components: main contrib non-free non-free-firmware -Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg -EOF - ok "trixie-backports hinzugefuegt" + step "NVIDIA-Treiber-Upgrade (NVIDIAs Paketquelle fuer Debian 13)" + CUR="$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -1 || true)" + if [[ -z "$CUR" ]]; then CUR="$(dpkg-query -W -f='${Version}' nvidia-driver 2>/dev/null || true)"; fi + CUR_MAJOR="${CUR%%.*}" + if [[ "$CUR_MAJOR" =~ ^[0-9]+$ && "$CUR_MAJOR" -ge "$MIN_DRIVER_MAJOR" ]]; then + ok "Treiber ${CUR} ist neu genug (>= ${MIN_DRIVER_MAJOR}) — nichts zu tun" else - ok "trixie-backports bereits aktiv" - fi - apt-get update - apt-get install -y linux-headers-amd64 || true - apt-get install -y "linux-headers-$(uname -r)" || true - if apt-get install -y -t trixie-backports nvidia-driver; then + ok "aktuell: ${CUR:-kein Treiber} — Ziel: >= ${MIN_DRIVER_MAJOR}" + KEYRING_NEW=0 + if ! dpkg -s cuda-keyring >/dev/null 2>&1; then + curl -fsSL "$NV_REPO/cuda-keyring_1.1-1_all.deb" -o /tmp/cuda-keyring.deb \ + || die "NVIDIA-Paketquelle nicht erreichbar ($NV_REPO)" + dpkg -i /tmp/cuda-keyring.deb >/dev/null && KEYRING_NEW=1 + ok "NVIDIA-Paketquelle eingetragen" + fi + undo_keyring() { [[ "$KEYRING_NEW" -eq 1 ]] && dpkg -r cuda-keyring >/dev/null 2>&1 && apt-get update -qq || true; } + apt-get update -qq + apt-get install -y -qq linux-headers-amd64 >/dev/null 2>&1 || true + apt-get install -y -qq "linux-headers-$(uname -r)" >/dev/null 2>&1 || true + + NV_PKGS="nvidia-driver nvidia-kernel-dkms nvidia-smi libcuda1" + for p in nvidia-persistenced nvidia-modprobe; do + if dpkg -s "$p" >/dev/null 2>&1; then NV_PKGS="$NV_PKGS $p"; fi + done + + # Erst durchspielen — aendert nichts. + if ! SIM="$(apt-get -s install -y $NV_PKGS 2>&1)"; then + echo "$SIM" | grep -E "^E:|Kollidiert|Hängt ab|Depends|Conflicts" | head -15 || true + undo_keyring + die "apt findet keinen sauberen Weg — NICHTS geaendert (Quelle wieder entfernt)." + fi + if echo "$SIM" | grep -qE '^(Remv|Inst) (nvidia-container|libnvidia-container)'; then + undo_keyring + die "Das Upgrade wuerde das NVIDIA-Container-Toolkit anfassen — abgebrochen, NICHTS geaendert." + fi + NEWV="$(echo "$SIM" | sed -nE 's/^Inst nvidia-driver (\[[^]]*\] )?\(([^ ]+).*/\2/p' | head -1 || true)" + echo + echo -e " Plan: Treiber ${CUR:-?} → ${c_g}${NEWV:-?}${c_0}" + echo "$SIM" | grep -E "^[0-9]+ (aktualisiert|upgraded)" | head -1 | sed 's/^/ /' || true + REMV="$(echo "$SIM" | sed -nE 's/^Remv ([^ ]+).*/\1/p' | paste -sd' ' || true)" + if [[ -n "$REMV" ]]; then echo " entfernt (in den neuen Paketen aufgegangen): $REMV"; fi + echo " Container-Toolkit: bleibt unberuehrt" + echo " Danach ist ein REBOOT noetig (neues Kernelmodul)." + if [[ "$ASSUME_YES" -ne 1 && -t 0 ]]; then + read -r -p " Jetzt ausfuehren? [j/N] " ans + if [[ ! "$ans" =~ ^[jJyY] ]]; then + undo_keyring + die "Abgebrochen — NICHTS geaendert." + fi + fi + + apt-get install -y $NV_PKGS dkms autoinstall >/dev/null 2>&1 || true - NEWV="$(dpkg-query -W -f='${Version}' nvidia-driver 2>/dev/null || echo '?')" - ok "nvidia-driver aus backports installiert: ${NEWV}" + GOT="$(dpkg-query -W -f='${Version}' nvidia-driver 2>/dev/null || echo '?')" + [[ "${GOT%%.*}" =~ ^[0-9]+$ && "${GOT%%.*}" -ge "$MIN_DRIVER_MAJOR" ]] \ + || die "Installiert ist ${GOT} — erwartet >= ${MIN_DRIVER_MAJOR}. Bitte Ausgabe oben pruefen." + if dkms status 2>/dev/null | grep -q "$(uname -r).*installed"; then + ok "Kernelmodul fuer $(uname -r) gebaut" + else + warn "Kernelmodul fuer $(uname -r) nicht als gebaut gemeldet — nach dem Reboot 'nvidia-smi' pruefen" + fi + ok "nvidia-driver ${GOT} installiert" echo echo -e "${c_y}==> REBOOT noetig, damit der neue Treiber laedt:${c_0}" - echo -e "${c_y} sudo reboot && danach: cd xtts && sudo ./bootstrap.sh --up --token ${c_0}" - echo -e "${c_y} (nvidia-smi zeigt dann die neue Version + CUDA-Level)${c_0}" + echo -e "${c_y} sudo reboot${c_0}" + echo -e "${c_y} danach: nvidia-smi (zeigt ${GOT%%-*} und eine CUDA-Version >= 12.9)${c_0}" + echo -e "${c_y} und: cd xtts && docker compose up -d${c_0}" exit 0 - else - warn "backports-Install fehlgeschlagen — 550er bleibt aktiv." - warn "Alternative fuer den neuesten Treiber: NVIDIAs CUDA-Repo fuer debian13" - warn " (developer.download.nvidia.com/compute/cuda/repos/debian13/x86_64) → Paket 'cuda-drivers'." - die "Treiber-Upgrade nicht moeglich — siehe oben." fi fi