Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ It streamlines development, training, and inference, and is compatible with any

## Latest news ✨
- [2026/08] [dstack 0.21.0: Pydantic v2, Gateway replicas](https://github.com/dstackai/dstack/releases/tag/0.21.0)
- [2026/07] [dstack 0.20.29: Presets — agent-driven inference optimization (experimental)](https://dstack.ai/docs/concepts/presets/)
- [2026/07] [dstack 0.20.29: Presets — agent-driven inference optimization](https://dstack.ai/docs/concepts/presets/)
- [2026/07] [dstack 0.20.27: Slurm backend](https://github.com/dstackai/dstack/releases/tag/0.20.27)
- [2026/05] [dstack 0.20.21: Kubernetes multiple clusters](https://github.com/dstackai/dstack/releases/tag/0.20.21)
- [2026/05] [dstack 0.20.20: NVIDIA Dynamo integration](https://github.com/dstackai/dstack/releases/tag/0.20.20)
Expand Down Expand Up @@ -107,7 +107,7 @@ AI agents like Claude, Codex, and Cursor can now create and manage fleets and su
* [Dev environments](https://dstack.ai/docs/concepts/dev-environments) — Launch dev environments to be accessed by agents or from your IDE
* [Tasks](https://dstack.ai/docs/concepts/tasks) — Run training, batch or other jobs across a single node or clusters
* [Services](https://dstack.ai/docs/concepts/services) — Deploy model inference as secure and scalable endpoints
* [Presets](https://dstack.ai/docs/concepts/presets) — Agent-driven inference optimization (experimental)
* [Presets](https://dstack.ai/docs/concepts/presets) — Agent-driven inference optimization
* [Volumes](https://dstack.ai/docs/concepts/volumes) — Managing instance and network volumes for persisting data

Configuration can be defined as YAML files within your repo.
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/pages/Project/Details/Settings/constants.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const CLI_INFO = {
</p>
<p>
To learn how to install the CLI, refer to the{' '}
<a href={'https://dstack.ai/docs/installation#set-up-the-cli'} target="_blank">
<a href={'https://dstack.ai/docs/installation#cli'} target="_blank">
installation
</a>{' '}
guide.
Expand Down
18 changes: 11 additions & 7 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,19 @@ plugins:
"docs/reference/cli/dstack/endpoint.md": "docs/reference/cli/dstack/preset.md"
"docs/examples/llms/llama31.md": "docs/examples/inference/vllm.md"
"docs/examples/llms/llama32.md": "docs/examples/inference/vllm.md"
"docs/examples/llms/qwen36.md": "docs/examples/models/qwen36.md"
"docs/examples/llms/qwen36.md": "docs/examples/inference/sglang.md"
"examples/llms/llama31/index.md": "docs/examples/inference/vllm.md"
"examples/llms/llama32/index.md": "docs/examples/inference/vllm.md"
"examples/llms/qwen36/index.md": "docs/examples/models/qwen36.md"
"examples/llms/qwen36/index.md": "docs/examples/inference/sglang.md"
"docs/examples/deployment/nim/index.md": "docs/examples/inference/nim.md"
"docs/examples/deployment/vllm/index.md": "docs/examples/inference/vllm.md"
"docs/examples/models/qwen36.md": "docs/examples/inference/sglang.md"
"docs/examples/models/deepseek-v4.md": "docs/examples/inference/sglang.md"
"docs/examples/models/wan22/index.md": "docs/examples.md"
"docs/examples/accelerators/intel/index.md": "docs/examples.md"
"docs/examples/llms/deepseek/index.md": "docs/examples/inference/sglang.md"
"docs/examples/llms/llama/index.md": "docs/examples/inference/vllm.md"
"docs/examples/misc/docker-compose/index.md": "docs/concepts/dev-environments.md#docker-in-docker"
"backends.md": "docs/concepts/backends.md"
"blog/monitoring-gpu-usage.md": "blog/posts/dstack-metrics.md"
"blog/inactive-dev-environments-auto-shutdown.md": "blog/posts/inactivity-duration.md"
Expand Down Expand Up @@ -193,8 +200,8 @@ plugins:
"examples/inference/vllm.md": "docs/examples/inference/vllm.md"
"examples/inference/nim.md": "docs/examples/inference/nim.md"
"examples/inference/trtllm.md": "docs/examples/inference/trtllm.md"
"examples/models/deepseek-v4.md": "docs/examples/models/deepseek-v4.md"
"examples/models/qwen36.md": "docs/examples/models/qwen36.md"
"examples/models/deepseek-v4.md": "docs/examples/inference/sglang.md"
"examples/models/qwen36.md": "docs/examples/inference/sglang.md"
"examples/accelerators/amd.md": "docs/examples/accelerators/amd.md"
"examples/accelerators/tpu.md": "docs/examples/accelerators/tpu.md"
"examples/accelerators/tenstorrent.md": "docs/examples/accelerators/tenstorrent.md"
Expand Down Expand Up @@ -335,9 +342,6 @@ nav:
- vLLM: docs/examples/inference/vllm.md
- NIM: docs/examples/inference/nim.md
- TensorRT-LLM: docs/examples/inference/trtllm.md
- Models:
- DeepSeek V4: docs/examples/models/deepseek-v4.md
- Qwen 3.6: docs/examples/models/qwen36.md
- Accelerators:
- AMD: docs/examples/accelerators/amd.md
- Tenstorrent: docs/examples/accelerators/tenstorrent.md
Expand Down
5 changes: 3 additions & 2 deletions mkdocs/.justfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ default:
@just --list

# Preview the docs site with live-reload
mkdocs-serve:
[arg("port", long="port")]
mkdocs-serve port="8000":
# --livereload works around live-reload bugs in recent mkdocs versions
uv run mkdocs serve --livereload -s
uv run mkdocs serve --livereload -s -a 127.0.0.1:{{port}}

# Build the docs site to ./site
mkdocs-build:
Expand Down
7 changes: 3 additions & 4 deletions mkdocs/assets/stylesheets/extra.css
Original file line number Diff line number Diff line change
Expand Up @@ -1980,10 +1980,9 @@ img.border {
a[href^="http"]:not(:where(
/* skip if marked with external-skip */
.external-skip,
/* exclude http:// dstack links */
[href^="http://dstack.ai"],
/* exclude https://dstack.ai links */
[href^="https://dstack.ai"],
/* exclude dstack.ai links, except non-docs product pages */
[href^="http://dstack.ai"]:not([href*="dstack.ai/products"]),
[href^="https://dstack.ai"]:not([href*="dstack.ai/products"]),
/* exclude md-content__button links */
.md-content__button,
)):after {
Expand Down
2 changes: 1 addition & 1 deletion mkdocs/blog/posts/intel-gaudi.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ $ dstack apply -f examples/single-node-training/trl/intel/.dstack.yml -R

`dstack` will automatically create containers according to the run configuration and execute them across the fleet.

> Explore our [examples](../../docs/examples/accelerators/intel/index.md) to learn how to train and deploy large models on
> Explore our [examples](../../docs/examples.md) to learn how to train and deploy large models on
> Intel Gaudi AI Accelerator.

!!! info "Intel Tiber AI Cloud"
Expand Down
18 changes: 12 additions & 6 deletions mkdocs/docs/concepts/backends.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ There are two ways to configure AWS: using an access key or using the default cr
"ec2:DeletePlacementGroup",
"ec2:DeleteVolume",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeCapacityReservations"
"ec2:DescribeCapacityReservations",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeInstanceAttribute",
Expand Down Expand Up @@ -314,7 +314,8 @@ There are two ways to configure Azure: using a client secret or using the defaul

```shell
SUBSCRIPTION_ID=...
az ad sp create-for-rbac
DSTACK_ROLE=...
az ad sp create-for-rbac \
--name dstack-app \
--role $DSTACK_ROLE \
--scopes /subscriptions/$SUBSCRIPTION_ID \
Expand Down Expand Up @@ -401,6 +402,8 @@ There are two ways to configure Azure: using a client secret or using the defaul
- name: main
backends:
- type: azure
subscription_id: 06c82ce3-28ff-4285-a146-c5e981a9d808
tenant_id: f84a7584-88e4-4fd2-8e97-623f0a715ee1
creds:
type: default
regions: [westeurope]
Expand All @@ -415,6 +418,8 @@ There are two ways to configure Azure: using a client secret or using the defaul
- name: main
backends:
- type: azure
subscription_id: 06c82ce3-28ff-4285-a146-c5e981a9d808
tenant_id: f84a7584-88e4-4fd2-8e97-623f0a715ee1
creds:
type: default
regions: [westeurope]
Expand All @@ -433,6 +438,8 @@ There are two ways to configure Azure: using a client secret or using the defaul
- name: main
backends:
- type: azure
subscription_id: 06c82ce3-28ff-4285-a146-c5e981a9d808
tenant_id: f84a7584-88e4-4fd2-8e97-623f0a715ee1
creds:
type: default
regions: [westeurope]
Expand Down Expand Up @@ -739,6 +746,7 @@ gcloud projects list --format="json(projectId)"
- name: main
backends:
- type: gcp
project_id: gcp-project-id
creds:
type: default

Expand Down Expand Up @@ -891,7 +899,7 @@ projects:

<span id="datacrunch"></span>

### Verda (formerly DataCrunch) { #verda }
### Verda { #verda }

Log into your [Verda](https://console.verda.com/signin) account, click Keys in the sidebar, find `REST API Credentials` area and then click the `Generate Credentials` button.

Expand Down Expand Up @@ -1399,7 +1407,7 @@ projects:

This applies to offers shown in `dstack apply` (run plans), during provisioning, and in `dstack offer`. Unlike other backends, offers for the `kubernetes` backend always reflect the lower limit of the range.

> To learn more, see the [Lambda](../examples/clusters/lambda/#kubernetes) and [Crusoe](../examples/clusters/crusoe/#kubernetes) examples.
> To learn more, see the [Lambda](../examples/clusters/lambda.md#kubernetes) and [Crusoe](../examples/clusters/crusoe.md#kubernetes) examples.

### Slurm

Expand Down Expand Up @@ -1648,5 +1656,3 @@ projects:
```

</div>

Also, the `vastai` backend supports on-demand instances only. Spot instance support coming soon.
4 changes: 2 additions & 2 deletions mkdocs/docs/concepts/dev-environments.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,13 +267,13 @@ init:

</div>

Cannot be used with `python` or `image`. Not supported on `runpod`, `vastai`, or `kubernetes`.
Cannot be used with `python` or `image`. Not supported on `daytona`, `lium`, `runpod`, `slurm`, or `vastai`.

#### Privileged mode

To enable privileged mode, set [`privileged`](../reference/dstack.yml/dev-environment.md#privileged) to `true`.

Not supported with `runpod`, `vastai`, and `kubernetes`.
Not supported with `daytona`, `lium`, `runpod`, `slurm`, and `vastai`.

#### Private registry

Expand Down
2 changes: 2 additions & 0 deletions mkdocs/docs/concepts/events.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ In the UI, the `Events` tab is included on the run, job, fleet, and instance pag

![](https://dstack.ai/static-assets/static-assets/images/dstack-ui-events-run.png){ width=800 }

> The global `Events` page with advanced filtering is only available in [dstack Sky](https://dstack.ai/products/sky/) and [dstack Factory](https://dstack.ai/products/factory/).

## CLI

To query events via the CLI, use the `dstack event` command.
Expand Down
9 changes: 4 additions & 5 deletions mkdocs/docs/concepts/exports.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ description: Exporting resources across projects
Exports allow making resources from one project available to other projects. When a project exports a resource,
the specified importer projects can see and use it as if it were their own.

!!! info "Export support"
Exports are only supported in `dstack` Sky and `dstack` Factory.
> Exports are only supported in [dstack Sky](https://dstack.ai/products/sky/) and [dstack Factory](https://dstack.ai/products/factory/).

An export is created in the exporter project and specifies the resources to export and the
importer projects that will gain access to them.
Expand All @@ -20,7 +19,7 @@ for running tasks, dev environments, and services. Imported resources appear wit

Currently, [SSH fleets](fleets.md#ssh-fleets) and [gateways](gateways.md) can be exported.

!!! info "Required project role"
??? info "Required role"
The user creating or updating an export must have the project admin role on both the exporter project and
any importer project they add. Alternatively, a global admin can add any project as an importer.

Expand Down Expand Up @@ -128,10 +127,10 @@ $ dstack export create global-export --gateway shared-gateway --global

```

Only promoting an export to global requires the global admin role. Regular project admins can add or remove resources, remove global status, or delete the export.

</div>

Only promoting an export to global requires the global admin role. Regular project admins can add or remove resources, remove global status, or delete the export.

## Access imported resources

From the importer project's perspective, use `dstack import list` (or simply `dstack import`) to list all imports in the project — i.e., all exports from other projects that this project has been granted access to:
Expand Down
43 changes: 37 additions & 6 deletions mkdocs/docs/concepts/fleets.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: Managing pools of compute instances

Before submitting runs, you must create a fleet. Fleets act as both pools of instances and templates for how those instances are provisioned.

> `dstack` supports two fleet types: [backend fleets](#backend-fleet) (which are provisioned dynamically in the cloud or on Kubernetes), and [SSH fleets](#ssh-fleet) (which use existing on-prem servers).
> `dstack` supports two fleet types: [backend fleets](#backend-fleets) (which are provisioned dynamically in the cloud or on Kubernetes), and [SSH fleets](#ssh-fleets) (which use existing on-prem servers).

## Apply a configuration

Expand Down Expand Up @@ -103,10 +103,10 @@ To create a fleet, define its configuration in a YAML file. The filename must en
`dstack apply` automatically connects to on-prem servers, installs the required dependencies, and adds them to the created fleet.

??? info "Host requirements"
1.&nbsp;Hosts must be Linux-based and have Docker pre-installed.
1.&nbsp;Hosts must be Linux-based with systemd, have a 64-bit x86 or ARM CPU, and have Docker pre-installed.

=== "NVIDIA"
2.&nbsp;Hosts with NVIDIA GPUs must also be pre-installed with CUDA 12.1 and
2.&nbsp;Hosts with NVIDIA GPUs must also be pre-installed with NVIDIA drivers that support CUDA 13.0 and
[NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).

=== "AMD"
Expand All @@ -120,7 +120,7 @@ To create a fleet, define its configuration in a YAML file. The filename must en

3.&nbsp;The user specified must have passwordless `sudo` access.

4.&nbsp;The SSH server must be running and configured with `AllowTcpForwarding yes` in `/etc/ssh/sshd_config`.
4.&nbsp;The SSH server must be running and configured with `AllowTcpForwarding yes` in `/etc/ssh/sshd_config`. The SSH key must be RSA, ECDSA, or Ed25519.

5.&nbsp;The firewall must allow SSH and should forbid any other connections from external networks.

Expand All @@ -134,7 +134,7 @@ Backend fleets support [many options](../reference/dstack.yml/fleet.md); see som

### Cluster placement

Both [backend fleets](#backend-fleet) and [SSH fleets](#ssh-fleet) allow the `placement` property to be set to `cluster`.
Both [backend fleets](#backend-fleets) and [SSH fleets](#ssh-fleets) allow the `placement` property to be set to `cluster`.

This property ensures that instances are interconnected. This is required for running [multi-node tasks](tasks.md#nodes).

Expand Down Expand Up @@ -320,7 +320,10 @@ Backend fleets allow you to set `backends` to specify which backends are allowed

Instances of a backend fleet that aren't running any jobs are `idle` and can be reused by new runs.
`dstack` terminates idle instances above [`nodes.min`](#nodes) after
[`idle_duration`](../reference/dstack.yml/fleet.md#idle_duration), which defaults to 3 days.
[`idle_duration`](../reference/dstack.yml/fleet.md#idle_duration). If `idle_duration` is not set,
it defaults to 3 days for pre-provisioned instances and to 5 minutes for instances provisioned
when you submit runs. Instances of [container-based](backends.md#container-based) backends are
terminated as soon as they become idle.

For `idle_duration` to have an effect, `nodes` must be a range. Set `min` to `0` and `target` to
the number of instances to pre-provision:
Expand Down Expand Up @@ -498,6 +501,34 @@ $ dstack fleet

</div>

### Update fleets

To update a fleet, change its configuration and pass it to `dstack apply`. `dstack` will automatically detect changes and suggest an in-place update.

<div class="termy">

```shell
$ dstack apply -f fleet.dstack.yml

Found fleet my-fleet. Detected changes that can be updated in-place:
- Configuration properties:
- nodes
- max_price

Update the fleet in-place? [y/n]:
```

</div>

If approved, `dstack` updates the fleet without re-creating it. For example, if `nodes.min` is increased, `dstack` provisions the missing instances, and if `nodes.max` is decreased, `dstack` terminates idle instances above it.

??? info "Supported properties"
Backend fleets support in-place changes to `nodes`, `resources`, `backends`, `regions`, `availability_zones`, `instance_types`, `spot_policy`, `max_price`, `reservation`, and `tags`. Except for `nodes`, these changes only apply to instances provisioned after the update.

SSH fleets support adding and removing `hosts`. Added hosts are provisioned, and removed hosts are terminated.

Changes to other properties require re-creating the fleet. In this case, `dstack apply` offers to delete the fleet and create it again.

### Delete fleets

When a fleet isn't used by a run, you can delete it by passing the fleet configuration to `dstack delete`:
Expand Down
4 changes: 1 addition & 3 deletions mkdocs/docs/concepts/presets.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ description: Creating and reusing optimized model inference configurations

Presets offer a toolkit that streamlines agent-based model inference optimization and a portable format to deploy the optimized inference endpoint to any cloud, Kubernetes cluster, or on-prem fleet.

> The presets feature is experimental and may change.

??? info "Prerequisites"
Before using presets, make sure you’ve [installed](../installation.md) the server and CLI, and created a [fleet](fleets.md).

Expand Down Expand Up @@ -70,7 +68,7 @@ Create the preset dsv4-flash? [y/n]: y

The command executes entirely locally and uses the locally installed `claude` or `codex` CLI along with `dstack`'s bundled skills (see [Agent](#agent)). The agent uses a `dstack` task to find the best serving configuration for the available fleet offers, then submits it as a `dstack` service for a final benchmark.

You can stop watching with `Ctrl`+`C` at any time. The agent keeps running, and `dstack preset logs -f` follows it again. Resume an interrupted creation with `dstack preset resume`:
Pressing `Ctrl`+`C` asks whether to stop the creation. If you don't stop it, the agent keeps running, and `dstack preset logs -f` follows it again. Resume an interrupted creation with `dstack preset resume`:

<div class="termy">

Expand Down
Loading
Loading