ray/doc/source/starting-ray.rst

201 lines
6.1 KiB
ReStructuredText
Raw Normal View History

Starting Ray
============
This page covers how to start Ray on your single machine or cluster of machines.
.. tip:: Be sure to have :ref:`installed Ray <installation>` before following the instructions on this page.
2020-09-05 10:15:52 +08:00
What is the Ray runtime?
------------------------
2020-09-05 10:15:52 +08:00
Ray programs are able to parallelize and distribute by leveraging an underlying *Ray runtime*.
The Ray runtime consists of multiple services/processes started in the background for communication, data transfer, scheduling, and more. The Ray runtime can be started on a laptop, a single server, or multiple servers.
2020-09-05 10:15:52 +08:00
There are three ways of starting the Ray runtime:
2020-09-05 10:15:52 +08:00
* Implicitly via ``ray.init()`` (:ref:`start-ray-init`)
* Explicitly via CLI (:ref:`start-ray-cli`)
* Explicitly via the cluster launcher (:ref:`start-ray-up`)
2020-09-05 10:15:52 +08:00
.. _start-ray-init:
2020-09-05 10:15:52 +08:00
Starting Ray on a single machine
--------------------------------
Calling ``ray.init()`` (without any ``address`` args) starts a Ray runtime on your laptop/machine. This laptop/machine becomes the "head node".
You must initialize Ray before any tasks or actors are called.
2020-09-05 10:15:52 +08:00
.. tabs::
.. code-tab:: python
import ray
# Other Ray APIs will not work until `ray.init()` is called.
ray.init()
.. code-tab:: java
import io.ray.api.Ray;
public class MyRayApp {
public static void main(String[] args) {
// Other Ray APIs will not work until `Ray.init()` is called.
Ray.init();
...
}
}
When the process calling ``ray.init()`` terminates, the Ray runtime will also terminate. To explicitly stop or restart Ray, use the shutdown API.
2020-09-05 10:15:52 +08:00
.. tabs::
.. code-tab:: python
import ray
ray.init()
... # ray program
ray.shutdown()
.. code-tab:: java
import io.ray.api.Ray;
2020-09-05 10:15:52 +08:00
public class MyRayApp {
2020-09-05 10:15:52 +08:00
public static void main(String[] args) {
Ray.init();
... // ray program
Ray.shutdown();
}
}
2020-09-05 10:15:52 +08:00
.. tabs::
.. group-tab:: Python
2020-09-05 10:15:52 +08:00
To check if Ray is initialized, you can call ``ray.is_initialized()``:
2020-09-05 10:15:52 +08:00
.. code-block:: python
2020-09-05 10:15:52 +08:00
import ray
ray.init()
assert ray.is_initialized() == True
2020-09-05 10:15:52 +08:00
ray.shutdown()
assert ray.is_initialized() == False
2020-09-05 10:15:52 +08:00
.. group-tab:: Java
2020-09-05 10:15:52 +08:00
To check if Ray is initialized, you can call ``Ray.isInitialized()``:
2020-09-05 10:15:52 +08:00
.. code-block:: java
import io.ray.api.Ray;
public class MyRayApp {
public static void main(String[] args) {
Ray.init();
Assert.assertTrue(Ray.isInitialized());
Ray.shutdown();
Assert.assertFalse(Ray.isInitialized());
}
}
See the `Configuration <configure.html>`__ documentation for the various ways to configure Ray.
.. _start-ray-cli:
2020-09-05 10:15:52 +08:00
Starting Ray via the CLI (``ray start``)
----------------------------------------
2020-09-05 10:15:52 +08:00
Use ``ray start`` from the CLI to start a 1 node ray runtime on a machine. This machine becomes the "head node".
.. code-block:: bash
2020-09-05 10:15:52 +08:00
$ ray start --head --port=6379
2020-09-05 10:15:52 +08:00
Local node IP: 192.123.1.123
2020-09-20 10:38:54,193 INFO services.py:1166 -- View the Ray dashboard at http://localhost:8265
2020-09-05 10:15:52 +08:00
--------------------
Ray runtime started.
--------------------
...
.. tabs::
.. group-tab:: python
You can connect to this Ray runtime by starting a Python process that calls the following on the same node as where you ran ``ray start``:
.. code-block:: python
2020-09-05 10:15:52 +08:00
# This must
import ray
ray.init(address='auto')
2020-09-05 10:15:52 +08:00
.. group-tab:: java
2020-09-05 10:15:52 +08:00
If you want to run Java code, you need to specify the classpath via the ``--code-search-path`` option. See :ref:`code_search_path` for more details.
.. code-block:: bash
$ ray start ... --code-search-path=/path/to/jars
You can connect other nodes to the head node, creating a Ray cluster by also calling ``ray start`` on those nodes. See :ref:`manual-cluster` for more details. Calling ``ray.init(address="auto")`` on any of the cluster machines will connect to the ray cluster.
.. _start-ray-up:
Launching a Ray cluster (``ray up``)
------------------------------------
Ray clusters can be launched with the :ref:`Cluster Launcher <ref-automatic-cluster>`.
The ``ray up`` command uses the Ray cluster launcher to start a cluster on the cloud, creating a designated "head node" and worker nodes. Underneath the hood, it automatically calls ``ray start`` to create a Ray cluster.
Your code **only** needs to execute on one machine in the cluster (usually the head node). Read more about :ref:`running programs on a Ray cluster <using-ray-on-a-cluster>`.
To connect to the existing cluster, similar to the method outlined in :ref:`start-ray-cli`, you must call ``ray.init`` and specify the address of the Ray cluster when initializing Ray in your code. This allows Ray to connect to the cluster.
.. code-block:: python
ray.init(address="auto")
Note that the machine calling ``ray up`` will not be considered as part of the Ray cluster, and therefore calling ``ray.init`` on that same machine will not attach to the cluster.
.. _local_mode:
2020-09-05 10:15:52 +08:00
Local mode
----------
.. caution:: This feature is maintained solely to help with debugging, so it's possible you may encounter some issues. If you do, please `file an issue <https://github.com/ray-project/ray/issues>`_.
2020-09-05 10:15:52 +08:00
By default, Ray will parallelize its workload and run tasks on multiple processes and multiple nodes. However, if you need to debug your Ray program, it may be easier to do everything on a single process. You can force all Ray functions to occur on a single process by enabling local mode as the following:
.. tabs::
2020-09-05 10:15:52 +08:00
.. code-tab:: python
ray.init(local_mode=True)
2020-09-05 10:15:52 +08:00
.. group-tab:: Java
.. code-block:: bash
java -classpath <classpath> \
-Dray.local-mode=true \
<classname> <args>
.. note:: If you just want to run your Java code in local mode, you can run it without Ray or even Python installed.
Note that there are some known issues with local mode. Please read :ref:`these tips <local-mode-tips>` for more information.
2020-09-05 10:15:52 +08:00
What's next?
------------
Check out our `Deployment section <cluster-index.html>`_ for more information on deploying Ray in different settings, including Kubernetes, YARN, and SLURM.