Agent skill · software engineering · wshobson

spark-environment-setup

Set up a working ML training/inference environment on NVIDIA DGX Spark (GB10, aarch64, CUDA 13). Use when installing PyTorch/Unsloth/TRL/vLLM on DGX Spark, hitting libcudart or wheel-ABI errors on aarch64, or choosing between NGC containers and bare pip installs.

Why this skill is useful

Adds specific installation scripts and container management procedures for setting up a specialized ML environment on NVIDIA DGX Spark that are not commonly found in public documentation.

What it needs

Requires docker installed locally. About 5k tokens when loaded. Last updated 2026-08-05. 38,570 stars on the source repository.

What this skill does

Spark Environment Setup DGX Spark ships a GB10 Grace Blackwell chip: aarch64 CPU, SM121 GPU, 128GB unified memory, CUDA 13. This is a narrower and younger platform than a standard x86 CUDA 12 box, so package selection and ABI matching matter more than usual — the wheel ecosystem for aarch64 + CUDA 13 is still filling in. When to Use This Skill Setting up a fresh Spark box for training or inference. Hitting an import error mentioning libcudart, a missing symbol, or a wheel that "installed fine but won't load." A framework install (PyTorch, Unsloth, TRL, vLLM, xformers) fails, hangs, or silently falls back to CPU. Deciding whether to use an NGC container or bare pip. Restoring a working setup after an OS reinstall or a base-image update, needing to re-verify from scratch. Each of these accepts the same general fix: match the container/wheel combination to CUDA 13 and SM121, don't fight the ABI. Container-First Rule Quick decision, before the detail below: Standard training/inference work → NGC PyTorch container. Unsloth-centric fine-tuning → Unsloth container (it ships the pinned Triton/xformers/transformers combination already validated for that path). Neither fits (custom system package, local IDE interpreter) → bare pip, following the exact sequence further down. Default to a container. Use nvcr.io/nvidia/pytorch:25.09-py3 as the base for general work — the newest tag confirmed working on this hardware; pull a newer blessed tag if locally available rather than hard-blocking on 25.11-py3. NGC's tag is dated, so running it directly is fine: unsloth/unsloth:dgxspark-latest is a moving tag by contrast — resolve and pin its digest before running it for anything reproducible; the bare tag is a discovery step only, not the default invocation. Full pull-inspect-pin sequence and flag rationale/volume mounts for finetuning/ run dirs: references/container-workflow.md. Treat bare pip as the exception. The reason for the container-first stance is pinning, not convenience. …

How to use it

Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:

@skills wshobson/spark-environment-setup

View the source on GitHub

Browse the @skills marketplace