2018-12-23 22:59:23 -08:00
.. image :: https://github.com/ray-project/ray/raw/master/doc/source/images/ray_header_logo.png
2017-03-17 16:48:25 -07:00
2020-11-10 10:53:28 -08:00
.. image :: https://readthedocs.org/projects/ray/badge/?version=master
:target: http://docs.ray.io/en/master/?badge=master
2017-03-17 16:48:25 -07:00
2020-10-05 19:39:23 -07:00
.. image :: https://img.shields.io/badge/Ray-Join%20Slack-blue
:target: https://forms.gle/9TSdDYUgxYs8SA9e8
2020-12-10 01:13:40 -08:00
.. image :: https://img.shields.io/badge/Discuss-Ask%20Questions-blue
:target: https://discuss.ray.io/
2021-07-14 18:55:24 -07:00
.. image :: https://img.shields.io/twitter/follow/raydistributed.svg?style=social&logo=twitter
:target: https://twitter.com/raydistributed
2020-12-10 01:13:40 -08:00
2017-03-17 16:48:25 -07:00
|
2019-08-28 17:54:15 -07:00
2020-09-04 14:04:29 -07:00
**Ray provides a simple, universal API for building distributed applications.**
2017-03-17 16:48:25 -07:00
2019-08-28 17:54:15 -07:00
Ray is packaged with the following libraries for accelerating machine learning workloads:
- `Tune`_ : Scalable Hyperparameter Tuning
- `RLlib`_ : Scalable Reinforcement Learning
2020-11-10 10:53:28 -08:00
- `RaySGD <https://docs.ray.io/en/master/raysgd/raysgd.html> `__ : Distributed Training Wrappers
2020-07-24 14:53:21 -07:00
- `Ray Serve`_ : Scalable and Programmable Serving
2021-07-16 12:31:52 -07:00
- `Datasets`_ : Distributed Arrow on Ray (preview)
2018-03-12 00:52:00 -07:00
2020-09-15 13:11:00 -07:00
There are also many `community integrations <https://docs.ray.io/en/master/ray-libraries.html> `_ with Ray, including `Dask`_, `MARS`_, `Modin`_, `Horovod`_, `Hugging Face`_, `Scikit-learn`_, and others. Check out the `full list of Ray distributed libraries here <https://docs.ray.io/en/master/ray-libraries.html> `_ .
2020-09-14 14:41:06 -07:00
2019-12-23 13:48:21 -08:00
Install Ray with: `` pip install ray `` . For nightly wheels, see the
2020-09-19 03:30:45 -04:00
`Installation page <https://docs.ray.io/en/master/installation.html> `__ .
2019-12-23 13:48:21 -08:00
2020-09-14 14:41:06 -07:00
.. _`Modin`: https://github.com/modin-project/modin
.. _`Hugging Face`: https://huggingface.co/transformers/main_classes/trainer.html#transformers.Trainer.hyperparameter_search
2020-09-14 21:18:28 -07:00
.. _`MARS`: https://docs.ray.io/en/master/mars-on-ray.html
.. _`Dask`: https://docs.ray.io/en/master/dask-on-ray.html
2020-09-14 14:41:06 -07:00
.. _`Horovod`: https://horovod.readthedocs.io/en/stable/ray_include.html
.. _`Scikit-learn`: joblib.html
2021-07-19 18:03:26 -07:00
.. _`Datasets`: https://docs.ray.io/en/master/data/dataset.html
2020-09-14 14:41:06 -07:00
2018-03-12 00:52:00 -07:00
2019-08-28 17:54:15 -07:00
Quick Start
2018-03-12 00:52:00 -07:00
-----------
2019-08-28 17:54:15 -07:00
Execute Python functions in parallel.
.. code-block :: python
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:
.. code-block :: python
import ray
ray.init()
@ray.remote
2019-10-10 19:09:25 -07:00
class Counter(object):
2019-08-28 17:54:15 -07:00
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 <https://github.com/ray-project/ray/blob/master/python/ray/autoscaler/aws/example-full.yaml> `__ , and run:
`` ray submit [CLUSTER.YAML] example.py --start ``
2020-11-10 10:53:28 -08:00
Read more about `launching clusters <https://docs.ray.io/en/master/cluster/index.html> `_ .
2019-08-28 17:54:15 -07:00
Tune Quick Start
----------------
.. image :: https://github.com/ray-project/ray/raw/master/doc/source/images/tune-wide.png
`Tune`_ is a library for hyperparameter tuning at any scale.
- Launch a multi-node distributed hyperparameter sweep in less than 10 lines of code.
2020-07-20 14:30:01 -04:00
- Supports any deep learning framework, including PyTorch, `PyTorch Lightning <https://github.com/williamFalcon/pytorch-lightning> `_ , TensorFlow, and Keras.
2021-02-18 19:48:51 -08:00
- Visualize results with `TensorBoard <https://www.tensorflow.org/tensorboard> `__ .
2019-08-28 17:54:15 -07:00
- Choose among scalable SOTA algorithms such as `Population Based Training (PBT)`_ , `Vizier's Median Stopping Rule`_ , `HyperBand/ASHA`_ .
- Tune integrates with many optimization libraries such as `Facebook Ax <http://ax.dev> `_ , `HyperOpt <https://github.com/hyperopt/hyperopt> `_ , and `Bayesian Optimization <https://github.com/fmfn/BayesianOptimization> `_ and enables you to scale them transparently.
To run this example, you will need to install the following:
.. code-block :: bash
2020-10-12 01:12:18 -04:00
$ pip install "ray[tune]"
2019-08-28 17:54:15 -07:00
2020-07-09 12:37:24 -07:00
This example runs a parallel grid search to optimize an example objective function.
2019-08-28 17:54:15 -07:00
.. code-block :: python
from ray import tune
2020-07-09 12:37:24 -07:00
def objective(step, alpha, beta):
return (0.1 + alpha * step / 100)* *(-1) + beta * 0.1
def training_function(config):
# Hyperparameters
alpha, beta = config["alpha"], config["beta"]
for step in range(10):
# Iterative training function - can be any arbitrary training procedure.
intermediate_score = objective(step, alpha, beta)
# Feed the score back back to Tune.
tune.report(mean_loss=intermediate_score)
2019-08-28 17:54:15 -07:00
analysis = tune.run(
2020-07-09 12:37:24 -07:00
training_function,
config={
"alpha": tune.grid_search([0.001, 0.01, 0.1]),
"beta": tune.choice([1, 2, 3])
})
2019-08-28 17:54:15 -07:00
2021-02-11 05:41:45 +09:00
print("Best config: ", analysis.get_best_config(metric="mean_loss", mode="min"))
2019-08-28 17:54:15 -07:00
# Get a dataframe for analyzing trial results.
2020-09-09 05:00:52 +01:00
df = analysis.results_df
2019-08-28 17:54:15 -07:00
If TensorBoard is installed, automatically visualize all trial results:
.. code-block :: bash
tensorboard --logdir ~/ray_results
2020-11-10 10:53:28 -08:00
.. _`Tune`: https://docs.ray.io/en/master/tune.html
.. _`Population Based Training (PBT)`: https://docs.ray.io/en/master/tune-schedulers.html#population-based-training-pbt
.. _`Vizier's Median Stopping Rule`: https://docs.ray.io/en/master/tune-schedulers.html#median-stopping-rule
.. _`HyperBand/ASHA`: https://docs.ray.io/en/master/tune-schedulers.html#asynchronous-hyperband
2019-08-28 17:54:15 -07:00
RLlib Quick Start
-----------------
2019-09-07 11:50:18 -07:00
.. image :: https://github.com/ray-project/ray/raw/master/doc/source/images/rllib-wide.jpg
2019-08-29 16:02:16 -07:00
2019-08-28 17:54:15 -07:00
`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.
.. code-block :: bash
pip install tensorflow # or tensorflow-gpu
2020-12-10 17:23:11 -05:00
pip install "ray[rllib]"
2019-08-28 17:54:15 -07:00
.. code-block :: python
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, ))
2017-12-06 18:17:51 -08:00
2019-08-28 17:54:15 -07:00
def reset(self):
self.cur_pos = 0
return [self.cur_pos]
2017-12-06 18:17:51 -08:00
2019-08-28 17:54:15 -07:00
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, {}
2017-03-17 16:48:25 -07:00
2019-08-28 17:54:15 -07:00
tune.run(
"PPO",
config={
"env": SimpleCorridor,
"num_workers": 4,
"env_config": {"corridor_length": 5}})
2018-03-12 00:52:00 -07:00
2020-11-10 10:53:28 -08:00
.. _`RLlib`: https://docs.ray.io/en/master/rllib.html
2017-09-30 15:37:28 -07:00
2020-07-24 14:53:21 -07:00
Ray Serve Quick Start
---------------------
.. image :: https://raw.githubusercontent.com/ray-project/ray/master/doc/source/serve/logo.svg
:width: 400
`Ray Serve`_ is a scalable model-serving library built on Ray. It is:
2020-09-24 18:09:51 -07:00
- Framework Agnostic: Use the same toolkit to serve everything from deep
learning models built with frameworks like PyTorch or Tensorflow & Keras
2020-07-24 14:53:21 -07:00
to Scikit-Learn models or arbitrary business logic.
2021-06-10 16:23:38 -07:00
- Python First: Configure your model serving declaratively in pure Python,
without needing YAMLs or JSON configs.
2020-07-24 14:53:21 -07:00
- Performance Oriented: Turn on batching, pipelining, and GPU acceleration to
increase the throughput of your model.
- Composition Native: Allow you to create "model pipelines" by composing multiple
models together to drive a single prediction.
- Horizontally Scalable: Serve can linearly scale as you add more machines. Enable
your ML-powered service to handle growing traffic.
To run this example, you will need to install the following:
.. code-block :: bash
$ pip install scikit-learn
$ pip install "ray[serve]"
This example runs serves a scikit-learn gradient boosting classifier.
.. code-block :: python
from ray import serve
import pickle
import requests
from sklearn.datasets import load_iris
from sklearn.ensemble import GradientBoostingClassifier
# Train model
iris_dataset = load_iris()
model = GradientBoostingClassifier()
model.fit(iris_dataset["data"], iris_dataset["target"])
# Define Ray Serve model,
class BoostingModel:
def __init__(self):
self.model = model
self.label_list = iris_dataset["target_names"].tolist()
def __call__(self, flask_request):
payload = flask_request.json["vector"]
print("Worker: received flask request with data", payload)
prediction = self.model.predict([payload])[0]
human_name = self.label_list[prediction]
return {"result": human_name}
# Deploy model
2020-11-13 16:05:00 -06:00
client = serve.start()
client.create_backend("iris:v1", BoostingModel)
client.create_endpoint("iris_classifier", backend="iris:v1", route="/iris")
2020-07-24 14:53:21 -07:00
# Query it!
sample_request_input = {"vector": [1.2, 1.0, 1.1, 0.9]}
response = requests.get("http://localhost:8000/iris", json=sample_request_input)
print(response.text)
# Result:
# {
# "result": "versicolor"
# }
2020-11-10 10:53:28 -08:00
.. _`Ray Serve`: https://docs.ray.io/en/master/serve/index.html
2020-07-24 14:53:21 -07:00
2017-08-27 19:55:39 -07:00
More Information
----------------
2020-03-23 08:46:56 -07:00
- `Documentation`_
2017-09-30 15:37:28 -07:00
- `Tutorial`_
2017-08-27 19:55:39 -07:00
- `Blog`_
2020-09-01 09:48:35 -07:00
- `Ray 1.0 Architecture whitepaper`_ **(new)**
2020-11-13 14:16:51 -08:00
- `Ray Design Patterns`_ **(new)**
2019-08-28 17:54:15 -07:00
- `RLlib paper`_
2021-03-01 20:11:40 -08:00
- `RLlib flow paper`_
2019-08-28 17:54:15 -07:00
- `Tune paper`_
2017-08-27 19:55:39 -07:00
2020-09-01 09:48:35 -07:00
*Older documents:*
- `Ray paper`_
- `Ray HotOS paper`_
2020-11-10 10:53:28 -08:00
.. _`Documentation`: http://docs.ray.io/en/master/index.html
2017-09-30 15:37:28 -07:00
.. _`Tutorial`: https://github.com/ray-project/tutorial
2020-09-01 09:48:35 -07:00
.. _`Blog`: https://medium.com/distributed-computing-with-ray
.. _`Ray 1.0 Architecture whitepaper`: https://docs.google.com/document/d/1lAy0Owi-vPz2jEqBSaHNQcy2IBSDEHyXNOQZlGuj93c/preview
2020-11-13 14:16:51 -08:00
.. _`Ray Design Patterns`: https://docs.google.com/document/d/167rnnDFIVRhHhK4mznEIemOtj63IOhtIPvSYaPgI4Fg/edit
2018-01-02 16:33:07 -08:00
.. _`Ray paper`: https://arxiv.org/abs/1712.05889
2017-09-30 15:37:28 -07:00
.. _`Ray HotOS paper`: https://arxiv.org/abs/1703.03924
2019-08-28 17:54:15 -07:00
.. _`RLlib paper`: https://arxiv.org/abs/1712.09381
2021-03-01 20:11:40 -08:00
.. _`RLlib flow paper`: https://arxiv.org/abs/2011.12719
2019-08-28 17:54:15 -07:00
.. _`Tune paper`: https://arxiv.org/abs/1807.05118
2017-10-03 10:23:47 -07:00
Getting Involved
----------------
2020-12-09 12:43:45 -08:00
- `Forum`_ : For discussions about development, questions about usage, and feature requests.
2020-10-05 19:39:23 -07:00
- `GitHub Issues`_ : For reporting bugs.
2019-09-16 20:26:03 -07:00
- `Twitter`_ : Follow updates on Twitter.
2021-08-13 13:25:51 -07:00
- `Slack`_ : Join our Slack channel.
2020-09-24 18:09:51 -07:00
- `Meetup Group`_ : Join our meetup group.
- `StackOverflow`_ : For questions about how to use Ray.
2017-10-03 10:23:47 -07:00
2020-12-09 12:43:45 -08:00
.. _`Forum`: https://discuss.ray.io/
2019-01-23 13:30:02 -08:00
.. _`GitHub Issues`: https://github.com/ray-project/ray/issues
.. _`StackOverflow`: https://stackoverflow.com/questions/tagged/ray
2019-09-16 20:26:03 -07:00
.. _`Meetup Group`: https://www.meetup.com/Bay-Area-Ray-Meetup/
.. _`Twitter`: https://twitter.com/raydistributed
2021-08-13 13:25:51 -07:00
.. _`Slack`: https://forms.gle/9TSdDYUgxYs8SA9e8