Machine Learning à distance
Pour remédier aux problèmes de performances sur les systèmes à faible mémoire comme le Raspberry Pi, vous pouvez également héberger le conteneur de machine learning d'Immich sur un système plus puissant, tel que votre ordinateur portable ou de bureau. Le conteneur du serveur enverra des requêtes contenant un aperçu de l'image au conteneur de machine learning distant pour traitement. Le conteneur de machine learning ne conserve pas ces données et ne les associe pas à un utilisateur particulier.
La recherche intelligente et la détection de visage utiliseront cette fonctionnalité, mais la reconnaissance faciale ne le fera pas. En effet, la reconnaissance faciale utilise les résultats de ces modèles qui ont déjà été sauvegardés dans la base de données. Par conséquent, son traitement est uniquement entre le conteneur serveur et la base de données.
Les aperçus d'image sont envoyés au conteneur de machine learning distant. Utilisez cette option avec précaution lorsque vous l'exécutez sur un ordinateur public ou un cloud de traitement payant. De plus, en tant que service interne, le conteneur de machine learning n'a aucune mesure de sécurité. Veuillez être conscient de son emplacement de déploiement et de qui peut y accéder.
- Assurez-vous que le serveur distant a Docker installé
- Copiez le fichier
docker-compose.yml
suivant sur le serveur distant
Si vous utilisez une accélération matérielle, le fichier hwaccel.ml.yml doit également être ajouté et le docker-compose.yml
doit être configuré comme décrit dans la documentation sur l'accélération matérielle
name: immich_remote_ml
services:
immich-machine-learning:
container_name: immich_machine_learning
# Pour l'accélération matérielle, ajoutez l'une des options -[armnn, cuda, rocm, openvino, rknn] au tag de l'image.
# Exemple de tag : ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.ml.yml
# service: # définissez sur l'une des options [armnn, cuda, rocm, openvino, openvino-wsl, rknn] pour l'inférence accélérée - utilisez la version `-wsl` pour WSL2 le cas échéant
volumes:
- model-cache:/cache
restart: always
ports:
- 3003:3003
volumes:
model-cache:
- Lancez le conteneur de machine learning distant en exécutant
docker compose up -d
Les incompatibilités de versions entre les deux hôtes peuvent causer des bugs et de l'instabilité, donc n'oubliez pas de mettre à jour ce conteneur également lors de la mise à jour de l'instance locale d'Immich.
- Accédez aux Paramètres de Machine Learning
- Cliquez sur Ajouter URL
- Remplissez le nouveau champ avec l'URL du conteneur de machine learning distant, par exemple
http://ip:port
Forcer le traitement à distance
Ajouter une nouvelle URL aux paramètres est recommandé plutôt que de remplacer l'URL existante. Cela permet aux tâches de machine learning de se traiter correctement lorsque le serveur distant est hors service, en revenant au conteneur de machine learning local. Si vous ne souhaitez pas que les tâches de machine learning soient traitées localement lorsque le serveur distant n'est pas disponible, vous pouvez remplacer l'URL existante et fournir uniquement l'URL du conteneur distant. Dans ce cas, vous pouvez supprimer la section immich-machine-learning
du fichier docker-compose.yml
local pour économiser des ressources, car ce service ne sera jamais utilisé.
Notez que cela signifie que les tâches de Recherche Intelligente et de Détection de Visage échoueront lorsqu'instance distante n'est pas disponible. Cela implique également que les tâches dépendantes de ces fonctionnalités—Détection de Duplicats et Reconnaissance Faciale—ne s'exécuteront pas pour les éléments affectés. Si cela se produit, vous devez cliquer manuellement sur le bouton Manquants en regard de Recherche Intelligente et Détection de Visage sur la page Statut des Jobs pour que les tâches soient réessayées.
Équilibrage de charge
Bien que plusieurs URLs puissent être fournies dans les paramètres, elles sont essayées séquentiellement; il n'y a aucune tentative de répartir la charge sur plusieurs conteneurs. Il est recommandé d'utiliser un répartiteur de charge dédié pour de tels cas d'utilisation et de spécifier celui-ci comme une seule URL. Entre autres avantages, cela peut permettre l'utilisation de différentes API sur le même serveur en exécutant plusieurs conteneurs avec différentes configurations. Par exemple, on peut exécuter un conteneur OpenVINO en plus d'un conteneur CUDA ou exécuter un conteneur de version standard pour maximiser l'utilisation à la fois du CPU et du GPU.
Le conteneur de machine learning peut être partagé entre plusieurs instances Immich indépendamment des modèles qu'une instance particulière utilise. Cependant, l'utilisation de modèles différents entraînera une utilisation de mémoire de pointe plus élevée.