This directory contains HashiCorp Packer templates for building VM images that are then used by dstack when running instances on some of the VM-based backends. While dstack uses standard OS images for some backends, backends with custom-built images have an advantage because these images are optimized for dstack, e.g. they contain pre-pulled dstack Docker images, which reduces the startup time of dstack jobs.
For most backends, we build two images: one for CPU-only instances, typically published as dstack-X.Y, and one for NVIDIA GPU instances, typically published as dstack-cuda-X.Y, where X.Y is the image version. Some backends may have additional images, e.g. Azure has dstack-grid-X.Y for instances requiring NVIDIA Grid drivers.
Production builds are triggered manually in GitHub Actions, see .github/workflows/docker.yml.
The GitHub Actions workflow also allows for staging builds. Staging builds are more limited than production builds, e.g. the resulting image can be restricted to a single region and not made public, but this is usually sufficient for testing.
If you still need to build the images locally, see the GitHub Actions workflow for examples of how to use the packer templates. Additional instructions for some backends are provided below.
Follow installation instruction
for Azure CLI az. Login for managing resources:
$ az login
Steps below follows HOWTO.
Create group as container for result image. Value packer is from property managed_image_resource_group_name of
azure-arm packer's builder. Value eastus is property location of azure-arm (Azure has two kind notation for
the same location).
$ az group create -n packer -l eastus
Packer allocates resources on its own. It requires access to subscription. Obtain id.
$ az account show --query "{ subscription_id: id }"
{
"subscription_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
Create credentials for packer.
$ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription_id> --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
{
"client_id": "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4",
"client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
"tenant_id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
Set environment variables.
| Env | Azure |
|---|---|
| AZURE_CLIENT_ID | client_id |
| AZURE_CLIENT_SECRET | client_secret |
| AZURE_TENANT_ID | tenant_id |
| AZURE_SUBSCRIPTION_ID | subscription_id |