Distributed Machine Learning at Instacart: training thousands of models with Ray
Instacart's legacy Celery-based distributed task queue could not scale efficiently as ML use cases grew: worker CPU utilization was only 10–15%, queues accumulated 300–1k+ tasks leading to long wait times, and managing Python dependencies across model types was difficult.
The Celery-based legacy system over-provisioned worker nodes (which still sat idle over 60% of the day), could not increase concurrency without upscaling hardware, and was too complex to replicate locally for testing.
After migrating to Ray-based distributed ML, CPU utilization rose from 10–15% to up to 80%, and end-to-end completion time for a production fulfillment model dropped from approximately 4 hours to 20 minutes, with concurrent workers rising from 10 to 70+.
Show all 10 reported metrics
Frequently asked questions
What did this team achieve with this AI workflow?
After migrating to Ray-based distributed ML, CPU utilization rose from 10–15% to up to 80%, and end-to-end completion time for a production fulfillment model dropped from approximately 4 hours to 20 minutes, with conc…
What tools did this team use?
Ray, Griffin, Celery, Airflow, Ray Job API, Ray Core APIs, Ray AIR, Ray Serve, Kubernetes, AWS EKS.
What results were reported?
CPU utilization — legacy system: 10% to 15%; CPU utilization — Ray system: up to 80%; End-to-end completion time — legacy: ~4 hours; end-to-end completion time — Ray system: 20 minutes (source-reported, not independently verified).
What failed first in this deployment?
The Celery-based legacy system over-provisioned worker nodes (which still sat idle over 60% of the day), could not increase concurrency without upscaling hardware, and was too complex to replicate locally for testing.
How is this back office ops AI workflow structured?
ML application submitted → Dedicated Ray Cluster provisioned → Parallel zone-level jobs launched → Concurrent model training → Production pipeline automation.