From 9900e5e7893ee3c90f7ebae0194b066a1bf06649 Mon Sep 17 00:00:00 2001 From: Scott Lee Date: Mon, 23 Sep 2024 17:58:46 -0700 Subject: [PATCH 1/5] add progress bar docs section Signed-off-by: Scott Lee --- .../data/images/dataset-progress-bar.svg | 1 + doc/source/data/monitoring-your-workload.rst | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 doc/source/data/images/dataset-progress-bar.svg diff --git a/doc/source/data/images/dataset-progress-bar.svg b/doc/source/data/images/dataset-progress-bar.svg new file mode 100644 index 000000000000..bc49a8d67639 --- /dev/null +++ b/doc/source/data/images/dataset-progress-bar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/doc/source/data/monitoring-your-workload.rst b/doc/source/data/monitoring-your-workload.rst index b79e920eb1aa..bca5d45b9e44 100644 --- a/doc/source/data/monitoring-your-workload.rst +++ b/doc/source/data/monitoring-your-workload.rst @@ -5,10 +5,39 @@ Monitoring Your Workload This section helps you debug and monitor the execution of your :class:`~ray.data.Dataset` by viewing the: +* :ref:`Ray Data progress bars ` * :ref:`Ray Data dashboard ` * :ref:`Ray Data logs ` * :ref:`Ray Data stats ` +.. _ray-data-progress-bars: + +Ray Data progress bars +---------------------- + +When you execute a :class:`~ray.data.Dataset`, Ray Data displays a set of progress bars in the console. These progress bars show various execution and progress-related metrics, including the number of rows completed/remaining, resource usage, and task/actor status. See the annotated image for a breakdown of how to interpret the progress bar outputs: + +.. image:: images/dataset-progress-bar.svg + + +Some additional notes on progress bars: + +* The progress bars are updated every second; resource usage, metrics, and task/actor status may take up to 5 seconds to update. +* When the tasks section contains the label `[backpressure]`, it indicates that the operator is *backpressured*, meaning that the operator will not submit more tasks until the downstream operator is ready to accept more data. +* The global resource usage is the sum of resources used by all operators, active and requested (includes pending scheduling and pending node assignment). + +Configuring the progress bar +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Depending on your use case, you may not be interested in the full progress bar output, or wish to disable it altogether. Ray Data provides several ways to accomplish this: + +* Disabling operator-level progress bars: Set `DataContext.get_current().enable_operator_progress_bars = False`. This only shows the global progress bar, and omits operator-level progress bars. +* Disabling all progress bars: Set `DataContext.get_current().enable_progress_bars = False`. This disables all progress bars from Ray Data related to dataset execution. +* Disabling `ray_tqdm`: Set `DataContext.get_current().use_ray_tqdm = False`. This configures Ray Data to use the base `tqdm` library instead of the custom distributed `tqdm` implementation, which could be useful when debugging logging issues in a distributed setting. + +For operator names longer than a threshold of 100 characters, Ray Data truncates the names by default. + +* To disable this behavior and show the full operator name, set `DataContext.get_current().enable_progress_bar_name_truncation = False`. +* To change the threshold of truncating the name, update the constant `ray.data._internal.progress_bar.ProgressBar.MAX_NAME_LENGTH = 42`. .. _ray-data-dashboard: From 34c75453e4855d84317bf2dfb1b0dfa39d5627cb Mon Sep 17 00:00:00 2001 From: Scott Lee Date: Mon, 23 Sep 2024 18:43:59 -0700 Subject: [PATCH 2/5] lint Signed-off-by: Scott Lee --- doc/source/data/monitoring-your-workload.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/data/monitoring-your-workload.rst b/doc/source/data/monitoring-your-workload.rst index bca5d45b9e44..b432d11415d8 100644 --- a/doc/source/data/monitoring-your-workload.rst +++ b/doc/source/data/monitoring-your-workload.rst @@ -23,18 +23,18 @@ When you execute a :class:`~ray.data.Dataset`, Ray Data displays a set of progre Some additional notes on progress bars: * The progress bars are updated every second; resource usage, metrics, and task/actor status may take up to 5 seconds to update. -* When the tasks section contains the label `[backpressure]`, it indicates that the operator is *backpressured*, meaning that the operator will not submit more tasks until the downstream operator is ready to accept more data. +* When the tasks section contains the label `[backpressure]`, it indicates that the operator is *backpressured*, meaning that the operator won't submit more tasks until the downstream operator is ready to accept more data. * The global resource usage is the sum of resources used by all operators, active and requested (includes pending scheduling and pending node assignment). Configuring the progress bar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Depending on your use case, you may not be interested in the full progress bar output, or wish to disable it altogether. Ray Data provides several ways to accomplish this: +Depending on your use case, you may not be interested in the full progress bar output, or wish to turn them off altogether. Ray Data provides several ways to accomplish this: * Disabling operator-level progress bars: Set `DataContext.get_current().enable_operator_progress_bars = False`. This only shows the global progress bar, and omits operator-level progress bars. * Disabling all progress bars: Set `DataContext.get_current().enable_progress_bars = False`. This disables all progress bars from Ray Data related to dataset execution. * Disabling `ray_tqdm`: Set `DataContext.get_current().use_ray_tqdm = False`. This configures Ray Data to use the base `tqdm` library instead of the custom distributed `tqdm` implementation, which could be useful when debugging logging issues in a distributed setting. -For operator names longer than a threshold of 100 characters, Ray Data truncates the names by default. +For operator names longer than a threshold of 100 characters, Ray Data truncates the names by default, to prevent the case when the operator names are long and the progress bar is too wide to fit on the screen. * To disable this behavior and show the full operator name, set `DataContext.get_current().enable_progress_bar_name_truncation = False`. * To change the threshold of truncating the name, update the constant `ray.data._internal.progress_bar.ProgressBar.MAX_NAME_LENGTH = 42`. From b3ad680dd9c4fb7dcf83575cc427928bcbe01c7d Mon Sep 17 00:00:00 2001 From: Scott Lee Date: Mon, 23 Sep 2024 19:41:09 -0700 Subject: [PATCH 3/5] lint Signed-off-by: Scott Lee --- doc/source/data/monitoring-your-workload.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/data/monitoring-your-workload.rst b/doc/source/data/monitoring-your-workload.rst index b432d11415d8..2e601f6f2d3b 100644 --- a/doc/source/data/monitoring-your-workload.rst +++ b/doc/source/data/monitoring-your-workload.rst @@ -36,7 +36,7 @@ Depending on your use case, you may not be interested in the full progress bar o For operator names longer than a threshold of 100 characters, Ray Data truncates the names by default, to prevent the case when the operator names are long and the progress bar is too wide to fit on the screen. -* To disable this behavior and show the full operator name, set `DataContext.get_current().enable_progress_bar_name_truncation = False`. +* To turn off this behavior and show the full operator name, set `DataContext.get_current().enable_progress_bar_name_truncation = False`. * To change the threshold of truncating the name, update the constant `ray.data._internal.progress_bar.ProgressBar.MAX_NAME_LENGTH = 42`. .. _ray-data-dashboard: From c48134ac8172c23f86bc3c7ea062ff999dcdd6bd Mon Sep 17 00:00:00 2001 From: Scott Lee Date: Tue, 24 Sep 2024 15:50:09 -0700 Subject: [PATCH 4/5] remove whitespace Signed-off-by: Scott Lee --- doc/source/data/images/dataset-progress-bar.png | Bin 0 -> 60454 bytes doc/source/data/images/dataset-progress-bar.svg | 1 - doc/source/data/monitoring-your-workload.rst | 2 +- 3 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 doc/source/data/images/dataset-progress-bar.png delete mode 100644 doc/source/data/images/dataset-progress-bar.svg diff --git a/doc/source/data/images/dataset-progress-bar.png b/doc/source/data/images/dataset-progress-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..ab19dd5d79f35110407d669f8a5a3759bf81afae GIT binary patch literal 60454 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 MRkW4sp4y=Q5A*CLPXGV_ literal 0 HcmV?d00001 diff --git a/doc/source/data/images/dataset-progress-bar.svg b/doc/source/data/images/dataset-progress-bar.svg deleted file mode 100644 index bc49a8d67639..000000000000 --- a/doc/source/data/images/dataset-progress-bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/doc/source/data/monitoring-your-workload.rst b/doc/source/data/monitoring-your-workload.rst index 2e601f6f2d3b..571825837973 100644 --- a/doc/source/data/monitoring-your-workload.rst +++ b/doc/source/data/monitoring-your-workload.rst @@ -17,7 +17,7 @@ Ray Data progress bars When you execute a :class:`~ray.data.Dataset`, Ray Data displays a set of progress bars in the console. These progress bars show various execution and progress-related metrics, including the number of rows completed/remaining, resource usage, and task/actor status. See the annotated image for a breakdown of how to interpret the progress bar outputs: -.. image:: images/dataset-progress-bar.svg +.. image:: images/dataset-progress-bar.png Some additional notes on progress bars: From ec375d0d555d129b61c1e95673f594ebbff93756 Mon Sep 17 00:00:00 2001 From: Scott Lee Date: Tue, 24 Sep 2024 15:54:36 -0700 Subject: [PATCH 5/5] center image Signed-off-by: Scott Lee --- doc/source/data/monitoring-your-workload.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/data/monitoring-your-workload.rst b/doc/source/data/monitoring-your-workload.rst index 571825837973..a9a5e3aaec65 100644 --- a/doc/source/data/monitoring-your-workload.rst +++ b/doc/source/data/monitoring-your-workload.rst @@ -18,6 +18,7 @@ Ray Data progress bars When you execute a :class:`~ray.data.Dataset`, Ray Data displays a set of progress bars in the console. These progress bars show various execution and progress-related metrics, including the number of rows completed/remaining, resource usage, and task/actor status. See the annotated image for a breakdown of how to interpret the progress bar outputs: .. image:: images/dataset-progress-bar.png + :align: center Some additional notes on progress bars: