GPU Side-Load Packages
The Norsk Media image no longer includes the NVIDIA CUDA toolkit, making it roughly 1.9 GB smaller to download. The image runs exactly as before on machines without a GPU — nothing to do. On machines with an NVIDIA GPU, the GPU-accelerated features need the CUDA libraries supplied alongside the image, in one of the two ways described on this page.
What each package enables:
| Package | Size | Enables | Without it |
|---|---|---|---|
|
~280 MB |
NVENC / NVDEC hardware encode and decode, GPU compose and resize |
GPU video nodes are unavailable; software encode (x264/x265) is unaffected |
|
~1.6 GB |
GPU ONNX inference (quality monitoring, object detection, VAD) and GPU Whisper transcription |
These features still work, running on CPU |
Deployments managed by norsk-ctl handle all of this automatically —
ctl downloads and mounts the correct packages for the image it launches. This
page is for hand-managed Docker / Docker Compose deployments.
|
Option 1: the -full image
If you would rather not manage packages, append -full to your image tag:
docker image pull norskvideo/norsk:latest-full
Every release publishes a -full variant with both GPU packages already baked
in. It behaves identically to the standard image with the packages installed;
the only cost is the larger download. All other instructions (license, ports,
--gpus all) are unchanged.
Option 2: install the side-load packages
The install script downloads the packages matching your exact image, verifies them, and installs them into a host directory of your choosing:
curl -fsSLO https://s3.eu-west-1.amazonaws.com/norsk.video/sideload/get.sh
sudo bash get.sh norskvideo/norsk:latest /srv/norsk/sideload
The script begins by pulling the image (the same pull your deployment needs
anyway), so a moving tag like latest or nightly is resolved to its current
image before the packages are matched against it. The natural upgrade flow is:
update the image tag in your compose file, run the script, then
docker compose up.
By default it installs both packages; pass gpu-video and/or gpu-inference
to choose (most GPU deployments transcode without running inference, and
gpu-video is a fraction of the size):
sudo bash get.sh norskvideo/norsk:latest /srv/norsk/sideload gpu-video
Then mount that directory into the container at /opt/norsk. With
docker run:
docker run ... --gpus all -v /srv/norsk/sideload:/opt/norsk:ro norskvideo/norsk:latest ...
With Docker Compose:
services:
norsk-media:
image: norskvideo/norsk:latest
volumes:
- /srv/norsk/sideload:/opt/norsk:ro
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
If a required package is missing or does not match the image, GPU features are unavailable (or run on CPU where possible) — the engine still starts and logs a clear message.
Upgrading Norsk
Re-run the install script whenever you change the image tag (it pulls the image itself). The packages are tied to the CUDA libraries the image was built with, not to the Norsk version — and those change rarely — so on a routine upgrade the script almost always reports that the installed packages still match and downloads nothing.
Notes
-
NVIDIA driver: the host driver is separate from these packages and is still required, exactly as before — install it on the host and pass
--gpus all(or the Compose device reservation above). Driver libraries are never part of a side-load package. -
Air-gapped hosts: run the install script on a connected machine (it only needs
docker,curland the image), then copy the destination directory to the target host and mount it at/opt/norskas above. -
Integrity: the script verifies a sha256 manifest of every library against the copy your image carries, so a mismatched or corrupted download is rejected rather than installed.