Skip to content

DocsHow-to guides

2 min read · updated

With Docker

Run decisio in a container on a GPU host, from the release image pinned by digest, with the weights in a volume and a restart policy.

One command starts it from the release image; it is ready when /health answers.

docker run -d --gpus all --shm-size 8g --restart unless-stopped \
-p 127.0.0.1:8000:8000 -v decisio-data:/data \
ghcr.io/aminry/decisio@sha256:5f758e5cfbf42892f42f62e037f26376154c3e77c5caf6afdd6ccc1a5cd9c4ee
# answers once the first start has fetched the weights
curl -s http://127.0.0.1:8000/health

Shown, not run: it needs a GPU host with the NVIDIA Container Toolkit, which this check does not have. Its comments are shown above their commands.

Figure · In a container

The image holds the server; the weights live in a volume.

Docker restarts the container when the server exits; the weights stay in the volume.

  • A Linux host with one NVIDIA card, sized as on a cloud GPU.
  • Docker with the NVIDIA Container Toolkit, so the container can see the card.

decisio’s compose file, from the release image:

name: decisio
services:
decisio:
image: ghcr.io/aminry/decisio@sha256:5f758e5cfbf42892f42f62e037f26376154c3e77c5caf6afdd6ccc1a5cd9c4ee
environment:
DECISIO_BASE: gemma-4-31b # the default (measured on 96 GB, runs on 80 GB); qwen3.6-35b-a3b or gemma-4-12b for the others
ports:
- "127.0.0.1:8000:8000"
volumes:
- decisio-data:/data
shm_size: "8gb"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stopped # also after a dead engine: the server exits with code 70
volumes:
decisio-data:

Shown, not run: decisio's compose.yaml, with the release image in place of its local build; not run at this release (an image built from decisio's main came up with the file on a card on 2026-10-01); run record.

Save it as compose.yaml and run docker compose up -d. It is ready when /health answers 200, as a healthy server’s answer shows.

SettingWhat it does
DECISIO_BASEthe model: gemma-4-31b by default, or gemma-4-12b, qwen3.6-35b-a3b, or a decisio model repository
DECISIO_MODELa checkpoint instead; it brings the model its config.json declares
DECISIO_HOST, DECISIO_PORTwhere the server listens inside the container

Arguments after the image name go to the server, so every server flag works.

  • The first start downloads the weights into the decisio-data volume at /data. They are never part of the image, and a restart does not download them again.
  • The container runs as a non-root user, and the port is published on 127.0.0.1 only.
  • It checks for an NVIDIA GPU first, and exits with an explanation when it cannot see one.
  • When its engine dies, the server exits with code 70. Docker restarts a container when its process exits, not when its health check fails, so restart: unless-stopped brings it back.
  • After upgrading the image, certify your tasks again (Upgrade).

To build from source instead, from a clone of the release:

git clone --branch v0.18.1 https://github.com/aminry/decisio
cd decisio
uv build --wheel
docker compose up --build

Shown, not run: it needs a GPU host with the NVIDIA Container Toolkit, which this check does not have.

This builds the image from decisio’s own Dockerfile and compose.yaml, with no image digest to set.

  • On a cloud GPU: the same server without a container, under systemd or Kubernetes.
  • Requirements and limits: every machine, the context length and what was measured on what.
  • Operate: health, monitoring and what to watch in production.