하드웨어 가속 머신 러닝
이 기능은 GPU를 사용하여 스마트 검색 및 얼굴 인식과 같은 머신 러닝 작업을 가속화하고 CPU 부하를 줄일 수 있도록 합니다. 이것은 새로운 기능이므로 아직 실험적이며 모든 시스템에서 작동하지 않을 수 있습니다.
하드웨어 가속을 활성화한 후 머신 러닝 작업을 다시 수행할 필요는 없습니다. 활성화 후 실행되는 작업에서 가속 장치가 사용됩니다.
지원되는 백엔드
- ARM NN (Mali)
- CUDA (컴퓨팅 가능 버전이 5.2 이상인 NVIDIA GPU)
- ROCm (AMD GPU)
- OpenVINO (Iris Xe 및 Arc와 같은 Intel GPU)
- RKNN (Rockchip)
제한사항
- 여기에서 제공되는 지침 및 구성은 Docker Compose에 특화되어 있습니다. 다른 컨테이너 엔진은 다른 구성이 필요할 수 있습니다.
- Linux 및 Windows(WSL2를 통해) 서버만 지원됩니다.
- ARM NN은 Mali GPU를 사용하는 장치에서만 지원됩니다. 다른 Arm 장치는 지원되지 않습니다.
- 일부 모델은 특정 백엔드와 호환되지 않을 수 있습니다. CUDA가 가장 신뢰할 수 있습니다.
- ARM NN은 모델 호환성 문제로 인해 탐색 지연을 개선하지 않습니다. 그러나 스마트 검색 작업은 ARM NN을 사용합니다.
사전 준비사항
ARM NN
- 적절한 Linux 커널 드라이버가 설치되어 있는지 확인하십시오.
- 이는 일반적으로 장치 공급업체의 Linux 이미지에 사전 설치되어 있습니다.
/dev/mali0
가 호스트 서버에서 사용 가능해야 합니다.- 이를 확인하려면
ls /dev
를 실행하여 존재하는지 확인하십시오.
- 이를 확인하려면
- 비공개 소스
libmali.so
펌웨어를 보유하고 있어야 합니다 (추가 펌웨어 파일이 필요할 수 있음).- 이 파일의 위치와 획득 방법은 장치 및 공급업체에 따라 다를 수 있지만, 일반적으로 공급업체가 이를 제공합니다.
hwaccel.ml.yml
파일은 해당 위치를/usr/lib/libmali.so
로 가정하므로, 다른 곳에 있을 경우 업데이트하십시오.hwaccel.ml.yml
파일에는 추가 파일/lib/firmware/mali_csffw.bin
이 필요하다고 가정하므로, 장치의 드라이버가 이 파일을 필요로 하지 않는 경우 업데이트하십시오.
- 선택 사항:
.env
파일을 구성하십시오. ARM NN 특정 설정에 대해서는 환경 변수를 참조하세요.- 특히,
MACHINE_LEARNING_ANN_FP16_TURBO
는 약간의 낮은 정확도를 희생하고 성능을 상당히 향상할 수 있습니다.
- 특히,
CUDA
- GPU는 컴퓨팅 가능 버전이 5.2 이상이어야 합니다.
- 서버에는 공식 NVIDIA 드라이버가 설치되어 있어야 합니다.
- 설치된 드라이버는 >= 545(CUDA 12.3 지원) 이상이어야 합니다.
- Linux(WSL2 제외)에서는 NVIDIA Container Toolkit도 설치해야 합니다.
ROCm
- GPU는 ROCm에 의해 지원되어야 합니다. 공식 지원되지 않는 경우, 환경 변수
HSA_OVERRIDE_GFX_VERSION=<지원되는 버전, 예: 10.3.0>
을 시도할 수 있습니다. 실패 시,HSA_USE_SVM=0
도 설정해야 할 수 있습니다. - ROCm 이미지는 크기가 매우 커서 최소 35GiB의 여유 디스크 공간이 필요합니다. 그러나 Docker를 통해 서비스를 업데이트하는 경우 일반적으로 몇백 메가바이트만 소요됩니다(나머지는 캐시됩니다).
- 이 백엔드는 새로워서 일부 문제가 발생할 수 있습니다. 예를 들어, 머신 러닝 서비스가 유휴 상태인 경우에도 추론 후 GPU 전력 소모가 평소보다 높을 수 있습니다. 이 경우 유휴 상태가 5분 후에(설정 가능) 정상으로 돌아옵니다.
OpenVINO
- 통합 GPU는 특히 오래된 프로세서나 낮은 RAM의 서버에서 이슈가 발생할 가능성이 높습니다.
- 하드웨어 가속을 위한 장치를 사용하려면 서버의 커널 버전이 충분히 최신이어야 합니다.
- OpenVINO를 사용할 때 CPU 처리에 비해 RAM 사용량이 더 많아질 수 있습니다.
RKNN
- 지원되는 Rockchip SoC를 보유하고 있어야 합니다. 현재는 RK3566, RK3568, RK3576, RK3588만 지원됩니다.
- 적절한 Linux 커널 드라이버가 설치되어 있는지 확인하십시오.
- 이는 일반적으로 장치 공급업체의 Linux 이미지에 사전 설치되어 있습니다.
- 호스트 서버에서 RKNPU 드라이버 V0.9.8 이상이 사용 가능해야 합니다.
cat /sys/kernel/debug/rknpu/version
을 실행하여 버전을 확인할 수 있습니다.
- 선택 사항:
.env
파일을 구성하십시오. RKNN 특정 설정에 대해서는 환경 변수를 참조하십시오.- 특히,
MACHINE_LEARNING_RKNN_THREADS
을 2 또는 3으로 설정하면 기본값 1에 비해 RAM 사용량이 증가하지만 속도가 현저히 개선될 수 있습니다.
- 특히,
설정
- 최신
hwaccel.ml.yml
파일을 다운로드하여docker-compose.yml
과 동일한 폴더에 있는지 확인하십시오. docker-compose.yml
의immich-machine-learning
섹션에서,extends
섹션의 주석을 제거하고cpu
를 적절한 백엔드로 변경하십시오.- 여전히
immich-machine-learning
섹션에서,image
섹션의 태그 끝에 -[armnn, cuda, rocm, openvino, rknn] 중 하나를 추가하십시오. - 이러한 업데이트된 설정으로
immich-machine-learning
컨테이너를 다시 배포하십시오.
장치 사용 확인
장치가 인식되고 사용 중인지 확인하려면, 사용률을 확인할 수 있습니다. NVIDIA 또는 Intel에는 nvtop
, Intel에는 intel_gpu_top
, AMD에는 radeontop
과 같은 여러 도구가 있습니다.
또한 immich-machine-learning
컨테이너의 로그를 확인할 수도 있습니다. 스마트 검색이나 얼굴 인식 작업이 시작되거나 Immich에서 텍스트로 검색할 때, 관련 제공자(e.g., CUDA의 경우 CUDAExecutionProvider
)를 포함하는 Available ORT providers
로그 또는 ARM NN의 경우 오류 없는 Loaded ANN model
로그 항목을 확인할 수 있습니다.
단일 Compose 파일
Unraid 및 Portainer를 포함한 일부 플랫폼은 작성 시 다중 Compose 파일을 지원하지 않습니다. 대신, hwaccel.ml.yml
파일의 관련 내용을 immich-machine-learning
서비스에 직접 추가할 수 있습니다.
예를 들어, 이 파일의 cuda
섹션은 다음과 같습니다:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities:
- gpu
이를 hwaccel.ml.yml
에서 확장하는 대신 immich-machine-learning
서비스에 추가할 수 있습니다:
immich-machine-learning:
container_name: immich_machine_learning
# 끝에 '-cuda' 추가
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda
# 'extends' 섹션 없음
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities:
- gpu
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
이 작업이 완료되면 immich-machine-learning
컨테이너를 다시 배포할 수 있습니다.