Config-driven RunPod orchestration for reusable GPU project deployments.
Project description
runpod-deploy
runpod-deploy is a config-driven RunPod orchestration package for reusable
GPU project deployments. It owns the RunPod mechanics; consumer repos own their
job configs and project commands.
Quickstart
pip install runpod-deploy
# Smoke-test with the bundled hello example (no RunPod account needed):
runpod-deploy run --config examples/hello/hello.yaml --offline-dry-run
# Or against the cheapest end-to-end pipeline:
runpod-deploy validate --config examples/smoke/a4000_smoke.yaml
runpod-deploy run --config examples/smoke/a4000_smoke.yaml --offline-dry-run
runpod-deploy logs --config examples/smoke/a4000_smoke.yaml # live-tail the active pod's run log
runpod-deploy stop --state-file ~/.runpod-smoke-current # stop the active pod
--offline-dry-run prints the provision/stage/launch/pull/stop command shape
without calling runpodctl, SSH, or rsync. For a real end-to-end deploy on a
cheap GPU, see examples/smoke/README.md — it
walks through the per-host setup (SSH key registration, rsync version) once.
For new consumers, docs/source/quickstart.md is the 5-minute
onboarding walkthrough, and docs/source/lifecycle.md explains
what happens at each phase of a runpod-deploy run.
Optional: shell tab completion. Install via the [completion] extra and
register with your shell:
pip install runpod-deploy[completion]
eval "$(register-python-argcomplete runpod-deploy)" # bash/zsh
Add the eval line to your ~/.bashrc or ~/.zshrc for persistence.
Contributors: see CONTRIBUTING.md for the editable
install (uv pip install -e ".[dev]"), pre-commit setup, and the
fork → branch → PR → CI flow.
Examples
| Config | What it does |
|---|---|
smoke/a4000_smoke.yaml |
Minimal nvidia-smi check on RTX A4000/A4500/A100 in EU-RO-1 — cheapest end-to-end pipeline test |
prompt-injection-v3/v3_1_ephemeral.yaml |
Full prompt-injection-v3 threshold-free study on A100/H100, ephemeral storage |
prompt-injection-sdd/headline_resume.yaml |
Headline/resume evaluation, network-volume storage |
research-kb/pdf_embed_gpu.yaml |
GPU-accelerated PDF embedding pipeline |
post_transformers/gpu_benchmark.yaml |
post-transformers GPU benchmark workload |
Consumer-owned configs
The recommended pattern is for the consumer repo to own its runpod-deploy
job YAML alongside the project. The YAML lives at
consumer-repo/configs/runpod/*.yaml, and local.project_root is set
relative to that file's directory:
my-project/
├── pyproject.toml
├── src/...
└── configs/
└── runpod/
└── headline.yaml # local.project_root: ../..
# configs/runpod/headline.yaml
local:
project_root: ../.. # one level for runpod/, one for configs/
../.. resolves to my-project/, which is what gets rsynced to the pod.
A common off-by-one — ../../.. from the same location — resolves to your
$HOME directory and would stage the entire home tree to the pod;
runpod-deploy validate (and any run) fails-fast in this case.
The example configs under examples/ are not consumer-owned — they live
inside this repo, so they use longer paths (../../../prompt-injection-v3)
to reach back to a sibling consumer repo. Don't copy that pattern when
authoring configs inside your own consumer repo.
Model
Version 1 supports one job per YAML file:
- RunPod pod settings: image, datacenter, GPU order, storage mode, cost cap.
- Local staging: rsync pushes from the consumer repo to the pod.
- Remote setup and preflight commands.
- Detached remote run script, success marker, and failure markers.
- Artifact pulls and a reproducibility manifest.
The core is intentionally project-neutral. If a project needs special behavior, put it in its config or shell commands. Python hooks are reserved for a future schema version after at least two projects need the same extension point.
Docs
Full site (searchable, with API reference): https://brandon-behring.github.io/runpod-deploy/
Direct links to the GitHub-rendered markdown:
- Quickstart — 5-minute onboarding
- Lifecycle — what happens at each phase of a
run - Config reference
- RunPod gotchas
- Extending guide
- V3 migration guide
- Coding standards
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file runpod_deploy-0.8.0.tar.gz.
File metadata
- Download URL: runpod_deploy-0.8.0.tar.gz
- Upload date:
- Size: 169.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5033eeabbf073b4f29cbd5a58a1c25609db7937581bac7a75cf113120ca0ac9f
|
|
| MD5 |
6629fe3ee79755f90807b5eff5e51e59
|
|
| BLAKE2b-256 |
4253683d43a72d960d0f067f42efd171826dc82a5dda89482b426f518b60cd13
|
Provenance
The following attestation bundles were made for runpod_deploy-0.8.0.tar.gz:
Publisher:
release.yml on brandon-behring/runpod-deploy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
runpod_deploy-0.8.0.tar.gz -
Subject digest:
5033eeabbf073b4f29cbd5a58a1c25609db7937581bac7a75cf113120ca0ac9f - Sigstore transparency entry: 1555249034
- Sigstore integration time:
-
Permalink:
brandon-behring/runpod-deploy@474ffe95ab4afced6b1d0165e7046757028e1316 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/brandon-behring
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@474ffe95ab4afced6b1d0165e7046757028e1316 -
Trigger Event:
push
-
Statement type:
File details
Details for the file runpod_deploy-0.8.0-py3-none-any.whl.
File metadata
- Download URL: runpod_deploy-0.8.0-py3-none-any.whl
- Upload date:
- Size: 57.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d15b3816788e7f7f0d323db534f2182cf5631faecb8e6bf7fed389d37da27f57
|
|
| MD5 |
6564b50167c5d5faa6de5eb4ee06af43
|
|
| BLAKE2b-256 |
454d21bd0269c67d55f4e9cc1dc7765b942830ea2c331b0e03f6017e6a280489
|
Provenance
The following attestation bundles were made for runpod_deploy-0.8.0-py3-none-any.whl:
Publisher:
release.yml on brandon-behring/runpod-deploy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
runpod_deploy-0.8.0-py3-none-any.whl -
Subject digest:
d15b3816788e7f7f0d323db534f2182cf5631faecb8e6bf7fed389d37da27f57 - Sigstore transparency entry: 1555249059
- Sigstore integration time:
-
Permalink:
brandon-behring/runpod-deploy@474ffe95ab4afced6b1d0165e7046757028e1316 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/brandon-behring
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@474ffe95ab4afced6b1d0165e7046757028e1316 -
Trigger Event:
push
-
Statement type: