Juliacon 2024

Ray.jl: Julia runtime and client for the Ray compute framework
07-12, 10:30–11:00 (Europe/Amsterdam), Else (1.3)

The Ray compute framework is widely used for distributed computing, supporting multiple compute environments and client languages.
Ray.jl is a Julia client library and runtime for distributing Julia computation on Ray developed by Beacon Biosignals.
Ray.jl can be used to scale distributed workloads from local machines to large cloud instances to Kubernetes clusters, without needing deep expertise in distributed computing.


The Ray compute framework is a widely used framework for distributed computing supporting multiple compute environments. While Ray is focused on Python, it supports workflows authored in multiple client languages, including Python, Java, and C++. In this talk we'll describe Ray.jl, a Julia-language client library and runtime for distributing Julia computation on Ray developed at Beacon Biosignals.

Ray has a number of properties that make it a good fit for our Julia-based distributed computing needs at Beacon.
1. Ray has a simple "core" mental model (of Objects, Tasks, and Actors) that allows our developers to reason about distributed computing without requiring deep expertise.
2. Ray provides a set of back-end features that are battle-tested and used in production by other organizations of various scales. These features---including a distributed object store, scheduler, and worker orchestration---bridge the gap between "local dev" and "massively scalable Kubernetes cluster" environments and provide a landing zone for distributed workloads that frees our developers from worrying about provisioning compute resources. While many of these features are provided by existing solutions, no single solution provided all of them, and to fill in any of the gaps to the level of robustness we need would have been impractical with a small engineering team.
3. Because the Ray compute framework supports multiple client languages (Python, Java, and C++) each with their own runtime, the core C++ API has been pared down to something that is reasonably language-agnostic, and having multiple client language implementation to reference made it possible to implement our own client and runtime.

In this talk we'll cover some of the challenges involved in building out a functional MVP of Ray.jl, including interfacing with a complex C++ API, building binary artifacts with a build toolchain not supported by BinaryBuilder.jl, serializing functions across Julia processes, and more. We'll also present case studies of how we've used Ray.jl to scale workloads at Beacon, demonstrate the basic functionality that Ray.jl provides, and discuss future features we plan to add to the package.

See also: Ray.jl Talk Slides (773.3 KB)

Julia contributor since 2014. Have developed several Julia packages including TimeZones.jl and Mocking.jl. Currently working with Beacon Biosignals as a contractor.

Research Scientist at Beacon Biosignals and recovering academic.

Research Software Engineer @beacon.bio