Skip to content
A fast and simple framework for building and running distributed applications. Ray is packaged with RLlib, a scalable reinforcement learning library, and Tune, a scalable hyperparameter tuning library.
Python C++ Java Starlark TypeScript Shell Other
Branch: master
Clone or download

Latest commit

VishDev12 [tune] fix for sync_on_checkpoint bug (#9057)
* #9056 fix for sync_on_checkpoint bug

* fix for failing checks

* update help string
Latest commit 432ce1b Jun 21, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Get more tests running on Windows (#6537) Jun 13, 2020
bazel Upgrade Bazel and add required patches (#8847) Jun 12, 2020
ci Fix more Windows issues (#9011) Jun 20, 2020
cpp Add interfaces for C++ worker cluster mode (#8859) Jun 15, 2020
deploy/ray-operator Customize service account name. (#8901) Jun 16, 2020
doc Make Dashboard Port Configurable (#8999) Jun 19, 2020
docker Quick fix (#8985) Jun 17, 2020
java Remove gcs_service_disabled ci jobs and code (#8854) Jun 19, 2020
python [tune] fix for sync_on_checkpoint bug (#9057) Jun 21, 2020
rllib [RLlib] Make sure torch and tf behave the same wrt conv2d nets. (#8785) Jun 19, 2020
src Fix more Windows issues (#9011) Jun 20, 2020
streaming [Streaming] fix cv hang in multithread variables race (#8984) Jun 19, 2020
thirdparty Fix '//:redis_client' build on RHEL 7.6 ppc64le (#9035) Jun 19, 2020
.bazelrc Clean up CI ASAN & .bazelrc (#8828) Jun 16, 2020
.clang-format Remove legacy Ray code. (#3121) Oct 26, 2018
.editorconfig Improve .editorconfig entries (#7344) Feb 27, 2020
.gitignore Updated gitignore for tags and emacs (#8809) Jun 6, 2020
.style.yapf YAPF, take 3 (#2098) May 19, 2018
.travis.yml Remove gcs_service_disabled ci jobs and code (#8854) Jun 19, 2020
BUILD.bazel Optimize gcs server resubscribe (#8896) Jun 17, 2020
CONTRIBUTING.rst Add linting pre-push hook (#5154) Jul 10, 2019
LICENSE [rllib] add augmented random search (#2714) Aug 25, 2018
README.rst Update README to say that python 2 is deprecated (#8404) May 11, 2020
WORKSPACE Use GRCP and Bazel 1.0 (#6002) Nov 8, 2019
build-docker.sh Find bazel even if it isn't in the PATH. (#4729) May 2, 2019
build.sh Clean up CI ASAN & .bazelrc (#8828) Jun 16, 2020
pylintrc RLLIB and pylintrc (#8995) Jun 17, 2020
scripts Lint script link broken, also lint filter was broken for generated py… Feb 23, 2019
setup_hooks.sh Make sure pre-push is executable. (#7079) Feb 7, 2020

README.rst

/_proxy/https/github.com/ray-project/ray/raw/master/doc/source/images/ray_header_logo.png

/_proxy/https/travis-ci.com/ray-project/ray.svg?branch=master /_proxy/https/readthedocs.org/projects/ray/badge/?version=latest

Ray is a fast and simple framework for building and running distributed applications.

Ray is packaged with the following libraries for accelerating machine learning workloads:

  • Tune: Scalable Hyperparameter Tuning
  • RLlib: Scalable Reinforcement Learning
  • RaySGD: Distributed Training Wrappers

Install Ray with: pip install ray. For nightly wheels, see the Installation page.

NOTE: As of Ray 0.8.1, Python 2 is no longer supported.

Quick Start

Execute Python functions in parallel.

import ray
ray.init()

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

futures = [f.remote(i) for i in range(4)]
print(ray.get(futures))

To use Ray's actor model:

import ray
ray.init()

@ray.remote
class Counter(object):
    def __init__(self):
        self.n = 0

    def increment(self):
        self.n += 1

    def read(self):
        return self.n

counters = [Counter.remote() for i in range(4)]
[c.increment.remote() for c in counters]
futures = [c.read.remote() for c in counters]
print(ray.get(futures))

Ray programs can run on a single machine, and can also seamlessly scale to large clusters. To execute the above Ray script in the cloud, just download this configuration file, and run:

ray submit [CLUSTER.YAML] example.py --start

Read more about launching clusters.

Tune Quick Start

/_proxy/https/github.com/ray-project/ray/raw/master/doc/source/images/tune-wide.png

Tune is a library for hyperparameter tuning at any scale.

To run this example, you will need to install the following:

$ pip install ray[tune] torch torchvision filelock

This example runs a parallel grid search to train a Convolutional Neural Network using PyTorch.

import torch.optim as optim
from ray import tune
from ray.tune.examples.mnist_pytorch import (
    get_data_loaders, ConvNet, train, test)


def train_mnist(config):
    train_loader, test_loader = get_data_loaders()
    model = ConvNet()
    optimizer = optim.SGD(model.parameters(), lr=config["lr"])
    for i in range(10):
        train(model, optimizer, train_loader)
        acc = test(model, test_loader)
        tune.track.log(mean_accuracy=acc)


analysis = tune.run(
    train_mnist, config={"lr": tune.grid_search([0.001, 0.01, 0.1])})

print("Best config: ", analysis.get_best_config(metric="mean_accuracy"))

# Get a dataframe for analyzing trial results.
df = analysis.dataframe()

If TensorBoard is installed, automatically visualize all trial results:

tensorboard --logdir ~/ray_results

RLlib Quick Start

/_proxy/https/github.com/ray-project/ray/raw/master/doc/source/images/rllib-wide.jpg

RLlib is an open-source library for reinforcement learning built on top of Ray that offers both high scalability and a unified API for a variety of applications.

pip install tensorflow  # or tensorflow-gpu
pip install ray[rllib]  # also recommended: ray[debug]
import gym
from gym.spaces import Discrete, Box
from ray import tune

class SimpleCorridor(gym.Env):
    def __init__(self, config):
        self.end_pos = config["corridor_length"]
        self.cur_pos = 0
        self.action_space = Discrete(2)
        self.observation_space = Box(0.0, self.end_pos, shape=(1, ))

    def reset(self):
        self.cur_pos = 0
        return [self.cur_pos]

    def step(self, action):
        if action == 0 and self.cur_pos > 0:
            self.cur_pos -= 1
        elif action == 1:
            self.cur_pos += 1
        done = self.cur_pos >= self.end_pos
        return [self.cur_pos], 1 if done else 0, done, {}

tune.run(
    "PPO",
    config={
        "env": SimpleCorridor,
        "num_workers": 4,
        "env_config": {"corridor_length": 5}})

More Information

Getting Involved

You can’t perform that action at this time.