Same photos, same models, four configurations. The graphics card won by a wide margin, and for my library it still would not be worth buying.
The short answer
A graphics card makes Immich’s face recognition about 8 times faster than a small processor, and up to 14 times when given more work at once. A much bigger desktop processor was only about a third quicker. For my 54,000-item library that turns a three-hour one-off job into fifteen minutes.
Where this comes from
Measured on my own hardware on 11 October 2026, using photos from my own Immich library. I timed Immich’s machine-learning container directly. Addresses and paths are removed. Where a figure is calculated, not measured, it says so.
The question
In an earlier test I found that my NUC, with no graphics card, indexed my whole library in about an hour. That answered “do I need a GPU?” for me. It did not answer the next question people ask: how much faster would one be?
Test setup
- Mini PC
- Intel NUC8i7BEH, Core i7-8559U, 4 cores / 8 threads (2018), 16 GB, Docker on Ubuntu
- Desktop
- Core i9-10900K, 10 cores / 20 threads (2020), 32 GB, Docker Desktop on Windows 11
- Graphics card
- NVIDIA RTX 2060 Super, 8 GB (2019), in the desktop
- Software
- Immich 3.3.1 machine-learning images, default models
ViT-B-32__openaiandbuffalo_l
Method
I drew one fixed, random sample from my library and used it for every run: 10,000 previews for the search model and 3,000 photo previews for the face model.
Immich feeds its models the preview image it has already made for each item, so that is what I sent. Each file went to the machine-learning container’s /predict endpoint, which is the call Immich’s server makes, and I recorded how long each call took. Both models were loaded and warmed before the clock started.
Every configuration ran two requests at a time. On the graphics card I also ran eight at a time, to see how much headroom it had. Nothing was written to my Immich server.
One difference between the machines: the NUC read the previews from my NAS over the network, the desktop from its own SSD. In the earlier test the network read took 7 milliseconds against 123 for the model, so it does not change the picture.
Results
No errors in any run. Every configuration found exactly the same 4,664 faces in the sample, so the graphics card is doing the same work, not a rougher version of it.
Face recognition
photos per second, higher is betterSearch indexing
items per second, higher is betterBlue bars are the graphics card. Grey bars are processors only. Two requests at a time unless noted.
Time per image, at two requests at a time:
| Configuration | Search, median | Faces, median | Faces, slowest 5% |
|---|---|---|---|
| NUC, Core i7-8559U | 0.123 s | 0.279 s | over 0.863 s |
| Desktop, Core i9-10900K only | 0.103 s | 0.217 s | over 0.649 s |
| Desktop, RTX 2060 Super | 0.039 s | 0.042 s | over 0.076 s |
During the graphics-card run the card reported 3.5 GB of its 8 GB in use and was about half busy.
What the numbers mean
Face recognition went from 5.1 to 42.6 photos a second at the same setting, a little over 8 times faster. Search indexing went from 14.4 to 50.9, about 3.5 times.
On a processor, the slowest 5% of photos took three times as long as a typical one, which I take to be group shots with many faces. On the card that tail almost disappears.
Two requests at a time left it about 50% busy. Eight at a time nearly tripled search indexing. If you add a GPU and leave the job concurrency where it was, you use roughly half of what you bought.
The desktop’s Core i9 has more than twice the cores of the NUC’s chip and is two years newer. It was 32% faster at search and 35% faster at faces.
A 2019 card with 8 GB was using under half its memory. You do not need a current or high-end GPU for Immich’s default models.
What that means for a whole library
Calculated from the rates above for my library of 51,126 previews and 39,546 photos. These are not end-to-end timings.
| Configuration | Search index | Faces | Both |
|---|---|---|---|
| NUC, Core i7-8559U | 59 min | 2 h 10 min | about 3 h 10 min |
| Desktop, Core i9-10900K only | 45 min | 1 h 36 min | about 2 h 20 min |
| Desktop, RTX 2060 Super | 17 min | 15 min | about 32 min |
| Desktop, RTX 2060 Super, 8 at a time | 6 min | 9 min | about 15 min |
Is it worth it?
The saving is real, and for me it is a one-off. My library was imported once and nothing new is being added, so a GPU would have saved under three hours, a single time, on a job that ran in the background anyway.
A GPU is worth it if
- your library is in the hundreds of thousands: at 500,000 photos the NUC’s rates mean about ten hours for search and over a day for faces
- you re-run jobs, for example to try a different search model
- a card is already sitting in a machine on your network
Skip it if
- your library was imported once and rarely grows
- the job can run in the background for an afternoon
- the money could buy storage or a second copy of your photos
- One card, two processors. A newer GPU would be faster still; an older or smaller one may not reach these figures.
- Not Immich’s own job queue. I timed the model step. Immich’s real jobs also write to its database and, for faces, group the results into people.
- Thumbnails and video transcoding were not tested. They are separate jobs and can take longer than the machine learning.
- The desktop ran Docker Desktop on Windows, which adds a virtualisation layer.
- Power and cost were not measured.
Reproduce it
- Pick a fixed random sample of preview files from your library and copy the same files to every machine.
- Start the machine-learning image on its own, with the model port published. For an NVIDIA card:
docker run -d --gpus all -p 3003:3003 -v ml-cache:/cache \
ghcr.io/immich-app/immich-machine-learning:v3-cuda
Use the tag without -cuda for a processor-only run.
- Send each file to
http://localhost:3003/predictas a multipart form with animagefield and anentriesfield. For search:
{"clip": {"visual": {"modelName": "ViT-B-32__openai"}}}
- Send a few files first so the model is loaded, then time the rest with a fixed number of requests in parallel.
- Confirm the container log shows
CUDAExecutionProvider, so you know the card was used.
Takeaway
A GPU makes Immich’s machine learning roughly ten times faster, and a faster processor barely helps. Whether that matters depends on how often the job runs: for a growing or very large library it is a clear win, and for a finished archive it saves one afternoon.
Your turn
Would you add a GPU for Immich?
I decided it wasn’t worth it for an archive my size. Where do you land? If you have numbers from your own hardware, send them and I’ll add them to the table.
Keep reading
AI assisted with running the measurements and drafting this article. The hardware, the library and every figure are from my own setup.

Immich without a GPU: timed on an Intel NUC
Immich review: five months as a photo archive
Why docker compose pull won’t update Immich to v3