# 6 - Performances et accélération matérielle

Exploiter le GPU, régler les tâches et surveiller les performances d'Immich.

# 6.1 - Transcodage NVIDIA avec une Quadro P2000

La NVIDIA Quadro P2000 peut accélérer le transcodage vidéo avec NVENC et réduire la charge CPU. Immich indique que le transcodage matériel peut produire des fichiers plus volumineux et parfois de qualité inférieure à réglage comparable.

## Vérifier le GPU sur TrueNAS

```bash
sudo lspci -nnk | grep -A3 -i nvidia
nvidia-smi
```

Ton environnement a déjà utilisé un pilote NVIDIA 570.172.08 avec la P2000 reconnue. Après chaque mise à jour TrueNAS, refaire le contrôle.

## Vérifier dans le conteneur

Découvrir le conteneur :

```bash
sudo docker ps --format '{{.Names}} {{.Image}}' | grep -i immich
```

Puis :

```bash
sudo docker exec NOM_CONTENEUR_IMMICH nvidia-smi
```

L'image serveur observée utilisait `NVIDIA_DRIVER_CAPABILITIES=all`. Vérifier cette variable et l'allocation GPU dans l'interface TrueNAS plutôt que de modifier les fichiers Compose générés.

## Activer dans TrueNAS

1. éditer l'application Immich ;
2. activer la configuration GPU ;
3. sélectionner la P2000 pour le serveur Immich ;
4. redéployer ;
5. ouvrir les paramètres de transcodage vidéo ;
6. choisir NVENC ;
7. commencer avec le décodage matériel désactivé ;
8. tester un fichier compatible puis activer le décodage si utile.

## Contrôler l'utilisation

```bash
watch -n 1 nvidia-smi
```

Dans une autre session, lancer une tâche de transcodage et suivre les journaux :

```bash
sudo docker logs -f NOM_CONTENEUR_IMMICH
```

## Limites de la P2000

- génération Pascal ancienne mais encore adaptée à H.264 et HEVC ;
- pas d'encodage AV1 ;
- qualité et formats limités par le matériel ;
- 5 Go de VRAM à partager si le machine learning utilise aussi le GPU ;
- nombre de sessions et performances variables selon les fichiers.

## En cas d'artefacts

1. tester le même fichier en transcodage logiciel ;
2. désactiver le décodage matériel ;
3. comparer H.264 et HEVC ;
4. vérifier les journaux FFmpeg ;
5. contrôler pilote et température ;
6. ne pas conclure à une panne GPU à partir d'un seul fichier corrompu.

Référence : `https://docs.immich.app/features/hardware-transcoding/`

# 6.2 - Machine learning avec CUDA

Le machine learning Immich fournit la recherche intelligente et la reconnaissance faciale. CUDA est pris en charge sur les GPU NVIDIA avec une capacité de calcul 5.2 ou supérieure.

## Conditions actuelles

- GPU NVIDIA compatible ;
- pilote officiel NVIDIA 545 ou plus récent ;
- accès au GPU depuis le conteneur ;
- image machine learning CUDA ;
- mémoire GPU suffisante pour le modèle.

La Quadro P2000 répond à la condition de capacité de calcul et ton pilote 570.172.08 dépasse le minimum documenté.

## Docker Compose

Le service doit utiliser une image se terminant par `-cuda` et réserver un GPU. Exemple conceptuel :

```yaml
immich-machine-learning:
  image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda
  deploy:
    resources:
      reservations:
        devices:
          - driver: nvidia
            count: 1
            capabilities:
              - gpu
```

Utiliser de préférence les fichiers officiels `hwaccel.ml.yml` correspondant à la version Immich.

## TrueNAS

Dans les paramètres de l'application :

1. activer le GPU pour le machine learning ;
2. sélectionner la P2000 ;
3. redéployer ;
4. vérifier le conteneur ;
5. lancer une tâche de visages ou recherche intelligente.

## Vérifier

```bash
sudo docker exec NOM_CONTENEUR_ML nvidia-smi
sudo docker logs --tail 200 NOM_CONTENEUR_ML
```

Chercher :

```text
CUDAExecutionProvider
Available ORT providers
```

Surveiller :

```bash
watch -n 1 nvidia-smi
```

## Gestion de la VRAM

La P2000 possède 5 Go de VRAM. Éviter de lancer simultanément un import massif, plusieurs transcodages et de nombreux traitements ML sans surveillance.

Réduire si nécessaire :

- le nombre de workers ;
- la concurrence des tâches ;
- la taille ou complexité du modèle ;
- les transcodages parallèles.

## Après activation

Il n'est pas nécessaire de relancer tous les anciens jobs uniquement pour profiter de l'accélération. Les prochaines tâches utiliseront le backend disponible.

Référence : `https://docs.immich.app/features/ml-hardware-acceleration/`

# 6.3 - Concurrence, tâches et choix du stockage

## Priorités de stockage

1. PostgreSQL sur SSD si possible.
2. Miniatures sur SSD si la navigation est lente.
3. Originaux sur le pool de capacité.
4. Sauvegardes sur un autre support et un autre système.

Séparer les datasets peut améliorer l'organisation, mais complexifie la restauration. Mesurer avant de multiplier les montages.

## Concurrence des tâches

Dans `Administration > Settings`, ajuster progressivement :

- extraction de métadonnées ;
- miniatures ;
- transcodage ;
- recherche intelligente ;
- détection faciale.

Ne pas dépasser sans raison le nombre de coeurs disponibles, surtout pour les miniatures. Une concurrence trop forte peut ralentir l'API et saturer le stockage.

## Import massif

Avant :

```bash
df -hT
free -h
nvidia-smi
```

Pendant :

```bash
docker stats
iostat -xz 2
watch -n 2 nvidia-smi
```

`iostat` est fourni par `sysstat` sur de nombreuses distributions.

## Machine learning distant

Immich peut envoyer les aperçus à un service machine learning plus puissant. Cette option convient à un serveur limité, mais ajoute une dépendance réseau et un second service à sauvegarder ou reconstruire.

## Base PostgreSQL

Éviter les modifications manuelles de paramètres PostgreSQL copiées depuis un autre environnement. L'image officielle Immich contient des réglages et extensions adaptés.

Contrôles utiles :

```bash
docker exec -it immich_postgres psql -U postgres -d immich -c 'select version();'
docker exec -it immich_postgres pg_isready -U postgres -d immich
```

Adapter utilisateur, base et conteneur.

## Nettoyage

Après une mise à jour Docker validée :

```bash
docker image prune
```

Cette commande supprime les images inutilisées, pas les images en cours d'utilisation. Ne pas supprimer les volumes ou dossiers de données pour gagner de la place.

## Mesurer

Comparer avant et après :

- temps d'ouverture des miniatures ;
- durée d'une tâche de 1000 actifs ;
- charge CPU ;
- mémoire disponible ;
- latence disque ;
- utilisation GPU ;
- réactivité de l'API.

Références :

- `https://docs.immich.app/administration/jobs-workers/`
- `https://docs.immich.app/install/truenas/`

# 6.4 - Surveillance, journaux et contrôles

## État des conteneurs

Docker Compose :

```bash
docker compose ps
docker compose logs --tail=100
docker stats --no-stream
```

TrueNAS :

```bash
sudo docker ps --format 'table {{.Names}}\t{{.Status}}'
sudo docker stats --no-stream
```

## Version et schéma

```bash
docker exec -it immich_server immich-admin version
docker exec -it immich_server immich-admin schema-check
```

Adapter le nom du conteneur.

## Santé de PostgreSQL

```bash
docker exec immich_postgres pg_isready -U postgres -d immich
docker logs --tail 100 immich_postgres
```

## Ressources hôte

```bash
uptime
free -h
df -hT
df -i
lsblk -f
```

TrueNAS :

```bash
sudo zpool status
sudo zpool list
sudo zfs list
```

GPU :

```bash
nvidia-smi
```

## Interface Immich

- `Administration > Server Stats` pour les actifs et quotas ;
- `Administration > Jobs` pour les files ;
- `Administration > Maintenance` pour l'intégrité ;
- `Administration > Settings > Backup` pour les dumps ;
- `Administration > External Libraries` pour les scans.

## Collecte de diagnostic

Le pack contient `scripts/diagnostic_immich.sh`. Exemple :

```bash
IMMICH_COMPOSE_DIR=/srv/immich/app \
  ./scripts/diagnostic_immich.sh
```

Le script n'effectue aucune modification. Examiner le rapport avant de le partager, car il peut contenir noms de conteneurs, chemins, versions et adresses.

## Alertes utiles

- espace libre faible ;
- pool ZFS dégradé ;
- conteneur en redémarrage ;
- sauvegarde PostgreSQL absente ou ancienne ;
- files d'attente bloquées ;
- erreurs d'intégrité ;
- certificat proche de l'expiration ;
- GPU absent après mise à jour.

Ne pas attendre un incident pour tester les commandes de diagnostic et la restauration.