Skip to main content

deepstream-setup-on-wsl

Set up and verify NVIDIA DeepStream in Docker inside WSL2 on a local or remote Windows machine. Use when a user wants to install WSL2, Ubuntu, Docker, NVIDIA Container Toolkit, and a requested DeepStream image; validate a supported WDDM workstation GPU; or run built-in or user-supplied DeepStream pipelines.

Source facts

Repository
NVIDIA/DeepStream
Last source activity
October 19, 2026 at 08:55
Detected SKILL.md language
English
Stars
301
Forks
69

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
27 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
deepstream-setup-on-wsl
description
Set up and verify NVIDIA DeepStream in Docker inside WSL2 on a local or remote Windows machine. Use when a user wants to install WSL2, Ubuntu, Docker, NVIDIA Container Toolkit, and a requested DeepStream image; validate a supported WDDM workstation GPU; or run built-in or user-supplied DeepStream pipelines.
service
deepstream
reviewed
2026-07-30T00:00:00.000Z
license
CC-BY-4.0 AND Apache-2.0
permissions
["env","file_read","file_write","network","shell"]
metadata
{"tags":["deepstream","wsl2","wsl","windows","docker","gpu","setup","verification","nvidia-container-toolkit"],"languages":["bash","python"],"domain":"devops","version":"2.1.1","data-classification":"public"}
# DeepStream setup on WSL2 Set up DeepStream in Docker inside WSL2, then optionally verify built-in or user-supplied pipelines. All supported targets use the same preflight, provisioning, verification, and report steps. ## Safety contract - Ask before every state-changing phase. Show the exact plan before installing. - Never ask for or accept a password, API key, or token in chat. - For remote Windows, use WinRM HTTPS with certificate validation or SSH. Never use external WinRM HTTP. - Treat the GPU check as a hard gate. Require a WDDM GeForce/RTX/Quadro workstation GPU; reject H100/A100/H200/L40/L4/T4/Tesla and TCC mode. - Never install a Linux NVIDIA driver in WSL; Windows projects the driver. - Treat host CUDA Toolkit as optional: install a versioned toolkit-only package only when the user requests host-side CUDA compilation. - Prefer existing compatible components. Retry failed provisioning at most once. - Run optional verification only after asking. Require a second confirmation for user-supplied commands or network access. - Never place credentials in a custom command or CLI flag. Use an application- specific private file or interactive authentication flow outside chat. ## Invocation Display: ```text DeepStream on WSL2 Where should it run? 1. This Windows computer (no remote credentials). 2. Remote Windows (WinRM HTTPS; hidden local password prompt). 3. Existing WSL over SSH (existing key or ssh-agent). I will preflight, show changes, and ask before installing. Never paste secrets. ``` This skill supports an existing local or remote target. ## Step 1 — Collect non-secret inputs Ask for: - target mode: local, remote HTTPS, or SSH; - requested DeepStream image or version; - installed Windows version, GPU, driver/CUDA, WSL distro, and whether host-side CUDA compilation is required; - whether to run optional built-in or custom verification. Hostnames, IP addresses, and usernames are not authentication secrets, but offer a target profile when the user prefers to keep them out of chat. ### Remote Windows target profile Require Python 3.10+ on the controller. Ask the user to run locally: ```bash python scripts/configure_target.py create --name <TARGET_NAME> ``` The helper prompts for host, username, and password. Password input is hidden and stored only in a private file; it prints `TARGET_PROFILE=<path>`. Ask the user to reply only that the profile is ready or provide its path. Never read or display the password yourself. The password file must be a regular, user-owned file with mode `0600`. ## Step 2 — Read-only preflight For WinRM mode, run: ```bash python scripts/bootstrap.py --check ``` Check, without changing state: - controller Python 3.10+ and the exact private dependency environment for WinRM; - target reachability and secure transport; - Windows 11, WDDM driver mode, GPU name, driver/CUDA, WSL version and distro; - disk space and whether Docker, NVIDIA Container Toolkit, and the requested image already exist. Stop before installation if the target, transport, or GPU gate fails. Resolve the CUDA-compatible Windows minimum separately from the WSL guide's validated driver; never reuse a Linux driver number. Resolve the remaining stack from `references/version-matrix.md` and official docs. The container owns CUDA/TensorRT; `nvidia-smi` does not prove Toolkit installation. ## Step 3 — Show and confirm the plan Display target/connection, GPU/WDDM, distro, digest-preferred image, resolved driver/CUDA/TensorRT stack, and exact changes: controller environment, WSL, Ubuntu, optional host Toolkit, Docker, Container Toolkit, and image pull. Use `AskUserQuestion` for explicit confirmation. Use separate confirmations for firewall/WinRM configuration, driver replacement, reboot, custom commands, network-enabled containers, and deletion. ## Step 4 — Controller prerequisites For WinRM mode, after confirmation, run: ```bash python scripts/bootstrap.py --install --yes ``` Use the printed `PYTHON=<path>` later. Bootstrap creates `~/.deepstream-wsl/venv`, never modifies system Python, and leaves authentication to the user. SSH requires an existing client; local mode needs no controller. ## Step 5 — WSL2 and Ubuntu Follow `references/wsl2-deepstream-steps.md`. Install the standalone Microsoft WSL package and selected Ubuntu distro only when missing or incompatible. Verify the download's trusted source, SHA-256, and Authenticode signature before MSI installation. Announce and confirm reboot before initiating it. After reconnecting, run the hard gate: ```powershell nvidia-smi --query-gpu=name,driver_model.current,driver_version --format=csv,noheader wsl -d <DISTRO> -u root -- nvidia-smi ``` Stop if the GPU is unsupported, reports TCC, or does not project into WSL. Stop below the CUDA-compatible minimum. Mark an older-than-validated driver unvalidated and require container verification. Guide public replacement through the official Windows installer; never silently replace it. Confirm reboot separately. ## Step 6 — Provision DeepStream For remote HTTPS: ```bash <PYTHON> scripts/winrm_exec.py --target-profile <PROFILE> \ run-wsl --distro <DISTRO> --timeout 3600 \ --env DS_IMAGE=<IMAGE> --env NVIDIA_CTK_VERSION=<PINNED> \ --env MIN_WINDOWS_DRIVER=<CUDA_MINIMUM> \ --env VALIDATED_WINDOWS_DRIVER=<WSL_VALIDATED> \ --env EXPECTED_CONTAINER_CUDA=<VERSION> --env EXPECTED_TENSORRT=<VERSION> \ --env HOST_CUDA_TOOLKIT_MODE=<skip|check|install> \ --env HOST_CUDA_TOOLKIT_VERSION=<VERSION> \ --script scripts/wsl_provision_deepstream.sh ``` The script installs missing Docker and Container Toolkit packages, configures the runtime, optionally installs only a versioned host Toolkit, pulls the image, and checks its DeepStream/CUDA/TensorRT inventory. Default host Toolkit mode is `skip`; use `install` only after explicit confirmation of host compilation. Require the final line `PROVISION_RESULT=PASS`. On failure, diagnose from `STEP=` and `FAIL:` lines and retry at most once. NGC authentication, when required, is an interactive user step. Never collect an NGC key in chat or pass it as a command argument. ## Step 7 — Optional verification Ask separately before each option. Built-in sanity checks: ```bash <PYTHON> scripts/run_verification.py --target-profile <PROFILE> \ --ds-image <IMAGE> --label <LABEL> --timeout 1800 ``` For a custom pipeline, collect command/inputs/pass criteria, show the redacted command, confirm execution and any network access separately, then pass `--yes`. ```bash <PYTHON> scripts/run_custom_pipeline.py --target-profile <PROFILE> \ --ds-image <IMAGE> --name <CHECK_NAME> \ --cmd '<COMMAND>' --expect-regex '<PATTERN>' --yes \ [--allow-network] [--input <FILE>] ``` Immediately reproduce the complete result table and local run directory in the user-facing response; never rely on tool output alone. A PASS needs real evidence such as frames, objects, or validated output—not EOS alone. ## Step 8 — Report and cleanup Report target OS/GPU/driver and driver CUDA capability separately from the WSL host Toolkit and container CUDA/TensorRT versions. Include changes, image, verification results, and log path. Then: - remove Windows staging files using the same secure target profile; - stop temporary services; - retain private verification logs only when the user wants them; - offer to delete the target profile: ```bash python scripts/configure_target.py delete --profile <PROFILE> --yes ``` ## Resources - `scripts/configure_target.py`, `bootstrap.py`, `winrm_exec.py` — secure target profile, controller environment, and remote execution. - `scripts/wsl_provision_deepstream.sh` — driver/Toolkit/container compatibility gates and provisioning. - `scripts/run_verification.py`, `run_custom_pipeline.py` — fixed or confirmed custom verification. - `references/` — setup, secure WinRM, version routing, and troubleshooting.
View on GitHub