1
0
mirror of https://github.com/immich-app/immich.git synced 2024-11-24 08:52:28 +02:00
immich/machine-learning
Mert 95cfe22866
feat(ml)!: cuda and openvino acceleration (#5619)
* cuda and openvino ep, refactor, update dockerfile

* updated workflow

* typing fixes

* added tests

* updated ml test gh action

* updated README

* updated docker-compose

* added compute to hwaccel.yml

* updated gh matrix

updated gh matrix

updated gh matrix

updated gh matrix

updated gh matrix

give up

* remove cuda/arm64 build

* add hwaccel image tags to docker-compose

* remove unnecessary quotes

* add suffix to git tag

* fixed kwargs in base model

* armnn ld_library_path

* update pyproject.toml

* add armnn workflow

* formatting

* consolidate hwaccel files, update docker compose

* update hw transcoding docs

* add ml hwaccel docs

* update dev and prod docker-compose

* added armnn prerequisite docs

* support 3.10

* updated docker-compose comments

* formatting

* test coverage

* don't set arena extend strategy for openvino

* working openvino

* formatting

* fix dockerfile

* added type annotation

* add wsl configuration for openvino

* updated lock file

* copy python3

* comment out extends section

* fix platforms

* simplify workflow suffix tagging

* simplify aio transcoding doc

* update docs and workflow for `hwaccel.yml` change

* revert docs
2024-01-21 18:22:39 -05:00
..
ann chore(deps): update machine-learning (#6302) 2024-01-13 05:00:09 +00:00
app feat(ml)!: cuda and openvino acceleration (#5619) 2024-01-21 18:22:39 -05:00
export chore(deps): update mambaorg/micromamba:bookworm-slim docker digest to 377aafa (#6434) 2024-01-16 16:39:31 -05:00
.dockerignore feat: facial recognition (#2180) 2023-05-17 12:07:17 -05:00
.gitignore feat: facial recognition (#2180) 2023-05-17 12:07:17 -05:00
Dockerfile feat(ml)!: cuda and openvino acceleration (#5619) 2024-01-21 18:22:39 -05:00
locustfile.py feat(server,ml): remove image tagging (#5903) 2023-12-20 20:47:56 -05:00
log_conf.json feat(server,ml): remove image tagging (#5903) 2023-12-20 20:47:56 -05:00
poetry.lock feat(ml)!: cuda and openvino acceleration (#5619) 2024-01-21 18:22:39 -05:00
pyproject.toml feat(ml)!: cuda and openvino acceleration (#5619) 2024-01-21 18:22:39 -05:00
README_es_ES.md Add Spanish translations of Readme (#3511) 2023-08-02 06:51:08 -05:00
README_fr_FR.md Add french documentation (#4010) 2023-09-08 13:48:39 +07:00
README.md feat(ml)!: cuda and openvino acceleration (#5619) 2024-01-21 18:22:39 -05:00
responses.json fix(ml): load models in separate threads (#4034) 2023-09-09 16:02:44 +07:00
start.sh chore(ml): improve shutdown (#5689) 2023-12-14 13:51:24 -06:00

Immich Machine Learning

  • CLIP embeddings
  • Facial recognition

Setup

This project uses Poetry, so be sure to install it first. Running poetry install --no-root --with dev --with cpu will install everything you need in an isolated virtual environment. CUDA and OpenVINO are supported as acceleration APIs. To use them, you can replace --with cpu with either of --with cuda or --with openvino.

To add or remove dependencies, you can use the commands poetry add $PACKAGE_NAME and poetry remove $PACKAGE_NAME, respectively. Be sure to commit the poetry.lock and pyproject.toml files with poetry lock --no-update to reflect any changes in dependencies.

Load Testing

To measure inference throughput and latency, you can use Locust using the provided locustfile.py. Locust works by querying the model endpoints and aggregating their statistics, meaning the app must be deployed. You can change the models or adjust options like score thresholds through the Locust UI.

To get started, you can simply run locust --web-host 127.0.0.1 and open localhost:8089 in a browser to access the UI. See the Locust documentation for more info on running Locust.

Note that in Locust's jargon, concurrency is measured in users, and each user runs one task at a time. To achieve a particular per-endpoint concurrency, multiply that number by the number of endpoints to be queried. For example, if there are 3 endpoints and you want each of them to receive 8 requests at a time, you should set the number of users to 24.