Skip to content

Commit

Permalink
- [Docs]: Updated the landing page to reflect the changes in 0.11
Browse files Browse the repository at this point in the history
- [Docs]: Added the draft of the blog post about 0.11
  • Loading branch information
peterschmidt85 committed Aug 17, 2023
1 parent 802f717 commit 2ffcc3c
Show file tree
Hide file tree
Showing 15 changed files with 211 additions and 85 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</h1>

<h3 align="center">
Orchestrating LLM workloads across multiple clouds
Train and deploy LLM models in multiple clouds
</h3>

<p align="center">
Expand All @@ -24,7 +24,7 @@ Orchestrating LLM workloads across multiple clouds
</div>

`dstack` is an open-source tool that enables the execution of LLM workloads
across multiple cloud GPU providers – ensuring the best GPU price and availability.
across multiple cloud providers – ensuring the best GPU price and availability.

Deploy services, run tasks, and provision dev environments
in a cost-effective manner across multiple cloud GPU providers.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/images/dstack-hub-view-project.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 3 additions & 1 deletion docs/assets/javascripts/termynal.js
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,13 @@ class Termynal {
const chars = progressChar.repeat(progressLength);
const progressPercent = line.getAttribute(`${this.pfx}-progressPercent`)
|| this.progressPercent;
const typeDelay = line.getAttribute(`${this.pfx}-typeDelay`)
|| this.typeDelay;
line.textContent = '';
this.container.appendChild(line);

for (let i = 1; i < chars.length + 1; i++) {
await this._wait(this.typeDelay);
await this._wait(typeDelay);
const percent = Math.round(i / chars.length * 100);
line.textContent = `${chars.slice(0, i)} ${percent}%`;
if (percent>progressPercent) {
Expand Down
2 changes: 1 addition & 1 deletion docs/assets/stylesheets/extra.css
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
background-color: var(--md-default-fg-color--lighter)
}

.md-typeset :is(.admonition,details):is(.info,.tip,.warning) {
.md-typeset :is(.admonition,details):is(.info,.tip,.warning,.c) {
background-color: rgba(0,0,0,0.005);
border-color: rgba(0,0,0,0.6);
}
Expand Down
25 changes: 19 additions & 6 deletions docs/assets/stylesheets/landing.css
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
.tx-landing__hero_text h1 {
margin-bottom: 1.7rem;
font-weight: 800;
font-size: 2.5em;
font-size: 2.3em;
background: -webkit-linear-gradient(45deg, #ff00ff, #8500ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
Expand All @@ -30,6 +30,11 @@
margin-top: 1.5rem;
max-width: 26rem;
}

.tx-landing__hero_code {
margin-top: 1.5rem;
max-width: 26rem;
}
}

@media screen and (min-width: 76.1875em) {
Expand All @@ -40,7 +45,7 @@
.tx-landing__hero {
display: flex;
align-items: stretch;
margin-bottom: -3rem;
margin-bottom: 2.5rem;
font-size: 19px;
line-height: 1.5;
}
Expand All @@ -56,6 +61,13 @@
margin-top: 0.5rem;
margin-left: 3rem;
}

.tx-landing__hero_code {
order: 1;
min-width: 34rem;
margin-top: 3rem;
margin-left: 2rem;
}
}

.tx-container .md-button.slack:before {
Expand All @@ -74,7 +86,8 @@
}

.tx-container .md-button {
margin-top: 1rem;
margin-top: 1.5rem;
margin-bottom: 1.5rem;
padding: 0.55em 2em;
font-size: 22px;
font-weight: 300 !important;
Expand Down Expand Up @@ -134,13 +147,13 @@
}

@media screen and (min-width: 76.1875em) {
.tx-landing__integrations {
/*.tx-landing__integrations {
margin-top: -5rem;
}
}*/
}

.tx-landing__integrations_text h2 {
font-size: 1.8em;
font-size: 1.7em;
max-width: 500px;
margin-bottom: 1.5em;
background: -webkit-linear-gradient(45deg, #0048ff, #ce00ff);
Expand Down
7 changes: 6 additions & 1 deletion docs/assets/stylesheets/termynal.css
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/

:root {
--color-bg: rgb(30, 35, 45);
--color-bg: rgb(21, 22, 29);
--color-text: #eee;
--color-text-subtle: #a2a2a2;
}
Expand All @@ -16,6 +16,11 @@
white-space: pre;
}

.small > [data-termynal] {
font-size: 14px;
line-height: 1.4;
}

[data-termynal] {
overflow-x: scroll;
/*white-space: pre;*/
Expand Down
102 changes: 102 additions & 0 deletions docs/blog/posts/multiple-clouds.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
title: "dstack 0.11: Discover GPU across multiple clouds"
date: 2023-08-22
description: "The 0.11 update enables significant GPU cost reduction and increased availability by leveraging multiple providers."
slug: "multiple-clouds"
categories:
- Releases
---

# Discover GPU across multiple clouds

__The 0.11 update significantly cuts GPU costs and boosts their availability.__

The latest release of `dstack` enables the automatic discovery of the best GPU price and availability across multiple
configured cloud providers and regions.

<!-- more -->

## Multiple providers per project

Now, `dstack` leverages price data from multiple configured cloud providers and regions to automatically suggest the
most cost-effective options.

<div class="termy small">

```shell
$ dstack run . -f llama-2/train.dstack.yml --gpu A100

Configuration llama-2/train.dstack.yml
Min resources 2xCPUs, 8GB, 1xA100
Max price no
Spot policy auto
Max duration 72h

# BACKEND RESOURCES SPOT PRICE
2 lambda 30xCPUs, 200GB, 1xA100 (80GB) yes $1.1
3 gcp 12xCPUs, 85GB, 1xA100 (40GB) yes $1.20582
1 azure 24xCPUs, 220GB, 1xA100 (80GB) yes $1.6469
...

Continue? [y/n]:
```

</div>

The default behavior of `dstack` is to first attempt the most cost-effective options, provided they are available. You
have the option to set a maximum price limit either through `max_price` in `.dstack/profiles.yml` or by using
`--max-price` in the `dstack run` command.

To implement this change, we have modified the way projects are configured. You can now configure multiple clouds and
regions within a single project.

![](../../assets/images/dstack-hub-view-project.png){ width=800 }

!!! info "Why this matter?"
The ability to run LLM workloads across multiple cloud GPU providers
allows for a significant reduction in costs and an increase in availability,
while also remaining independent of any particular cloud vendor.

We hope that the value of `dstack` will continue to grow as we expand our support for additional cloud GPU providers.
If you're interested in a specific provider, please message us on [Slack](https://join.slack.com/t/dstackai/shared_invite/zt-xdnsytie-D4qU9BvJP8vkbkHXdi6clQ).

## Custom domains and HTTPS

In other news, it is now possible to deploy services
using [HTTPS](../../docs/guides/services.md#configure-a-domain-and-enable-https-optional).
All you need to do is configure a wildcard domain (e.g., `*.mydomain.com`), point it to the gateway IP address, and then
pass the subdomain you want to use (e.g., `myservice.mydomain.com`) to the `gateway` property in
YAML (instead of the gateway IP address).

## Other changes

### .dstack/profiles.yml

- The `project` property is no longer supported.
- You can now use `max_price` to set the maximum price per hour in dollars.

### dstack run

Using the dstack run command, you are now able to utilize options such as `--gpu`, `--memory`, `--env`, `--max-price`,
and several [other arguments](../../docs/reference/cli/run.md) to override the profile settings.

The [documentation](../../docs/index.md) is updated to reflect the changes in the release.

!!! warning "Migration to 0.11"
The `dstack` version 0.11 update brings significant changes that break backward compatibility. If you used prior `dstack`
versions, after updating to `dstack==0.11`, you'll need to log in to the UI and reconfigure clouds.

We apologize for any inconvenience and aim to ensure future updates maintain backward compatibility.

## Give it a try

Getting started with `dstack` takes less than a minute. Go ahead and give it a try.

<div class="termy">

```shell
$ pip install "dstack[aws,gcp,azure,lambda]" -U
$ dstack start
```

</div>
6 changes: 2 additions & 4 deletions docs/docs/guides/dev-environments.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,14 @@ working directory.
```shell
$ dstack run .
RUN CONFIGURATION USER BACKEND INSTANCE RESOURCES SPOT
fast-moth-1 app.dstack.yml admin aws - 5xCPUs, 15987MB auto
RUN CONFIGURATION BACKEND RESOURCES SPOT PRICE
fast-moth-1 app.dstack.yml aws 5xCPUs, 15987MB yes $0.0547
Provisioning and starting SSH tunnel...
---> 100%
To open in VS Code Desktop, use this link:
vscode://vscode-remote/ssh-remote+fast-moth-1/workflow
To exit, press Ctrl+C.
```

</div>
Expand Down
4 changes: 2 additions & 2 deletions docs/docs/guides/services.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,8 @@ If the configuration file is named other than `.dstack.yml`, pass its path via t
```shell
$ dstack run . -f serve.dstack.yml
RUN CONFIGURATION USER BACKEND INSTANCE RESOURCES SPOT
yellow-cat-1 serve.dstack.yml admin aws - 5xCPUs, 15987MB auto
RUN CONFIGURATION BACKEND RESOURCES SPOT PRICE
yellow-cat-1 serve.dstack.yml aws 5xCPUs, 15987MB yes $0.0547
Provisioning...
---> 100%
Expand Down
4 changes: 2 additions & 2 deletions docs/docs/guides/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ If the configuration file is named other than `.dstack.yml`, pass its path via t
```shell
$ dstack run . -f train.dstack.yml
RUN CONFIGURATION USER BACKEND INSTANCE RESOURCES SPOT
wet-mangust-7 train.dstack.yml admin aws - 5xCPUs, 15987MB auto
RUN CONFIGURATION BACKEND RESOURCES SPOT PRICE
wet-mangust-7 train.dstack.yml aws 5xCPUs, 15987MB yes $0.0547
Waiting for capacity... To exit, press Ctrl+C...
---> 100%
Expand Down
22 changes: 9 additions & 13 deletions docs/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ The server is available at http://127.0.0.1:3000?token=b934d226-e24a-4eab-eb92b3

## Configure backends

Upon startup, the server sets up the default project called `main`. Prior to using `dstack`, you must log in to the
UI, open the project's settings, and configure cloud backends
(e.g., [AWS](reference/backends/aws.md), [GCP](reference/backends/gcp.md), [Azure](reference/backends/azure.md),
[Lambda](reference/backends/lambda.md), etc.).
Upon startup, the server sets up the default project called `main`.

[//]: # (TODO: Add a link or a screenshot)
![](../assets/images/dstack-hub-view-project-empty.png){ width=800 }

Prior to using `dstack`, open the `main` project's settings, and add cloud backends
(e.g., [AWS](reference/backends/aws.md), [GCP](reference/backends/gcp.md), [Azure](reference/backends/azure.md), [Lambda](reference/backends/lambda.md), etc.).

[//]: # (Once cloud backends are configured, `dstack` will be able to provision cloud resources across configured clouds, ensuring)
[//]: # (the best price and higher availability.)
Expand Down Expand Up @@ -139,17 +139,15 @@ directory which you want to use as a working directory when running the configur
```shell
$ dstack run .
RUN CONFIGURATION USER BACKEND INSTANCE RESOURCES SPOT
fast-moth-1 .dstack.yml admin aws - 5xCPUs, 15987MB auto
RUN CONFIGURATION BACKEND RESOURCES SPOT PRICE
fast-moth-1 .dstack.yml aws 5xCPUs, 15987MB yes $0.0547
Provisioning and starting SSH tunnel...
---> 100%
To open in VS Code Desktop, use this link:
vscode://vscode-remote/ssh-remote+fast-moth-1/workflow
To exit, press Ctrl+C.
```

</div>
Expand All @@ -167,14 +165,12 @@ using the `-f` argument:
```shell
$ dstack run . -f serve.dstack.yml
RUN CONFIGURATION USER BACKEND INSTANCE RESOURCES SPOT
old-lionfish-1 serve.dstack.yml admin aws - 5xCPUs, 15987MB auto
RUN CONFIGURATION BACKEND RESOURCES SPOT PRICE
old-lionfish-1 serve.dstack.yml aws 5xCPUs, 15987MB yes $0.0547
Provisioning and starting SSH tunnel...
---> 100%
To stop, press Ctrl+C.
Launching in *reload mode* on: http://127.0.0.1:7860 (Press CTRL+C to quit)
```

Expand Down
4 changes: 2 additions & 2 deletions docs/docs/installation/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ Here's the list of environment variables which you can override:

- `DSTACK_SERVER_ADMIN_TOKEN` – (Optional) The default token of the `admin` user. By default, it's generated randomly
at the first startup.
- `DSTACK_SERVER_DATA` – (Optional) The path to the directory where the `dstack`server stores the state. Defaults to `~/.dstack/server`.
- `DSTACK_SERVER_DIR` – (Optional) The path to the directory where the `dstack`server stores the state. Defaults to `~/.dstack/server`.

## Persisting state in a cloud storage

By default, `dstack` saves state in a local directory (see `DSTACK_SERVER_DATA`).
By default, `dstack` saves state in a local directory (`$DSTACK_SERVER_DIR/data`).
If you want to persist state automatically to a cloud object storage, you can configure the following environment
variables.

Expand Down
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
template: home.html
title: Orchestrating LLM workloads across multiple clouds
title: Train and deploy LLM models in multiple clouds
hide:
- navigation
- toc
Expand Down
Loading

0 comments on commit 2ffcc3c

Please sign in to comment.