mrkeyoor.com_
Fri 16 Oct 18:53 UTC
AI Toolsevaluationupdated 12 Oct 2026

ray review

Ray runs Python work across multiple workers or machines and helps applications coordinate the results. Its optional libraries handle data preparation, distributed model training, experiments, and model serving when one machine is no longer enough.

+32stars / 7d
Verdict

Our Ray run installed 35 packages in 15 seconds, then failed its build and stopped pytest at 200 collection/setup errors, so the easy package command did not give us a validated source checkout. Use Ray when distributed Python work or persistent model workers justify a cluster you can operate. Require a successful check of your own workload, including output recovery after worker loss, before adopting Ray Data for records you cannot afford to lose.

We ran it

Lab card: what happened when we ran rayScreenshot of ray (ray.io)
Install✓ · 15s35 packages · 37 MB
Build✗ · 39s
Tests✗ · 15s0 passed · 0 failed · 200 errors of 200 (pytest)
Known vulns0(pip-audit)
Repo10463 files~1,735,721 lines of source · 374.5 MB · 4 CI workflows

Answers from our run

Does ray build from source?

Dependencies installed in 15 seconds (35 packages), and the build failed. We cloned commit f54b8b3 into a clean Debian container with 3 CPUs and no project-specific setup.

Do ray's tests pass?

Yes: 0 of 200 passed when we ran the project's own test command (pytest), with 200 collection errors. Some failures need services or credentials a bare container does not have.

Does ray have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use ray?

Services accepting untrusted user code on one shared cluster: the security guide requires isolation outside Ray and separate isolated clusters where workloads need separation.

What are the alternatives to ray?

Dask, Celery, BentoML. Our Ray run installed 35 packages in 15 seconds, then failed its build and stopped pytest at 200 collection/setup errors, so the easy package command did not give us a validated source checkout.

Setup2/515-second install, followed by a failed build and collection errors
Docs4/5Separate guides cover core concepts, library choices, and cluster security
Community5/5October 11 push and fresh issues and PRs across several components
Maturity4/5Active ray-2.59.0 release, with recovery behavior needing workload checks

Discussed on

  1. hnAn experimental distributed execution engine from Berkeley3 points

Who it’s for

Python teams with a measured need to spread independent work across machines.
ML platform engineers combining data preparation, training, or serving on shared infrastructure.
Developers who need persistent workers to retain state between jobs and can operate a trusted cluster.

Who it’s NOT for

Services accepting untrusted user code on one shared cluster: the security guide requires isolation outside Ray and separate isolated clusters where workloads need separation.
Ray Data adopters who cannot reconcile output after spot-worker loss: open issue 66917 reports a completed map_groups pipeline with missing output after preemption.
Teams requiring a green fresh-container source checkout before adoption: our build failed and pytest stopped at 200 collection/setup errors.
Applications that only need queued background jobs: the README centers distributed tasks, actors, shared objects, and ML libraries, so consider a dedicated task queue first.

Setup reality

Our commit f54b8b3 sandbox installed Ray in 15 seconds, adding 35 packages and using 37 MB. The build failed with exit 1 in 39 seconds. The test step failed with exit 1 in 15 seconds: pytest reported 0 passed, 0 failed, and 200 collection/setup errors, with its own 6.75-second summary. Pip-audit reported 0 known vulnerabilities.

Local execution needs no hosted AI credential. Remote workers need matching application environments, network configuration, and access to data. Cloud deployments add infrastructure credentials and permissions, while Kubernetes requires its own deployment and access configuration. Choose optional libraries according to the workload.

We used 3 CPUs and 8 GB RAM in an unprivileged Python 3.12 Debian container without secrets. The build tail shows warnings about is versus == for an integer literal, without the fatal cause. The test tail names release workloads without their underlying exceptions. Ray also requires trusted code and controlled cluster access.

Remote functions are the reason to adopt Ray

Move a Python function onto another worker and you inherit a scheduling problem. Ray gives that work a place to run, then adds stateful workers called actors and shared, immutable objects. The README separates this core from its Data, Train, Tune, RLlib, and Serve libraries. That division makes sense: you can distribute your own Python work without adopting every machine-learning component in the repository.

Our checkout contained 10,463 files and roughly 1,735,721 source lines. This is a substantial platform to bring into an application. I'd consider it for preprocessing feeding distributed training, or a service whose workers need to retain model state. For a script that already finishes comfortably on one machine, I'd keep the existing execution model until there is a specific bottleneck worth moving.

What happened when we ran it

Our Ray install succeeded in 15 seconds, adding 35 packages and using 37 MB on disk. We ran commit f54b8b3 on October 2, 2026, in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and the ghcr.io/astral-sh/uv:python3.12-bookworm image. The container had no secrets. Pip-audit reported 0 known vulnerabilities for the environment inspected, which doesn't establish application or cluster security.

The build exited with status 1 after 39 seconds. Its supplied tail shows SyntaxWarning messages in python/ray/llm/tests/common/cloud/test_utils.py: assertions compare a cache result with the integer literal using is -1. Python suggests ==. Those warnings are visible evidence, but the tail doesn't identify the fatal error. We cannot say they caused the build to fail, or blame an absent system package without its exception.

The test step also exited with status 1, after 15 seconds overall. Pytest's own summary reports 200 collection/setup errors in 6.75 seconds, with 0 passed and 0 failed tests. The named files cover Serve autoscaling and Train workloads involving checkpointing, Horovod, and Hugging Face. Collection stopped at the error limit. These are errors before successful test execution, so describing the result as 200 failed assertions would misrepresent what happened.

Our scan recorded 4 CI workflow files, no Dockerfile, and no tests directory. The failing paths themselves contain nested test locations, so those scan signals aren't proof that Ray lacks tests or container support. The 374.5 MB checkout and successful dependency step tell us what arrived in this container. They don't demonstrate a working distributed application, a completed source build, or a production-ready deployment.

The package command leaves cluster configuration to you

The README's pip install ray line is an approachable starting point, and our 15-second install supports that narrow promise. The separate installation guide distinguishes library extras and platform support. Choose the Data, Serve, or training components your application actually needs, then pin the environment across workers. A base package reaching disk doesn't establish that your chosen combination of frameworks, model assets, and cluster configuration works together.

Local Python work doesn't need a hosted AI API key. Cloud workers need the permissions and credentials for their infrastructure and data, while Kubernetes adds cluster configuration and access. Our Python 3.12 container exercised none of those deployments. Start with one real job and verify its output before adding workers. The useful adoption question is whether distributing that job saves enough work to justify owning its environment.

Cluster access grants code execution

Ray's security guide says Dashboard, Jobs, and Client access can permit arbitrary code execution. It expects trusted code on a controlled network, with isolation enforced outside Ray. That rules out treating a shared cluster as a boundary between mutually untrusted users. An operator who needs tenant isolation must arrange separate isolated clusters and access controls rather than assume the job scheduler supplies them.

Release ray-2.59.0 added default token authentication for local ray.init() clusters, while remote and multi-node defaults remained unchanged. This is useful progress, but it doesn't remove the documented network requirement. Our 0-known-vulnerability audit result cannot answer who can submit a job. Check the deployment's actual authentication and reachability before trusting a local example as the blueprint for a remote service.

Ray Data has a current missing-output report

Open issue 66917 reports a Ray Data map_groups pipeline completing with missing output after worker preemption and a streaming-generator replay error. The report concerns Ray Data on a spot cluster, not an unrelated older component. It's a user report we haven't reproduced. Still, teams processing records they cannot lose should require output reconciliation and failure-recovery checks before choosing that execution path.

Our 200 collection/setup errors leave us unable to confirm that behavior or its absence at commit f54b8b3. The distinction matters: the issue describes completed work with incorrect output, whereas our sandbox never reached a passing suite. Neither result justifies a blanket claim that Ray loses data. Together they give a buyer concrete work to do before approving a pipeline that relies on retries after a worker disappears.

October activity supports a trial with a specific workload

GitHub recorded the last push on October 11, 2026, with fresh issues and pull requests that weekend. The repository showed 44,007 stars and 3,557 open issues and PRs, a combined count rather than a bug total. Release ray-2.59.0 arrived October 2. Those dates show ongoing maintenance. Stars help establish the audience, but neither popularity nor a recent tag repairs the failures in our container.

Dask is the alternative I'd inspect for parallel analytics. Celery fits queued background jobs, while BentoML deserves a look when packaging model-serving APIs is the actual requirement. Ray earns its place when your application needs distributed Python tasks or persistent workers and someone can own the cluster. Our 37 MB dependency footprint was modest, but the failed build and suite leave a clear next step: prove your exact workload before expanding it.

Alternatives

ProjectWhat it isPick it when
DaskParallel Python computing aimed at analytics workloads.pick this instead when parallel arrays, dataframes, or analytical task graphs are the main job.
Celery gh↗A distributed task queue for work handled by background workers.pick this instead when you need queued background jobs without a shared ML runtime.
BentoMLA Python framework for building model-serving APIs.pick this instead when deploying inference services is the requirement and distributed training is outside scope.

What people are saying

  1. [hackernews] Using Blu-ray M-Disk as backup of last resort
  2. [hackernews] I wrote a ray tracer in Brainfuck

Sources

  1. Ray README and repository
  2. Ray installation and platform guide
  3. Ray security and isolation requirements
  4. Ray 2.59.0 release notes
  5. Ray Data missing output after worker preemption
  6. Ray issue and pull request activity

More ai tools reviews

universal-modder · DeepEP-Ascend · DeepGEMM-Ascend · hypoarena · jeeves · faster-whisper · the whole board →