mirror of
https://github.com/vale981/ray
synced 2025-03-08 19:41:38 -05:00

This PR makes a number of major overhauls to the Ray core docs: Add a key-concepts section for {Tasks, Actors, Objects, Placement Groups, Env Deps}. Re-org the user guide to align with key concepts. Rewrite the walkthrough to link to mini-walkthroughs in the key concept sections. Minor tweaks and additional transition material.
108 lines
3.2 KiB
ReStructuredText
108 lines
3.2 KiB
ReStructuredText
.. _resource-requirements:
|
|
|
|
Specifying Required Resources
|
|
=============================
|
|
|
|
Oftentimes, you may want to specify a task's resource requirements (for example
|
|
one task may require a GPU). Ray will automatically
|
|
detect the available GPUs and CPUs on the machine. However, you can override
|
|
this default behavior by passing in specific resources.
|
|
|
|
.. tabbed:: Python
|
|
|
|
.. code-block:: python
|
|
|
|
ray.init(num_cpus=8, num_gpus=4, resources={'Custom': 2})
|
|
|
|
.. tabbed:: Java
|
|
|
|
Set Java system property: ``-Dray.resources=CPU:8,GPU:4,Custom:2``.
|
|
|
|
|
|
.. tabbed:: C++
|
|
|
|
.. code-block:: c++
|
|
|
|
RayConfig config;
|
|
config.num_cpus = 8;
|
|
config.num_gpus = 4;
|
|
config.resources = {{"Custom", 2}};
|
|
ray::Init(config);
|
|
|
|
Ray also allows specifying a task's resources requirements (e.g., CPU, GPU, and custom resources).
|
|
The task will only run on a machine if there are enough resources
|
|
available to execute the task.
|
|
|
|
.. tabbed:: Python
|
|
|
|
.. code-block:: python
|
|
|
|
# Specify required resources.
|
|
@ray.remote(num_cpus=4, num_gpus=2)
|
|
def my_function():
|
|
return 1
|
|
|
|
.. tabbed:: Java
|
|
|
|
.. code-block:: java
|
|
|
|
// Specify required resources.
|
|
Ray.task(MyRayApp::myFunction).setResource("CPU", 1.0).setResource("GPU", 4.0).remote();
|
|
|
|
.. tabbed:: C++
|
|
|
|
.. code-block:: c++
|
|
|
|
// Specify required resources.
|
|
ray::Task(MyFunction).SetResource("CPU", 1.0).SetResource("GPU", 4.0).Remote();
|
|
|
|
.. note::
|
|
|
|
* If you do not specify any resources, the default is 1 CPU resource and
|
|
no other resources.
|
|
* If specifying CPUs, Ray does not enforce isolation (i.e., your task is
|
|
expected to honor its request).
|
|
* If specifying GPUs, Ray does provide isolation in forms of visible devices
|
|
(setting the environment variable ``CUDA_VISIBLE_DEVICES``), but it is the
|
|
task's responsibility to actually use the GPUs (e.g., through a deep
|
|
learning framework like TensorFlow or PyTorch).
|
|
|
|
The resource requirements of a task have implications for the Ray's scheduling
|
|
concurrency. In particular, the sum of the resource requirements of all of the
|
|
concurrently executing tasks on a given node cannot exceed the node's total
|
|
resources.
|
|
|
|
Below are more examples of resource specifications:
|
|
|
|
.. tabbed:: Python
|
|
|
|
.. code-block:: python
|
|
|
|
# Ray also supports fractional resource requirements.
|
|
@ray.remote(num_gpus=0.5)
|
|
def h():
|
|
return 1
|
|
|
|
# Ray support custom resources too.
|
|
@ray.remote(resources={'Custom': 1})
|
|
def f():
|
|
return 1
|
|
|
|
.. tabbed:: Java
|
|
|
|
.. code-block:: java
|
|
|
|
// Ray aslo supports fractional and custom resources.
|
|
Ray.task(MyRayApp::myFunction).setResource("GPU", 0.5).setResource("Custom", 1.0).remote();
|
|
|
|
.. tabbed:: C++
|
|
|
|
.. code-block:: c++
|
|
|
|
// Ray aslo supports fractional and custom resources.
|
|
ray::Task(MyFunction).SetResource("GPU", 0.5).SetResource("Custom", 1.0).Remote();
|
|
|
|
.. tip::
|
|
|
|
Besides compute resources, you can also specify an environment for a task to run in,
|
|
which can include Python packages, local files, environment variables, and more---see :ref:`Runtime Environments <runtime-environments>` for details.
|