원격 머신 러닝
Raspberry Pi와 같이 저메모리 시스템에서 성능 문제를 완화하기 위해, Immich의 머신 러닝 컨테이너를 노트북이나 데스크톱 컴퓨터와 같은 더 강력한 시스템에 호스팅할 수도 있습니다. 서버 컨테이너는 이미지 미리보기가 포함된 요청을 원격 머신 러닝 컨테이너로 보내 처리합니다. 머신 러닝 컨테이너는 이 데이터를 유지하지 않으며 특정 사용자와 연관 짓지도 않습니다.
스마트 검색 및 얼굴 감지는 이 기능을 사용하지만, 얼굴 인식은 사용하지 않습니다. 이는 얼굴 인식이 이미 데이터베이스에 저장된 이러한 모델의 _출력_을 사용하기 때문입니다. 따라서 해당 처리는 서버 컨테이너와 데이터베이스 간에 이루어집니다.
이미지 미리보기가 원격 머신 러닝 컨테이너로 전송됩니다. 이 옵션을 공용 컴퓨터나 유료 클라우드에서 실행할 경우 신중히 사용하십시오. 또한 내부 서비스로서 머신 러닝 컨테이너는 어떠한 보안 조치도 없습니다. 배포 위치와 접근 가능 사용자에 대해 신중하게 검토하십시오.
- 원격 서버에 Docker가 설치되어 있는지 확인하십시오.
- 다음
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:
docker compose up -d
명령을 실행하여 원격 머신 러닝 컨테이너를 시작하십시오.
양측 호 스트 간 버전 불일치는 버그 및 불안정을 초래할 수 있으므로, 로컬 Immich 인스턴스를 업데이트할 때 이 컨테이너도 업데이트하는 것을 잊지 마십시오.
- 머신 러닝 설정으로 이동하십시오.
- _URL 추가_를 클릭하십시오.
- 새로운 필드에 원격 머신 러닝 컨테이너의 URL(예:
http://ip:port
)을 입력하십시오.
원격 처리 강제
설정에 새 URL을 추가하는 것이 기존 URL을 대체하는 것보다 권장됩니다. 이렇게 하면 원격 서버가 다운되었을 때 로컬 머신 러닝 컨테이너로 작업이 처리될 수 있기 때문입니다. 원격 서버가 사용 불가능할 때 로컬에서 작업 처리가 이루어지지 않도록 하려면, 기존 URL을 대체하고 원격 컨테이너의 URL만 제공할 수 있습니다. 이 경우, 로컬 docker-compose.yml
파일에서 immich-machine-learning
섹션을 제거하여 리소스를 절약할 수 있습니다. 이 서비스는 사용되지 않기 때문입니다.
단, 이 설정은 스마트 검색 및 얼굴 감지 작업이 원격 인스턴스를 사용할 수 없는 경우 처리에 실패하게 만듭니다. 이는 중복 감지 및 얼굴 인식과 같은 이 기능에 의존하는 작업도 영향을 받게 된다는 것을 의미합니다. 이 경우, 작업 상태 페이지에서 스마트 검색과 얼굴 감지 옆에 있는 누락 버튼을 수동으로 클릭하여 작업을 다시 시도해야 합니다.
부하 분산
설정에서 여러 URL을 제공할 수 있지만, 순차적으로 시도되며 여러 컨테이너 간에 부하를 분산하려는 시도는 없습니다. 이러한 경우 전용 로드 밸런서를 사용하는 것이 권장되며, 이를 유일한 URL로 지정하는 것을 고려하십시오. 이 외에도 동일한 서버에서 여러 컨테이너를 서로 다른 구성으로 실행함으로써 다양한 API를 사용할 수 있게 됩니다. 예를 들어, CUDA 컨테이너 외에 OpenVINO 컨테이너를 실행하거나, CPU와 GPU 활용을 극대화하기 위해 표준 릴리스 컨테이너를 실행할 수 있습니다.
머신 러닝 컨테이너는 특정 인스턴스가 사용하는 모델에 관계없이 여러 Immich 인스턴스 간에 공유될 수 있습니다. 하지만 다른 모델을 사용하는 경우, 피크 메모리 사용량이 더 높아질 수 있습니다.