| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| 0.21.2 source code.tar.gz | 2026-08-19 | 20.8 MB | |
| 0.21.2 source code.zip | 2026-08-19 | 21.8 MB | |
| README.md | 2026-08-19 | 5.7 kB | |
| Totals: 3 Items | 42.7 MB | 0 | |
Tasks
Node groups
A multi-node task can now define heterogeneous node groups instead of a single homogeneous nodes count. Each group has its own nodes count, resources, commands, and ports, so one run can mix roles and hardware — e.g. a CPU head node with GPU workers:
:::yaml
type: task
name: ray-cluster
python: 3.12
groups:
- nodes: 1
commands:
- pip uninstall -y ray && pip install -U "ray[default]"
- ray start --head --port=6379 --block
resources:
cpu: 2
memory: 4GB..
ports:
- 8265
- nodes: 2
commands:
- pip uninstall -y ray && pip install -U "ray[default]"
- ray start --address=${{ groups[0].nodes[0].IP_ADDRESS }}:6379 --block
resources:
gpu: H100:8
Commands in any group can reference the internal IP address of any node in the run via ${{ groups[i].nodes[j].IP_ADDRESS }}. groups[0].nodes[0] is the run's master node, which is what DSTACK_MASTER_NODE_IP resolves to.
Only resources, commands, and ports can be configured per group for now. groups and the top-level nodes are mutually exclusive.
Resources
CPU
An unset resources.cpu.arch in run configurations now means "any architecture supported by the image". Previously it was inferred from the GPU: arm for known NVIDIA superchips such as GH200, x86 otherwise.
In fleet configurations, an unset resources.cpu.arch now means "any architecture".
Presets
dstack apply
dstack apply replaces dstack preset create. It accepts type: preset configurations like any other configuration type.
:::shell
$ dstack apply -f preset.dstack.yml
dstack preset export
dstack preset export replaces dstack preset apply. It writes the preset's service as a plain type: service configuration with its patch files.
:::shell
$ dstack preset export qwen38-27b -f service.dstack.yml
$ dstack apply -f service.dstack.yml
The service is then deployed with the regular dstack apply.
Gateways
Delays between service submission and its registration on the gateway, and between a service replica becoming ready and its registration, are gone:
:::shell
$ dstack event --within-run test-service | grep Service
[2026-08-18 22:28:06] [run test-service, gateway my-gateway] Service assigned to gateway
[2026-08-18 22:28:07] [run test-service, gateway my-gateway] Service registered on gateway replica 0
[2026-08-18 22:30:11] [job test-service-0-0] Service replica ready to receive requests
[2026-08-18 22:30:13] [job test-service-0-0, gateway my-gateway] Service replica registered on gateway replica 0
Events
Two new events, Service assigned to gateway and Service assigned to run without a gateway, show which gateway is supposed to serve the service before it is actually registered there.
Backends
AMD Developer Cloud
AMD GPU droplets now use the gpu-amd-base image (ROCm 7.14) instead of digitaloceanai-rocmjupyter (ROCm 6.4), so current ROCm container images work.
[!WARNING] The AMD Developer Cloud changed their API url resulting in
401 Client Error: Unauthorized. This update fixes this by migrating to the new API url (https://api.devcloud.amd.com). Update to this version to ensure theamddevcloudbackend works.
Breaking changes
dstack preset applyis removed. Usedstack preset exportfollowed bydstack apply -f.- Presets created before 0.21 can no longer be read;
dstack presetsuggests deleting or recreating them. Presets and sessions created by 0.21.x are upgraded on read and rewritten in the new format on save.
Deprecations
dstack preset createis deprecated in favor of passing the preset configuration todstack apply.
What's changed
- [Presets] Typed models and stored format overhaul by @peterschmidt85 in https://github.com/dstackai/dstack/pull/4150
- Fix outdated ROCm driver on DigitalOcean AMD GPU droplets by @peterschmidt85 in https://github.com/dstackai/dstack/pull/4151
- Don't process running job if other jobs in replica are not provisioned by @un-def in https://github.com/dstackai/dstack/pull/4149
- Change CPU arch default value/validation by @un-def in https://github.com/dstackai/dstack/pull/4136
- Handle gateway collect stats and other errors by @r4victor in https://github.com/dstackai/dstack/pull/4153
- Support Heterogenous Node Groups by @Bihan in https://github.com/dstackai/dstack/pull/4094
- [Presets] CLI refactoring by @peterschmidt85 in https://github.com/dstackai/dstack/pull/4152
- Add gateway assignment events by @jvstme in https://github.com/dstackai/dstack/pull/4155
- [chore]: Gateway replica naming cleanup by @jvstme in https://github.com/dstackai/dstack/pull/4156
- Update amddevcloud API url by @r4victor in https://github.com/dstackai/dstack/pull/4158
- Document heterogeneous node groups for tasks by @Bihan in https://github.com/dstackai/dstack/pull/4154
- [Internal] Rework runner/.justfile as a module by @un-def in https://github.com/dstackai/dstack/pull/4139
- Speed up service registration on gateway by @jvstme in https://github.com/dstackai/dstack/pull/4166
- [Internal] Preset service serialization format by @peterschmidt85 in https://github.com/dstackai/dstack/pull/4162
- Bump gpuhunt==0.1.30 by @r4victor in https://github.com/dstackai/dstack/pull/4159
- [runner] Remove
BASH_FUNC_*%%variables by @un-def in https://github.com/dstackai/dstack/pull/4168
Full Changelog: https://github.com/dstackai/dstack/compare/0.21.1...0.21.2