ray-project/ray

Ray is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.

27
Hotness score
68
Reliability score
43,290
Stars
over 9 years
Age
0
Published reviews
0
Questions

Scores

Hotness and reliability

The two headline scores, measured daily, with 30, 90, and 180 day views.

Hotness score

Jul 19, 2026

Current27

Previous28

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Hotness formula

40% Hot today + 40% Hot this week + 20% Breakout.

  • 40% Hot today: 21
  • 40% Hot this week: 37
  • 20% Breakout: 1
  • Stars gained: 1d: 7
  • Stars gained: 7d: 64
  • Stars gained: 14d: 168
  • Stars gained: 30d: 351
  • Stars gained: 90d: 1063

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Jul 19, 2026

Current68

Previous68

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Reliability formula

30% Continuity + 30% Closure + 20% Shipping + 10% Liveness + 10% Support burden.

  • 30% Continuity: 86
  • 30% Closure: 78
  • 20% Shipping: 50
  • 10% Liveness: 100
  • 10% Support burden: 0

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

Reliability breakdown

What drives the reliability score

Component scores measured daily from GitHub activity (2026-07-18).

Continuity30% of headline86

Activity on 88 of 90 tracked days in the last 90 and 28 of 30 in the last 30.

Closure30% of headline78

Merged 1,060 of 1,725 PRs opened and closed 381 of 261 issues opened over the last 90 tracked days — PR flow carries 55% of this component, issue flow 45%.

Shipping20% of headline50

6 releases in the last 180 days, 3 in the last 90 and 2 in the last 30 — a steady cadence scores highest.

Liveness10% of headline100

Last push 0 days ago — freshness decays as pushes age (roughly halves every 83 days without a push).

Support burden10% of headline0

2,840 open issues against 43,290 stars — about 66 open issues per 1,000 stars. Lighter backlogs score higher.

Adoption confidence63

Modeled — how confidently teams are adopting this repo. Stargazers

Maintenance quality73

Modeled from PR/issue responsiveness and upkeep signals. Activity pulse

Risk score42

Modeled — lower is better; adoption and continuity risk. Repository

Stays active (30d)89%

Modeled chance the repo stays active over 30 days. Activity pulse

Stays active (90d)87%

Modeled chance the repo stays active over 90 days. Activity pulse

Release rhythm (180d)60

Regularity of releases over the last 180 days. Releases

Maintainer bus risk (90d)9%

Modeled — lower is better; concentration of commits in few maintainers. Contributors graph

Topics

Explore related topics

Jump into the topic listings this repository belongs to.

Measured history

Project metrics

Weekly GitHub totals with 30, 90, and 180 day views.

Weekly star gains

Jul 19, 2026

Current72

Previous94

Weekly star gains

156-436-1,028
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Cumulative stars

Jul 19, 2026

Current43,283

Previous43,211

Cumulative total

43,28321,6420
Full metrics details

Running total of the GitHub GraphQL stargazer count over time (not weekly deltas), reconstructed from starredAt events and totalCount in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Jul 12, 2026

Current30

Previous20

Weekly total

39200
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Jul 12, 2026

Current27

Previous25

Weekly total

109550
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Jul 12, 2026

Current134

Previous119

Weekly total

188940
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Jul 12, 2026

Current135

Previous122

Weekly total

186930
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Jul 12, 2026

Current87

Previous76

Weekly total

143720
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Issue close ratio (daily)

Jul 17, 2026

Current0.11

Previous2.00

Daily ratio — a gap means nothing was opened that day

How this works: each day's value is issues closed that day ÷ issues opened that day. Days when nothing was opened render as gaps — never a rolling average or a made-up zero. Values above 1 mean the project closed more issues than arrived that day.

18.609.300.00
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

164 observed daily rows. Missing days are not fabricated.

Per-day formula: issues closed that day ÷ issues opened that day; blank when nothing was opened (a gap, not a zero).

DateIssues openedIssues closedStored score

Pull request close ratio (daily)

Jul 18, 2026

Current0.50

Previous0.58

Daily ratio — a gap means nothing was opened that day

How this works: each day's value is pull requests closed that day ÷ pull requests opened that day. Days when nothing was opened render as gaps — never a rolling average or a made-up zero. Values above 1 mean the project closed more pull requests than arrived that day.

6.003.000.00
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

Per-day formula: pull requests closed that day ÷ pull requests opened that day; blank when nothing was opened (a gap, not a zero).

DatePRs openedPRs closedStored score

Releases

Jul 19, 2026

Current1

Previous0

Weekly total

110
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue

Project Overview

Ray is an open-source distributed computing framework and AI compute engine built on Python. It provides a core parallel runtime — a distributed object store, a task scheduler, and an actor system — plus a unified suite of ML libraries: Ray Tune for hyperparameter search, Ray Train for distributed model training, Ray Serve for online model serving, and Ray Data for scalable data preprocessing.

The project is actively maintained by Anyscale and a wide open-source community. If you are running ML training, hyperparameter search, model serving, or large-scale data preprocessing in Python, Ray is worth a serious evaluation.

Key Challenges Addressed

Python's GIL prevents true thread-level parallelism. Scaling Python workloads across many machines historically meant adopting a JVM-based framework like Spark or hand-rolling multiprocessing and inter-process communication. Ray's core mechanism is a task-and-actor model: decorate functions with @ray.remote to run them in parallel across cores and machines, and decorate classes with @ray.remote to make them stateful distributed actors. The framework handles scheduling, fault tolerance, and data movement between nodes.

Specific problems Ray targets:

  • CPU-bound Python workloads that can't escape the GIL on a single machine
  • Coordinating multi-GPU or multi-node training jobs without manually configuring process groups
  • Running many hyperparameter trials in parallel with early stopping and resource-aware scheduling
  • Serving ML models at low latency with dynamic batching and autoscaling
  • Streaming large datasets into training jobs without blocking GPU computation on I/O

Getting Started

Install Ray with pip:

pip install "ray[default]"

For ML library support, install the relevant extras:

pip install "ray[train,tune,serve,data]"

A minimal parallel task example:

import ray

ray.init()

@ray.remote
def square(x):
    return x * x

futures = [square.remote(i) for i in range(10)]
results = ray.get(futures)

Sharp edges you will hit immediately:

  • Object store memory: Ray allocates a fraction of available RAM to its Plasma object store by default. If you leave this unset on a memory-constrained machine, Ray silently spills objects to disk and your jobs run dramatically slower with no obvious warning. Set object_store_memory explicitly in ray.init() before running any real workload.
  • Cluster address binding: When joining worker nodes, ray start --address must use the head node's IP as seen from the workers — not 127.0.0.1. Binding to localhost causes workers to connect but tasks never schedule, and jobs hang indefinitely.
  • Python version consistency: All nodes must run the same Python minor version. Mixing 3.10 on the head node with 3.11 on workers causes serialization failures with error messages that don't clearly identify the version mismatch as the root cause.

Features and Use Cases

Ray Core gives you @ray.remote tasks and actors. Use tasks for stateless parallel CPU work. Use actors for long-lived stateful services — parameter servers, shared feature caches, or streaming ingest loops — that accumulate state across many calls.

Ray Tune runs distributed hyperparameter search. You define a training function, a search space, and an optimization algorithm — Bayesian search via Optuna, population-based training, or ASHA for early stopping — and Tune schedules trials across your cluster. It integrates with MLflow and Weights & Biases for experiment tracking with no extra code.

Ray Train scales model training across GPUs and nodes. It wraps PyTorch DDP, DeepSpeed, and Hugging Face Accelerate so you can go from one GPU to a multi-node cluster by changing a ScalingConfig rather than rewriting your training loop. A TransformersTrainer handles distributed fine-tuning of Hugging Face models directly.

Ray Serve deploys models as HTTP endpoints with dynamic batching (@serve.batch), model composition (chaining multiple models in a pipeline), and request-driven autoscaling. For a transformer model that benefits from batched inference, Serve's batching decorator is the direct path to throughput improvement without a separate serving framework.

Ray Data preprocesses large datasets in a streaming fashion, overlapping data reading with GPU computation so accelerators stay fed. It reads Parquet, CSV, JSON, Delta Lake, and cloud storage without loading the full dataset into memory.

Ecosystem and Dependencies

Ray integrates broadly with the Python ML stack:

  • PyTorch: Ray Train wraps torch.distributed natively. You keep your existing training loop and add Ray scaffolding around it, without reconfiguring process groups manually.
  • XGBoost and LightGBM: both have native Ray integrations for distributing tree training across workers with no estimator code changes beyond wrapping the estimator.
  • Hugging Face Transformers: Ray Train's TransformersTrainer handles distributed fine-tuning end to end.
  • MLflow and Weights & Biases: Ray Tune callbacks log metrics to both platforms automatically.
  • KubeRay: the ray-project/kuberay operator manages Ray clusters on Kubernetes, including head and worker node lifecycle and cluster autoscaling.

Architectural Overview

Ray's architecture has three layers.

Distributed object store (Plasma): every object returned by a remote task lives in shared memory local to the node that produced it. When another task needs it, Ray transfers it over the network. For large NumPy arrays or tensors, this bypasses Python pickling — the data stays as raw bytes in shared memory and is read directly by the consuming worker.

Scheduler (GCS + distributed schedulers): the Global Control Store manages cluster metadata — node membership, task lineage, and actor locations. The distributed scheduler assigns tasks to workers based on resource requirements declared on the decorator. @ray.remote(num_gpus=1) tasks only land on nodes with a free GPU slot. You can declare custom resources to model specialized hardware such as TPUs or FPGAs.

Actor model: actors are long-lived Python processes with their own private state. Calls queue in a mailbox and execute serially inside the actor unless you use async methods. This is how Ray implements parameter servers, shared feature stores, and other stateful pipeline components that would otherwise require external coordination infrastructure.

The key design choice: Ray is imperative, not declarative. You write ordinary Python and the framework infers the execution graph at runtime by tracking object dependencies between tasks. This is more flexible than static graph frameworks but harder to optimize ahead of execution.

Pros and Cons

Pros

  • Gradual adoption: you can parallelize a single function in five lines without committing to a framework rewrite.
  • First-class GPU scheduling: resource declarations at the task and actor level make multi-GPU allocation explicit and automatic across the cluster.
  • Unified stack: Core, Tune, Train, Serve, and Data share the same cluster and object store. Data does not need to be serialized between pipeline stages.
  • Active development with frequent releases and a large contributor base.
  • Python-native: no JVM, no YAML DAG definitions, no domain-specific language. Distributed code looks like ordinary Python with decorators.

Cons

  • Distributed debugging is hard: remote task stack traces are surfaced asynchronously and out of context. Production debugging requires familiarity with the Ray dashboard and distributed logging tooling.
  • Head node is a single point of failure by default. High-availability head node configuration exists but adds meaningful operational complexity.
  • Object store tuning is mandatory for production. Default memory allocations are wrong for most real workloads; you will spend time calibrating object_store_memory, plasma_directory, and disk-spill thresholds.
  • API churn: Ray Train and Ray Data APIs have changed significantly across major versions. Upgrading Ray often requires code changes, not just dependency bumps.
  • Actor cold-start latency: spawning a new actor involves process creation and environment setup, which can take multiple seconds. Do not use actors in paths where request latency matters.

Comparison and Alternatives

Measured 90-day trends for this project and its alternatives.

GitHub stars

Weekly star gains

12140-41
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

Ray

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

173 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

133 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Weekly total

30150
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Ray

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub API observation. Historical values render only when the source provides a real observation for that day.

131 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub API observation. Historical values render only when the source provides a real observation for that day.

101 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Weekly total

109550
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Ray

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

131 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

177 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

101 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Weekly total

183920
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Ray

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub API observation. Historical values render only when the source provides a real observation for that day.

131 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub API observation. Historical values render only when the source provides a real observation for that day.

101 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Weekly total

177890
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Ray

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

131 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

177 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

101 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Weekly total

120600
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Ray

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub API observation. Historical values render only when the source provides a real observation for that day.

131 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub API observation. Historical values render only when the source provides a real observation for that day.

177 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub API observation. Historical values render only when the source provides a real observation for that day.

101 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed pull request ratio

Weekly average

100500
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Ray

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

173 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

133 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed issues ratio

Weekly average

100500
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Ray

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

173 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

133 observed daily rows. Missing days are not fabricated.

DateValue

Releases

Weekly total

110
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

Ray

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
Dask

GitHub release published_at events bucketed by UTC day; drafts are excluded.

178 observed daily rows. Missing days are not fabricated.

DateValue
Apache Spark

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
Horovod

GitHub release published_at events bucketed by UTC day; drafts are excluded.

173 observed daily rows. Missing days are not fabricated.

DateValue
Celery

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
Prefect

GitHub release published_at events bucketed by UTC day; drafts are excluded.

133 observed daily rows. Missing days are not fabricated.

DateValue

Hotness score

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

Ray

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Dask

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

178 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Apache Spark

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Horovod

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

173 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Celery

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Prefect

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

133 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

Ray

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Dask

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

178 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Apache Spark

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Horovod

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

173 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Celery

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Prefect

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

133 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

Several projects overlap with Ray depending on your use case:

Project Repo Hotness (~6mo) PRs merged (~6mo) Star growth (~6mo)
Ray https://github.com/ray-project/ray 35.86 686 3340
Dask https://github.com/dask/dask metrics pending 0 9
Apache Spark https://github.com/apache/spark 4.56 0 5783
Horovod https://github.com/horovod/horovod metrics pending 0 metrics pending
Celery https://github.com/celery/celery 87.24 235 1846
Prefect https://github.com/PrefectHQ/prefect 79.09 1568 1398

Dask is the closest direct comparison. Both parallelize Python across cores and machines and integrate with NumPy, Pandas, and scikit-learn. Dask is more mature for pure dataframe and array workloads; Ray has better GPU scheduling, a more complete ML training and serving story, and a more ergonomic actor model for stateful services.

Apache Spark is the established choice for large-scale batch data processing. It has a mature SQL engine, broad structured data support, and decades of production use. For GPU-accelerated ML workloads, Spark requires more integration work and lacks native GPU scheduling at the task level.

Horovod is narrower: distributed deep learning training via ring-allreduce, and nothing else. If all you need is data-parallel distributed training and you are already committed to TensorFlow or PyTorch, Horovod is simpler. If you need anything beyond training — serving, tuning, data pipelines — Ray Train gives a more complete platform.

Celery is a mature task queue for application-level async work. It has no concept of GPU resources, actor state, or shared object stores. Use it for sending emails or processing uploads. Don't use it for ML training pipelines.

Prefect is a workflow orchestration tool, not a compute engine. It schedules and monitors pipelines but delegates actual computation to external systems like Kubernetes jobs or Dask. Use it when your primary need is scheduling visibility and retry logic, not parallel compute.

The best overall alternative to Ray is Dask. It has a more stable API surface, deeper documentation for data science workflows, and broader adoption in the scientific Python community — making it the lower-risk starting point if you do not specifically need Ray's GPU scheduling or actor model.

Conclusion

If you are a machine learning engineer running distributed training, hyperparameter search, or model serving at scale, Ray gives you a single Python framework that covers the full pipeline — from data preprocessing through deployment — with documentation that covers each layer in depth. The shared object store eliminates the serialization overhead that accumulates when you stitch together separate training, tuning, and serving systems.

Do not run Ray in production without explicitly setting object_store_memory in ray.init(): left at the default, Ray silently falls back to disk-spill under memory pressure and your training throughput collapses with no clear warning in the logs. Start by running ray status on your cluster to confirm available CPU, GPU, and memory resources before submitting your first large job.

Join the conversation

Reviews · Questions · Posts

Share what you know about ray — write a review from your real experience, ask an implementation question, or publish a post about how you use it.

Share your experience

Write or update your review

Explain what worked, what broke down, and what another team should know before adopting ray.

Write your review now — it saves locally and publishes automatically after you sign in.

Rating
Positive attributes
Negative attributes

Project Q&A

Questions and answers

Browse implementation threads tied directly to ray-project/ray. Each question links through to the full answer page.

Q&A No threads yet

Be the first to ask how teams run ray in production. Every question you post becomes a durable, searchable answer page other developers can find.

Ask the first question

Related posts

Posts tagged with the same topics

These posts come from the same topic surface as this repo, so readers can move from project evaluation into practical writeups and migration notes without leaving context.

Posts No topic-linked posts yet

Share how your team uses ray — a migration note, an architecture writeup, or a comparison. Your post reaches everyone browsing these same topics.

Write the first post
Get a weekly email with the hottest new projects in the Deployment Automation and Deployment world.
No Spam. Unsubscribe easily at any time.

Copyright 2018-2026 Awesome Open Source.  All rights reserved.