메인 콘텐츠로 바로가기

원격 머신 러닝

Raspberry Pi와 같이 저메모리 시스템에서 성능 문제를 완화하기 위해, Immich의 머신 러닝 컨테이너를 노트북이나 데스크톱 컴퓨터와 같은 더 강력한 시스템에 호스팅할 수도 있습니다. 서버 컨테이너는 이미지 미리보기가 포함된 요청을 원격 머신 러닝 컨테이너로 보내 처리합니다. 머신 러닝 컨테이너는 이 데이터를 유지하지 않으며 특정 사용자와 연관 짓지도 않습니다.

정보

스마트 검색 및 얼굴 감지는 이 기능을 사용하지만, 얼굴 인식은 사용하지 않습니다. 이는 얼굴 인식이 이미 데이터베이스에 저장된 이러한 모델의 _출력_을 사용하기 때문입니다. 따라서 해당 처리는 서버 컨테이너와 데이터베이스 간에 이루어집니다.

위험

이미지 미리보기가 원격 머신 러닝 컨테이너로 전송됩니다. 이 옵션을 공용 컴퓨터나 유료 클라우드에서 실행할 경우 신중히 사용하십시오. 또한 내부 서비스로서 머신 러닝 컨테이너는 어떠한 보안 조치도 없습니다. 배포 위치와 접근 가능 사용자에 대해 신중하게 검토하십시오.

  1. 원격 서버에 Docker가 설치되어 있는지 확인하십시오.
  2. 다음 docker-compose.yml을 원격 서버로 복사하십시오.
정보

하드웨어 가속을 사용하는 경우, hwaccel.ml.yml 파일도 추가해야 하며, 하드웨어 가속 문서에 설명된 대로 docker-compose.yml을 구성해야 합니다.

name: immich_remote_ml

services:
immich-machine-learning:
container_name: immich_machine_learning
# 하드웨어 가속의 경우, 이미지는 다음 중 하나의 태그를 추가합니다: -[armnn, cuda, rocm, openvino, rknn].
# 예제 태그: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.ml.yml
# service: # 가속 추론을 위해 [armnn, cuda, rocm, openvino, openvino-wsl, rknn] 중 하나 설정 - 해당되는 경우 WSL2용 `-wsl` 버전 사용
volumes:
- model-cache:/cache
restart: always
ports:
- 3003:3003

volumes:
model-cache:
  1. docker compose up -d 명령을 실행하여 원격 머신 러닝 컨테이너를 시작하십시오.
정보

양측 호스트 간 버전 불일치는 버그 및 불안정을 초래할 수 있으므로, 로컬 Immich 인스턴스를 업데이트할 때 이 컨테이너도 업데이트하는 것을 잊지 마십시오.

  1. 머신 러닝 설정으로 이동하십시오.
  2. _URL 추가_를 클릭하십시오.
  3. 새로운 필드에 원격 머신 러닝 컨테이너의 URL(예: http://ip:port)을 입력하십시오.

원격 처리 강제

설정에 새 URL을 추가하는 것이 기존 URL을 대체하는 것보다 권장됩니다. 이렇게 하면 원격 서버가 다운되었을 때 로컬 머신 러닝 컨테이너로 작업이 처리될 수 있기 때문입니다. 원격 서버가 사용 불가능할 때 로컬에서 작업 처리가 이루어지지 않도록 하려면, 기존 URL을 대체하고 원격 컨테이너의 URL만 제공할 수 있습니다. 이 경우, 로컬 docker-compose.yml 파일에서 immich-machine-learning 섹션을 제거하여 리소스를 절약할 수 있습니다. 이 서비스는 사용되지 않기 때문입니다.

단, 이 설정은 스마트 검색 및 얼굴 감지 작업이 원격 인스턴스를 사용할 수 없는 경우 처리에 실패하게 만듭니다. 이는 중복 감지 및 얼굴 인식과 같은 이 기능에 의존하는 작업도 영향을 받게 된다는 것을 의미합니다. 이 경우, 작업 상태 페이지에서 스마트 검색과 얼굴 감지 옆에 있는 누락 버튼을 수동으로 클릭하여 작업을 다시 시도해야 합니다.

부하 분산

설정에서 여러 URL을 제공할 수 있지만, 순차적으로 시도되며 여러 컨테이너 간에 부하를 분산하려는 시도는 없습니다. 이러한 경우 전용 로드 밸런서를 사용하는 것이 권장되며, 이를 유일한 URL로 지정하는 것을 고려하십시오. 이 외에도 동일한 서버에서 여러 컨테이너를 서로 다른 구성으로 실행함으로써 다양한 API를 사용할 수 있게 됩니다. 예를 들어, CUDA 컨테이너 외에 OpenVINO 컨테이너를 실행하거나, CPU와 GPU 활용을 극대화하기 위해 표준 릴리스 컨테이너를 실행할 수 있습니다.

머신 러닝 컨테이너는 특정 인스턴스가 사용하는 모델에 관계없이 여러 Immich 인스턴스 간에 공유될 수 있습니다. 하지만 다른 모델을 사용하는 경우, 피크 메모리 사용량이 더 높아질 수 있습니다.