リモート機械学習
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インスタンス間で共有可能です。ただし、異なるモデルを使用する場合には、メモリ使用量のピークが増加します。