Zum Hauptinhalt springen

Remote Machine Learning

Um Leistungsprobleme auf Systemen mit wenig Arbeitsspeicher, wie z. B. dem Raspberry Pi, zu lindern, können Sie den Machine-Learning-Container von Immich auch auf einem leistungsstärkeren System hosten, wie beispielsweise Ihrem Laptop oder Desktop-Computer. Der Server-Container sendet Anfragen mit der Bildvorschau an den entfernten Machine-Learning-Container zur Verarbeitung. Der Machine-Learning-Container speichert diese Daten nicht dauerhaft und ordnet sie keinem bestimmten Benutzer zu.

Info

Smart Search und Gesichtserkennung nutzen diese Funktion, jedoch nicht die Gesichtserkennung im engeren Sinne. Dies liegt daran, dass die Gesichtserkennung die Ergebnisse dieser Modelle verwendet, die bereits in der Datenbank gespeichert sind. Ihre Verarbeitung erfolgt daher zwischen dem Server-Container und der Datenbank.

Gefahr

Bildvorschauen werden an den entfernten Machine-Learning-Container gesendet. Nutzen Sie diese Option mit Bedacht, wenn Sie sie auf einem öffentlichen Computer oder einem bezahlten Verarbeitungscloud-Dienst ausführen. Darüber hinaus verfügt der Machine-Learning-Container als interner Dienst über keinerlei Sicherheitsmaßnahmen. Seien Sie sich bewusst, wo er eingesetzt wird und wer darauf zugreifen kann.

  1. Stellen Sie sicher, dass auf dem entfernten Server Docker installiert ist
  2. Kopieren Sie die folgende docker-compose.yml auf den entfernten Server
Info

Wenn Hardware-Beschleunigung verwendet wird, muss die Datei hwaccel.ml.yml ebenfalls hinzugefügt und die docker-compose.yml wie in der Dokumentation zur Hardware-Beschleunigung beschrieben konfiguriert werden.

name: immich_remote_ml

services:
immich-machine-learning:
container_name: immich_machine_learning
# Für Hardware-Beschleunigung fügen Sie eines von -[armnn, cuda, rocm, openvino, rknn] zum Image-Tag hinzu.
# Beispiel-Tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.ml.yml
# service: # Setzen Sie auf eines von [armnn, cuda, rocm, openvino, openvino-wsl, rknn] für beschleunigte Inferenz - verwenden Sie die `-wsl`-Version für WSL2, wenn zutreffend
volumes:
- model-cache:/cache
restart: always
ports:
- 3003:3003

volumes:
model-cache:
  1. Starten Sie den entfernten Machine-Learning-Container, indem Sie docker compose up -d ausführen.
Info

Versionsinkompatibilitäten zwischen beiden Hosts können Fehler und Instabilität verursachen, daher denken Sie daran, diesen Container ebenfalls zu aktualisieren, wenn Sie die lokale Immich-Instanz aktualisieren.

  1. Navigieren Sie zu den Machine-Learning-Einstellungen
  2. Klicken Sie auf Add URL
  3. Füllen Sie das neue Feld mit der URL des entfernten Machine-Learning-Containers, z. B. http://ip:port

Erzwingen der entfernten Verarbeitung

Es wird empfohlen, eine neue URL zu den Einstellungen hinzuzufügen, anstatt die bestehende URL zu ersetzen. Dadurch können Machine-Learning-Aufgaben erfolgreich verarbeitet werden, wenn der entfernte Server ausfällt, indem auf den lokalen Machine-Learning-Container zurückgegriffen wird. Wenn Sie nicht möchten, dass Machine-Learning-Aufgaben lokal verarbeitet werden, wenn der entfernte Server nicht verfügbar ist, können Sie stattdessen die bestehende URL ersetzen und nur die URL des entfernten Containers angeben. In diesem Fall können Sie den Abschnitt immich-machine-learning der lokalen docker-compose.yml-Datei entfernen, um Ressourcen zu sparen, da dieser Dienst nie verwendet wird.

Beachten Sie, dass dadurch Smart Search- und Gesichtserkennung-Aufgaben nicht verarbeitet werden können, wenn die entfernte Instanz nicht verfügbar ist. Dies bedeutet wiederum, dass auf diesen Funktionen basierende Aufgaben – Duplikaterkennung und Gesichtserkennung – für betroffene Assets nicht ausgeführt werden. Wenn dies der Fall ist, müssen Sie manuell auf die Schaltfläche Fehlend neben Smart Search und Gesichtserkennung auf der Seite Job Status klicken, um die Aufgaben erneut zu versuchen.

Lastenausgleich

Während mehrere URLs in den Einstellungen angegeben werden können, werden sie der Reihe nach versucht; es wird kein Versuch unternommen, die Last auf mehrere Container zu verteilen. Es wird empfohlen, für solche Anwendungsfälle einen dedizierten Load Balancer zu verwenden und diesen als einzige URL anzugeben. Unter anderem könnte dies die Verwendung verschiedener APIs auf demselben Server ermöglichen, indem mehrere Container mit unterschiedlichen Konfigurationen ausgeführt werden. Zum Beispiel könnte ein OpenVINO-Container zusätzlich zu einem CUDA-Container ausgeführt werden, oder ein Standard-Release-Container, um sowohl die CPU- als auch GPU-Auslastung zu maximieren.

Tipp

Der Machine-Learning-Container kann von mehreren Immich-Instanzen gemeinsam genutzt werden, unabhängig von den Modellen, die eine bestimmte Instanz verwendet. Die Verwendung unterschiedlicher Modelle führt jedoch zu einem höheren Spitzenarbeitsspeicherverbrauch.