Tao Run On Docker
NVIDIAOfficialCreated by NVIDIA Corporation
- Skill
- Tool integration
- Automation and integrations
- Apache-2.0
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The tao-run-on-docker skill provides a standardized interface for executing NVIDIA TAO containerized workloads using the Docker CLI. It implements a four-verb consumer contract (submit, status, logs, cancel) that manages job lifecycles, resource allocation, and container orchestration. The skill handles complex Docker configurations, including GPU device selection, shared memory sizing, NGC authentication, and host-to-container bind mounts, ensuring that jobs run with the correct user identity and environment variables to prevent common permission and cache-related errors.
What it does
- Implements a four-verb lifecycle contract (submit, status, logs, cancel) for TAO jobs.
- Supports execution on local Docker daemons or remote GPU hosts via DOCKER_HOST.
- Configures GPU access, shared memory, and environment variables for deep learning frameworks.
- Manages container naming and labeling for job tracking and discovery.
- Provides patterns for handling bind-mount permissions and writable cache directories.
- Includes diagnostic patterns for container inspection and error resolution.
When to use it
- When you need to execute a single-node TAO model action on a Docker-enabled host.
- When you need to run GPU-accelerated workloads on a remote machine via SSH.
- When you need to integrate TAO job execution into a custom automation pipeline.
- When you need to troubleshoot containerized job failures using standard Docker inspection tools.
Advantages
- Standardizes job execution across different host environments.
- Prevents common container runtime issues like permission errors and cache collisions.
- Enables seamless remote execution without requiring specialized SDKs.
- Provides a clear, predictable interface for job status and log retrieval.
Usage examples
- “Submit a new TAO training job to the local Docker daemon.”
- The agent uses the submit verb to mint a job ID, stage inputs via tao-data-io, and launch the container with appropriate GPU and environment configurations.
- “Check the status of a running TAO job.”
- The agent inspects the container state and maps it to the standard TAO vocabulary (PENDING, RUNNING, COMPLETE, ERROR, UNKNOWN).
- “Cancel a stuck TAO job.”
- The agent forces the removal of the container and updates the job record to CANCELED.
- “Point the execution to a remote GPU server.”
- The agent configures the DOCKER_HOST environment variable to point to the remote host, allowing subsequent commands to execute on the remote machine.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/nvidia/tao-run-on-docker/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip tao-run-on-docker.zip -d .agents/skills
Documentation by NVIDIA Corporation
Docker for NVIDIA GPU Workloads
Standalone install? If this session was not initialized by the TAO skill bank plugin, run the
tao-setupskill first (host preflight, credentials, cross-skill discovery).
The Docker execution platform: a consumer that runs a model/data skill's
spec-bundle by implementing four verbs (submit/status/logs/cancel) over
the docker CLI, on a local daemon or a remote GPU box via
DOCKER_HOST=ssh://. The verbs (§ Execution) sit on top of the docker
conventions in the rest of this file — GPU flags, mounts, NGC auth, inspection,
error modes — which are the how the model/data skill defers to. Single-node
only; for multi-node use SLURM or Kubernetes.
Sources: official Docker CLI reference (https://docs.docker.com/reference/cli/docker/) and NVIDIA Container Toolkit docs.
Prerequisites
Host GPU runtime — by default, NVIDIA driver
>=580, CUDA Toolkit>=13.0, and NVIDIA Container Toolkit>=1.19.0. If the selected model'sreferences/skill_info.yamldeclaresruntime_requirements.gpu_host, pass those values totao-setup-nvidia-gpu-hostinstead. Model requirements override the defaults for that workflow.Docker —
docker --versionmust return ≥ 20.10. Install: https://docs.docker.com/engine/install/.NGC API key for
nvcr.io/*pulls. Get from https://ngc.nvidia.com/.
set -a; source /path/to/.env; set +a # omit if already exported
SB="${TAO_SKILL_BANK_PATH:-${TAO_SKILL_BANK_ROOT:-$PWD}}"
SETUP_SCRIPT="${SB}/skills/platform/tao-setup-nvidia-gpu-host/scripts/setup-nvidia-gpu-host.sh"
bash "$SETUP_SCRIPT" --backend docker --check-only || {
echo "MISSING: TAO GPU host runtime is not ready."
echo "After user approval, run (append --yes for non-interactive agent runs):"
echo " bash \"$SETUP_SCRIPT\" --backend docker --install"
exit 1
}
docker --version
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
[ -n "$NGC_KEY" ] || echo "NGC_KEY unset — cannot pull nvcr.io images"If the selected model declares runtime_requirements.gpu_host, append the
corresponding --min-driver-version, --min-cuda-version, and
--min-container-toolkit-version values to both the check and any approved
install command. Do not apply one model's override to unrelated workflows.
NGC authentication
set -a; source /path/to/.env; set +a # omit if already exported
echo "$NGC_KEY" | docker login nvcr.io -u '$oauthtoken' --password-stdinPersists in ~/.docker/config.json across reboots. Re-run on unauthorized errors.
Execution — the four verbs
Run a spec-bundle by implementing exactly these four verbs, mutating only the
job-record. Status values are the fixed vocabulary from tao-artifacts
(PENDING RUNNING COMPLETE ERROR CANCELED UNKNOWN); native docker states map
below, with the raw state carried in the transition message. $BANK =
${TAO_SKILL_BANK_PATH}.
submit
Stage inputs via
tao-data-io: it picks the storage tier and returns the mount args + compute-frame paths. Docker uses tier A (bind-mount a host dir,-v /host/data:/data) as the norm, or tier C (pass S3 creds, the container fetches). Author the spec file at<stage>/spec.yamlwith those compute-frame paths.Lint the assembled command —
redact_secrets.py lintmust pass (no inline secrets; pass creds as-e VARwith no value).Open the record — this mints the id and binds
results_dirBEFORE launch:JOB_ID=$("$BANK/scripts/tao_job_record.py" open \ --platform docker --image "$IMAGE" \ --network-arch "$ARCH" --action "$ACTION" \ --storage-tier "$TIER" --results-root "$RESULTS_ROOT")Launch detached, naming the container after the id so the other verbs find it (keep
--rmOFF so an exited container stays inspectable):set -a; source /path/to/.env; set +a # omit if already exported CID=$(docker run -d --name "$JOB_ID" --label "tao-job=$JOB_ID" \ --gpus "$GPUS" --shm-size=8g \ -v "$STAGE:/workspace" \ -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e HF_TOKEN -e NGC_KEY \ "$IMAGE" <bundle command, reading /workspace/spec.yaml>)Record RUNNING:
"$BANK/scripts/tao_job_record.py" mark "$JOB_ID" --state RUNNING --backend-ref "$CID".
A submit that skipped step 3 has no id, so it cannot launch — that is the record-then-launch invariant.
status
read -r st code < <(docker inspect --format '{{.State.Status}} {{.State.ExitCode}}' "$JOB_ID" 2>/dev/null) || st=missing| docker state | vocab |
|---|---|
created / restarting | PENDING |
running / paused | RUNNING |
exited, code 0 | COMPLETE |
exited, code ≠ 0 | ERROR |
dead / missing | UNKNOWN (confirm via docker ps -a) |
On a terminal state, mark it — and for tier C, tao-data-io uploads
results before you docker rm (the container is the only copy).
logs
docker logs --tail "${N:-200}" "$JOB_ID" # add -f to follow in-turncancel
docker rm -f "$JOB_ID"
"$BANK/scripts/tao_job_record.py" mark "$JOB_ID" --state CANCELED --source agentLocal vs remote (DOCKER_HOST)
There is no separate "remote docker" — point the daemon at an SSH-reachable box:
export DOCKER_HOST=ssh://user@gpu-host. Every verb above is byte-identical;
the docker CLI marshals the request over SSH (reuses your key, avoids
nested-quoting the command). One consequence: -v bind-mount sources then refer
to the remote host's filesystem, not the launcher — stage data there (tier A)
or fetch in-container (tier C). Fallback for sudo docker-only hosts:
ssh host 'sudo docker …' (same skill, different prefix).
docker run — canonical flags
set -a; source /path/to/.env; set +a # omit if already exported
HOST_RESULTS=/host/results
HOST_UID="$(id -u)"
HOST_GID="$(id -g)"
HOST_USER_NAME="$(id -un)"
[ "$HOST_UID" -ne 0 ] || { echo "Refusing writable Docker launch as UID 0" >&2; exit 1; }
HOST_IDENTITY_ARGS=(--user "$HOST_UID:$HOST_GID")
for group_id in $(id -G); do
[ "$group_id" = "$HOST_GID" ] || HOST_IDENTITY_ARGS+=(--group-add "$group_id")
done
mkdir -p "$HOST_RESULTS/.tao-runtime/home/.cache"/{huggingface,torch,triton,torchinductor,matplotlib}
docker run \
--gpus all \
--rm \
--shm-size=8g \
"${HOST_IDENTITY_ARGS[@]}" \
-v /host/data:/data \
-v "$HOST_RESULTS:/results" \
-e HOME=/results/.tao-runtime/home \
-e USER="$HOST_USER_NAME" -e LOGNAME="$HOST_USER_NAME" \
-e XDG_CACHE_HOME=/results/.tao-runtime/home/.cache \
-e HF_HOME=/results/.tao-runtime/home/.cache/huggingface \
-e TORCH_HOME=/results/.tao-runtime/home/.cache/torch \
-e TRITON_CACHE_DIR=/results/.tao-runtime/home/.cache/triton \
-e TORCHINDUCTOR_CACHE_DIR=/results/.tao-runtime/home/.cache/torchinductor \
-e MPLCONFIGDIR=/results/.tao-runtime/home/.cache/matplotlib \
-e HF_TOKEN -e NGC_KEY \
<image> \
<command>Notes:
--gpus '"device=0,1"'— select GPUs by id, not by count, on any shared host (double-quote-escaped). A count-based request resolves to the first N devices, so--gpus 1can only ever land on GPU 0: if GPU 0 is busy, every job OOMs there while the other GPUs sit idle, and there is no way to steer it —-e NVIDIA_VISIBLE_DEVICESis overwritten by--gpus. Read current occupancy (nvidia-smi --query-gpu=index,memory.used --format=csv) and pass the free ids. Ids may also be GPU UUIDs. Without nvidia-container-toolkit:could not select device driver "" with capabilities: [[gpu]].--rm— clean up the container at exit; omit when you wantdocker logsafter exit.--shm-size=8g— torchrun + PyTorch DataLoaders exhaust the default 64 MB/dev/shmotherwise; size it for multi-GPU training and raise (e.g.16g) if you still hitBus error.--user "$(id -u):$(id -g)"— required by default whenever a bind mount is writable. It prevents root-owned checkpoint trees that the submitting host user cannot clean up.Refuse UID
0for the canonical writable-bind path. If the launcher itself is root, obtain the verified non-root submitting UID:GID explicitly; never infer it from the output-directory owner.--group-add <gid>— preserve supplementary host-group access to shared datasets and workspaces. The canonical array adds every host group except the primary GID.HOME,USER,LOGNAME, and cache redirects — keep frameworks from writing to image-owned locations such as/rootafter the user override. Prepare these directories on the writable mount before launch.USER/LOGNAMEare load-bearing, not cosmetic: an arbitrary--userUID has no/etc/passwdentry in the image, and torch 2.x callsgetpass.getuser()at import (torch/_dynamo→ inductor cache-dir setup) — with neither env var set the container crashes withKeyError: 'getpwuid(): uid not found: <uid>'before any workload code runs. Any non-empty name satisfies it; the name does not need to exist in the image.-v host:container— bind mount; the command references container paths only.-e VAR— passthrough from parent shell (no value needed if already set). Use this form for secrets.
Container name collision
docker run --name X fails if a container named X already exists. Defensive pattern before reusing a name:
docker stop my-worker 2>/dev/null; docker rm my-worker 2>/dev/null
docker run --name my-worker ...Detached + exec pattern
For multi-step workflows on the same container (download → run → post-process), avoid restart cost:
HOST_RESULTS=/host/results
HOST_UID="$(id -u)"
HOST_GID="$(id -g)"
[ "$HOST_UID" -ne 0 ] || { echo "Refusing writable Docker launch as UID 0" >&2; exit 1; }
HOST_IDENTITY_ARGS=(--user "$HOST_UID:$HOST_GID")
for group_id in $(id -G); do
[ "$group_id" = "$HOST_GID" ] || HOST_IDENTITY_ARGS+=(--group-add "$group_id")
done
mkdir -p "$HOST_RESULTS/.tao-runtime/home/.cache"/{huggingface,torch,triton,torchinductor,matplotlib}
docker run -d --name <worker> \
--gpus all --shm-size=8g \
"${HOST_IDENTITY_ARGS[@]}" \
-v <host-data>:/data \
-v "$HOST_RESULTS:/results" \
-e HOME=/results/.tao-runtime/home \
-e USER="$(id -un)" -e LOGNAME="$(id -un)" \
-e XDG_CACHE_HOME=/results/.tao-runtime/home/.cache \
-e HF_HOME=/results/.tao-runtime/home/.cache/huggingface \
-e TORCH_HOME=/results/.tao-runtime/home/.cache/torch \
-e TRITON_CACHE_DIR=/results/.tao-runtime/home/.cache/triton \
-e TORCHINDUCTOR_CACHE_DIR=/results/.tao-runtime/home/.cache/torchinductor \
-e MPLCONFIGDIR=/results/.tao-runtime/home/.cache/matplotlib \
--entrypoint sh \
<image> -c "tail -f /dev/null"
docker exec <worker> <step_1>
docker exec <worker> <step_2>
docker stop <worker> && docker rm <worker>Pull-if-missing idiom
docker image inspect <image> >/dev/null 2>&1 || docker pull <image>Labels for discovery
Tag containers for filtered listing later:
docker run --label tao-toolkit ...
docker ps --filter 'label=tao-toolkit'Mount patterns
The container expects its data at conventional paths defined by the image (often /data, /results, /workspace/checkpoints). The host side is arbitrary. The command inside docker run references container paths only.
Writable-mount ownership invariant
For every writable bind mount, run as the submitting host UID:GID by default.
Pre-creating the mount root is not sufficient when a root container can create
deeper 0755 directories: deletion is controlled by the parent-directory
permissions, so those subtrees still become inaccessible to the host user.
Container --rm and docker rm remove container state only; neither deletes or
repairs bind-mounted checkpoints.
An image may run as root only when its documentation or a preflight proves that
host-user execution is incompatible. Treat this as an explicit launch
exception. Isolate its writable outputs and, after every terminal exit or
cancellation, normalize ownership before another experiment starts. For an
image with /bin/sh and chown, the post-run repair is:
HOST_UID="$(id -u)"
HOST_GID="$(id -g)"
docker run --rm --user 0:0 --entrypoint /bin/sh \
-v /host/results:/owned-output \
<same-approved-image> \
-c 'chown -R "$1:$2" /owned-output' sh "$HOST_UID" "$HOST_GID"Apply the repair to every writable output/cache mount. If the agent cannot run
or verify the ownership normalization, it must not use the root-required
exception. Never substitute chmod 777 as the normal fix.
Env-var conventions
Common passthrough vars for TAO-style workloads (the calling skill declares which it needs):
NGC_KEY—nvcr.iopulls; some runtimes also read at runtimeHF_TOKEN— gated HuggingFace model downloadsAWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_ENDPOINT_URL— S3 I/O inside the containerWANDB_API_KEY— optional W&B logging
Use -e VAR (no =value) when the var is in the parent shell. Avoid placing secrets on the command line.
Alternative GPU selection: -e NVIDIA_VISIBLE_DEVICES=0,1 (or all) and -e NVIDIA_DRIVER_CAPABILITIES=all instead of --gpus. The --gpus flag is preferred on standard x86 hosts; the env-var form is older and is what runtime=nvidia (Tegra/Jetson) requires.
Container inspection
docker ps # running containers only
docker ps -a # all containers, including exited
docker ps --filter status=running --format '{{.Names}} {{.Image}}'
docker logs <name_or_id> # stdout/stderr
docker logs -f <name_or_id> # follow (tail -f equivalent)
docker logs --tail 100 <name_or_id> # last N lines
docker inspect <name_or_id> # full config, mounts, env, network, state (JSON)
docker inspect --format '{{.State.Status}}' <name_or_id>
docker stats # live CPU/mem/network/block I/O
docker stats --no-stream # one snapshot, non-interactivedocker inspect is the canonical source of truth for a container's mounts, env, cmd, network, and exit code. Use it to debug why a container isn't behaving as expected.
Image management
docker pull <image>
docker image ls
docker system df # Docker-managed image/layer/volume usagePull once per host; docker run reuses cached image. NVIDIA images are typically 5-40GB.
Split-disk data-root relocation
Some cloud GPU providers ship with a small root volume + larger ephemeral. Docker writes to /var/lib/docker on root by default — large images fill it. Check:
df -h / # root volume size/free
lsblk # all block devices and mount pointsIf / is smaller than your total image footprint and there's a larger disk mounted elsewhere, relocate before pulling images:
sudo systemctl stop docker
sudo mkdir -p <large_volume_path>/docker
sudo rsync -aP /var/lib/docker/ <large_volume_path>/docker/
sudo mv /var/lib/docker /var/lib/docker.old
sudo tee /etc/docker/daemon.json <<'EOF'
{ "data-root": "<large_volume_path>/docker" }
EOF
sudo systemctl start docker
docker info | grep 'Docker Root Dir'
sudo rm -rf /var/lib/docker.oldNetworks (multi-container patterns)
For microservice containers that talk to each other by name, create a docker network and attach containers:
docker network create tao-net
docker run --network tao-net --name api ...
docker run --network tao-net --name worker ... # can resolve `api` by nameMost TAO training workloads don't need this — single container per job.
Common error modes
could not select device driver "" with capabilities: [[gpu]] — NVIDIA Container Toolkit missing or Docker is not configured for the NVIDIA runtime. Run tao-setup-nvidia-gpu-host with --backend docker --install after user approval (append --yes for a non-interactive agent run), then restart Docker.
unauthorized: authentication required on docker pull — NGC key invalid/missing. Re-run docker login nvcr.io.
no space left on device — first identify which filesystem and storage
class is full; bind-mounted training outputs are not counted by docker system df and are not fixed by pruning Docker images:
df -h / /var/lib/docker <results_root>
docker system df
docker inspect <tao-container> --format '{{json .Mounts}}'
du -xhd1 <results_root> 2>/dev/null | sort -h
find <results_root> -maxdepth 3 -printf '%u:%g %m %s %p\n' 2>/dev/null | headFor a bind mount, clean only job directories whose record is in a terminal state
(tao_job_record.py get "$JOB_ID"), via a reviewed ownership repair; never assume
docker system prune touches them. For Docker's own root, relocate data-root as described
above. docker system prune -a --volumes is destructive and may remove unused
images and volumes belonging to other workflows, so run it only after explicit
user approval and a reviewed docker system df inventory.
Bus error / DataLoader worker exited unexpectedly — /dev/shm too small. Increase shared memory with --shm-size (e.g. --shm-size=16g).
permission denied on bind-mounted paths — container UID ≠ host UID, or HOME/a framework cache still points to an image-owned directory. Use the canonical host UID:GID mapping and writable HOME/cache redirects above. For a documented root-required image, complete the mandatory post-run ownership normalization before retrying.
KeyError: 'getpwuid(): uid not found: <uid>' at import of torch/torchvision — the container runs as a --user UID with no /etc/passwd entry and no USER/LOGNAME env var, so getpass.getuser() falls through to pwd.getpwuid() at import time. -e HOME=... alone does not fix it. Keep the UID:GID mapping and launch with the canonical identity env block (-e USER=... -e LOGNAME=... + writable HOME + cache redirects). Do not work around it by running as root; that recreates the root-owned-outputs hazard.
Error: No such container: <name> after docker run -d — container crashed on startup. docker ps -a shows exited; docker logs <name> for cause. Drop --rm while debugging.
Scope boundary
This skill both runs TAO jobs on Docker (§ Execution) and documents the docker how that other skills defer to. Related:
tao-skill-bank:tao-run-on-brev— provisions a Brev instance, then defers the container-how to these same docker verbs.tao-skill-bank:tao-launch-workflow— the intake/routing front door and the platform-agnostic four-verb contract this skill implements.tao-skill-bank:tao-data-io— the storage-tier decision + staging + the compute-frame verify gate thesubmitverb calls.
Model and data skills produce the spec-bundle (what); this skill runs it (how).
Files
- ATTRIBUTION.mdAdded by AutoGineer921 B
- BENCHMARK.md7.2 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md19.5 KiB
- config/skillspector-baseline.yaml1.5 KiB
- eval.config3.4 KiB
- evals/evals.json2.5 KiB
- references/skill_info.yaml869 B
- skill-card.md4.1 KiB
- skill.oms.sig5.2 KiB
LICENSE
Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Declares allowed tools, Needs an API key, Needs a command-line tool, Needs Node.js
The author says: Requires NVIDIA driver 580 or newer, CUDA Toolkit 13.0 or newer, Docker, and NVIDIA Container Toolkit 1.19.0 or newer, unless the selected model declares different minimums in runtime_requirements.gpu_host.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- NVIDIA Corporation
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/tao-run-on-docker · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA Corporation or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download tao-run-on-docker.zip