diff --git a/mkdocs/docs/examples/training/axolotl.md b/mkdocs/docs/examples/training/axolotl.md
index 5d59e5802..5dd2cae0f 100644
--- a/mkdocs/docs/examples/training/axolotl.md
+++ b/mkdocs/docs/examples/training/axolotl.md
@@ -84,13 +84,13 @@ Provisioning...
## Distributed training
!!! info "Prerequisites"
- Before running a distributed task, make sure to create a fleet with `placement` set to `cluster` (can be a [managed fleet](../../concepts/fleets.md#cluster-placement) or an [SSH fleet](../../concepts/fleets.md#ssh-placement)).
+ Before running a multi-node task, make sure to create a fleet with `placement` set to `cluster` (can be a [managed fleet](../../concepts/fleets.md#cluster-placement) or an [SSH fleet](../../concepts/fleets.md#ssh-placement)).
This section walks through running distributed fine-tuning of `Llama-3.1-70B` with QLoRA and FSDP across multiple nodes.
### Define a configuration
-Once the fleet is created, define a distributed task configuration. Here's an example of a distributed `QLoRA` task using `FSDP`.
+Once the fleet is created, define a multi-node task configuration. Here's an example of a multi-node `QLoRA` task using `FSDP`.
diff --git a/mkdocs/docs/examples/training/miles.md b/mkdocs/docs/examples/training/miles.md
index 7ff038e25..9ec3bbda0 100644
--- a/mkdocs/docs/examples/training/miles.md
+++ b/mkdocs/docs/examples/training/miles.md
@@ -313,7 +313,7 @@ Using Ray via `dstack` gives you access to the Ray ecosystem while benefiting
from `dstack`'s provisioning capabilities.
!!! info "What's next"
- 1. Read about [distributed tasks](../../concepts/tasks.md#distributed-tasks)
+ 1. Read about [multi-node tasks](../../concepts/tasks.md#nodes)
and [fleets](../../concepts/fleets.md)
2. See the [SGLang inference](../inference/sglang.md) example
3. Browse Miles' [examples](https://github.com/radixark/miles/tree/main/examples)
diff --git a/mkdocs/docs/examples/training/ray-ragen.md b/mkdocs/docs/examples/training/ray-ragen.md
index d1119b36f..9df779e1c 100644
--- a/mkdocs/docs/examples/training/ray-ragen.md
+++ b/mkdocs/docs/examples/training/ray-ragen.md
@@ -11,7 +11,7 @@ to fine-tune an agent on multiple nodes.
Under the hood `RAGEN` uses [verl](https://github.com/volcengine/verl) for Reinforcement Learning and [Ray](https://docs.ray.io/en/latest/) for distributed training.
!!! info "Prerequisites"
- Before running a distributed task, make sure to create a fleet with `placement` set to `cluster` (can be a [managed fleet](../../concepts/fleets.md#cluster-placement) or an [SSH fleet](../../concepts/fleets.md#ssh-placement)).
+ Before running a multi-node task, make sure to create a fleet with `placement` set to `cluster` (can be a [managed fleet](../../concepts/fleets.md#cluster-placement) or an [SSH fleet](../../concepts/fleets.md#ssh-placement)).
## Run a Ray cluster
@@ -143,5 +143,5 @@ $ ray job submit \
Using Ray via `dstack` is a powerful way to get access to the rich Ray ecosystem while benefiting from `dstack`'s provisioning capabilities.
!!! info "What's next"
- 1. Read about [distributed tasks](../../concepts/tasks.md#distributed-tasks), [fleets](../../concepts/fleets.md), and [cluster placement](../../concepts/fleets.md#cluster-placement)
+ 1. Read about [multi-node tasks](../../concepts/tasks.md#nodes), [fleets](../../concepts/fleets.md), and [cluster placement](../../concepts/fleets.md#cluster-placement)
2. Browse Ray's [docs](https://docs.ray.io/en/latest/train/examples.html) for other examples.
diff --git a/mkdocs/docs/examples/training/trl.md b/mkdocs/docs/examples/training/trl.md
index e75a4d89b..11a819a1a 100644
--- a/mkdocs/docs/examples/training/trl.md
+++ b/mkdocs/docs/examples/training/trl.md
@@ -110,11 +110,11 @@ Provisioning...
## Distributed training
!!! info "Prerequisites"
- Before running a distributed task, make sure to create a fleet with `placement` set to `cluster` (can be a [managed fleet](../../concepts/fleets.md#cluster-placement) or an [SSH fleet](../../concepts/fleets.md#ssh-placement)).
+ Before running a multi-node task, make sure to create a fleet with `placement` set to `cluster` (can be a [managed fleet](../../concepts/fleets.md#cluster-placement) or an [SSH fleet](../../concepts/fleets.md#ssh-placement)).
### Define a configuration
-Once the fleet is created, define a distributed task configuration. Here's an example using either FSDP or DeepSpeed ZeRO-3.
+Once the fleet is created, define a multi-node task configuration. Here's an example using either FSDP or DeepSpeed ZeRO-3.
=== "FSDP"
diff --git a/mkdocs/docs/guides/migration/slurm.md b/mkdocs/docs/guides/migration/slurm.md
index 9edf863e9..9a1177045 100644
--- a/mkdocs/docs/guides/migration/slurm.md
+++ b/mkdocs/docs/guides/migration/slurm.md
@@ -139,7 +139,7 @@ Launching `train-model`...
| **Output** | `--output=train-%j.out` (writes files) | `dstack logs` or UI (streams via API) |
| **Working directory** | `--chdir=/path/to/dir` or defaults to submission directory | `working_dir: /path/to/dir` (defaults to image's working directory, typically `/dstack/run`) |
| **Environment variables** | `export VAR` or `--export=ALL,VAR=value` | `env: - VAR` or `--env VAR=value` |
-| **Node exclusivity** | `--exclusive` (entire node) | Automatic if `blocks` is not used or job uses all blocks; required for distributed tasks (`nodes` > 1) |
+| **Node exclusivity** | `--exclusive` (entire node) | Automatic if `blocks` is not used or job uses all blocks; required for multi-node tasks (`nodes` > 1) |
> For multi-node examples, see [Distributed training](#distributed-training) below.
@@ -412,7 +412,7 @@ Slurm explicitly controls both `nodes` and processes/tasks.
| N/A | `DSTACK_MPI_HOSTFILE` | Pre-populated MPI hostfile |
!!! info "Fleets"
- Distributed tasks may run only on a fleet with `placement: cluster` configured. Refer to [Partitions and fleets](#partitions-and-fleets) for configuration details.
+ Multi-node tasks may run only on a fleet with `placement: cluster` configured. Refer to [Partitions and fleets](#partitions-and-fleets) for configuration details.
## Queueing and scheduling
@@ -676,7 +676,7 @@ $ sbatch --partition=gpu train.sh
resources:
gpu: A100:80GB:8
- # Optional: Enables inter-node connectivity; required for distributed tasks
+ # Optional: Enables inter-node connectivity; required for multi-node tasks
placement: cluster
# Optional: Split GPUs into blocks for multi-tenant sharing
@@ -699,7 +699,7 @@ $ sbatch --partition=gpu train.sh
type: fleet
name: on-prem-gpu-fleet
- # Optional: Enables inter-node connectivity; required for distributed tasks
+ # Optional: Enables inter-node connectivity; required for multi-node tasks
placement: cluster
# Optional: Allows to share the instance across up to 8 workloads
@@ -868,7 +868,7 @@ srun python train.py --input=/tmp/input.txt
#### Instance volumes
-Instance volumes mount host directories into containers. With distributed tasks, the host can use a shared filesystem (NFS, Lustre, GPFS) to share data across jobs within the same task:
+Instance volumes mount host directories into containers. With multi-node tasks, the host can use a shared filesystem (NFS, Lustre, GPFS) to share data across jobs within the same task:
@@ -936,9 +936,9 @@ resources:
-Network volumes cannot be used with distributed tasks (no multi-attach support), except where multi-attach is supported (Runpod) or via volume interpolation.
+Network volumes cannot be used with multi-node tasks (no multi-attach support), except where multi-attach is supported (Runpod) or via volume interpolation.
-For distributed tasks, use interpolation to attach different volumes to each node.
+For multi-node tasks, use interpolation to attach different volumes to each node.
@@ -1643,7 +1643,7 @@ retry:
-For distributed tasks, if any job fails and retry is enabled, all jobs are stopped and the run is resubmitted (all-or-nothing).
+For multi-node tasks, if any job fails and retry is enabled, all jobs are stopped and the run is resubmitted (all-or-nothing).
Unlike Slurm, `dstack` does not support graceful shutdown signals. Applications must implement proactive checkpointing (periodic saves) and check for existing checkpoints on startup to resume after retries.
diff --git a/mkdocs/docs/guides/tenant-isolation.md b/mkdocs/docs/guides/tenant-isolation.md
index 10d200eb5..a55fe1f2f 100644
--- a/mkdocs/docs/guides/tenant-isolation.md
+++ b/mkdocs/docs/guides/tenant-isolation.md
@@ -50,7 +50,7 @@ You can disallow instance volumes or restrict access to certain paths by writing
## Host network access
-By default, most `dstack` jobs run in host networking mode. This allows them to listen on any host network interface and communicate with other jobs over the internal network, which facilitates workloads such as [distributed tasks](../concepts/tasks.md#distributed-tasks) or [services with routers](../concepts/services.md#pd-disaggregation).
+By default, most `dstack` jobs run in host networking mode. This allows them to listen on any host network interface and communicate with other jobs over the internal network, which facilitates workloads such as [multi-node tasks](../concepts/tasks.md#nodes) or [services with routers](../concepts/services.md#router).
However, exposing the host network to the job also exposes internal `dstack` APIs used to manage containers and SSH authorized keys on the host. If this is not acceptable, bridge networking should be used, which isolates the job from the host network. Bridge networking, however, breaks workloads that do need inter-job communication.
@@ -58,13 +58,13 @@ The `DSTACK_SERVER_JOB_NETWORK_MODE` environment variable controls which jobs ge
| Value | Name | Behavior |
|---|---|---|
-| `1` | `HOST_FOR_MULTINODE_ONLY` | Host for distributed tasks, bridge otherwise |
+| `1` | `HOST_FOR_MULTINODE_ONLY` | Host for multi-node tasks, bridge otherwise |
| `2` | `HOST_WHEN_POSSIBLE` | Host whenever the job occupies a full instance (default) |
-| `3` | `FORCED_BRIDGE` | Always bridge, including distributed tasks |
+| `3` | `FORCED_BRIDGE` | Always bridge, including multi-node tasks |
-### No distributed tasks
+### No multi-node tasks
-If you don't need distributed tasks or other runs with inter-job communication, you can set `DSTACK_SERVER_JOB_NETWORK_MODE=3` when starting the server:
+If you don't need multi-node tasks or other runs with inter-job communication, you can set `DSTACK_SERVER_JOB_NETWORK_MODE=3` when starting the server:
```shell
DSTACK_SERVER_JOB_NETWORK_MODE=3
@@ -72,6 +72,6 @@ DSTACK_SERVER_JOB_NETWORK_MODE=3
This forces bridge networking for all jobs on the server without exception, preventing access to internal `dstack` APIs, as well as communication between jobs.
-### Allow distributed tasks in selected projects
+### Allow multi-node tasks in selected projects
-If you want distributed tasks or other runs with inter-job communication to be available in some projects but not others, use `DSTACK_SERVER_JOB_NETWORK_MODE=1` instead. With this mode, single-node jobs get bridge networking, while distributed tasks still run with host networking. Distributed tasks can then be selectively blocked per project or user by writing a [REST plugin](../reference/plugins/rest/index.md) or a [Python plugin](../reference/plugins/python/index.md).
+If you want multi-node tasks or other runs with inter-job communication to be available in some projects but not others, use `DSTACK_SERVER_JOB_NETWORK_MODE=1` instead. With this mode, single-node jobs get bridge networking, while multi-node tasks still run with host networking. Multi-node tasks can then be selectively blocked per project or user by writing a [REST plugin](../reference/plugins/rest/index.md) or a [Python plugin](../reference/plugins/python/index.md).
diff --git a/mkdocs/docs/guides/troubleshooting.md b/mkdocs/docs/guides/troubleshooting.md
index f74504b30..bcfeeeea0 100644
--- a/mkdocs/docs/guides/troubleshooting.md
+++ b/mkdocs/docs/guides/troubleshooting.md
@@ -133,7 +133,7 @@ one of these features, `dstack` will only select offers from the backends that s
and [Privileged containers](../reference/dstack.yml/dev-environment.md#privileged)
are supported by all backends except `runpod`, `vastai`, and `kubernetes`.
- [Clusters](../concepts/fleets.md#cluster-placement)
- and [distributed tasks](../concepts/tasks.md#distributed-tasks)
+ and [multi-node tasks](../concepts/tasks.md#nodes)
are only supported by the `aws`, `azure`, `gcp`, `nebius`, `oci`, and `vultr` backends,
as well as SSH fleets.
- [Reservations](../reference/dstack.yml/fleet.md#reservation)
diff --git a/mkdocs/docs/guides/upgrade.md b/mkdocs/docs/guides/upgrade.md
index 4cced2d51..7ccd62343 100644
--- a/mkdocs/docs/guides/upgrade.md
+++ b/mkdocs/docs/guides/upgrade.md
@@ -26,7 +26,7 @@ If you call the `dstack` HTTP API directly, note that UTC datetimes are now seri
### Gateway routers
-The top-level `router` property of gateway and run configurations, deprecated in `0.20.17` in favor of [replica-based routers](../concepts/services.md#pd-disaggregation), has been removed. Configurations that use it are no longer accepted, and the behavior of gateways and services created with it before the upgrade is undefined.
+The top-level `router` property of gateway and run configurations, deprecated in `0.20.17` in favor of [replica-based routers](../concepts/services.md#router), has been removed. Configurations that use it are no longer accepted, and the behavior of gateways and services created with it before the upgrade is undefined.
> Terminate services and gateways that use the top-level `router` property before upgrading, then recreate them using replica-based routers.
diff --git a/mkdocs/docs/quickstart.md b/mkdocs/docs/quickstart.md
index d52392ee4..9a9b4a611 100644
--- a/mkdocs/docs/quickstart.md
+++ b/mkdocs/docs/quickstart.md
@@ -152,7 +152,7 @@ description: Quick guide to creating fleets and submitting runs
Open the link to access the dev environment using your desktop IDE. Alternatively, you can access it via `ssh
`.
=== "Task"
- A [task](concepts/tasks.md) allows you to schedule a job or run a web app. Tasks can be distributed and can forward ports.
+ A [task](concepts/tasks.md) allows you to schedule a job or run a web app. Tasks can run on multiple nodes and forward ports.
Create the following run configuration:
@@ -181,8 +181,8 @@ description: Quick guide to creating fleets and submitting runs
- By default, tasks run on a single instance. To run a distributed task, specify
- [`nodes`](concepts/tasks.md#distributed-tasks), and `dstack` will run it on a cluster.
+ By default, tasks run on a single instance. To run a multi-node task, specify
+ [`nodes`](concepts/tasks.md#nodes) or define multiple [node groups](concepts/tasks.md#node-groups), and `dstack` will run it on a cluster.
Run the configuration via `dstack apply`:
@@ -243,6 +243,9 @@ description: Quick guide to creating fleets and submitting runs