| name | vastai-deploy-integration |
| description | Deploy ML training jobs and inference services on Vast.ai GPU cloud.
Use when deploying GPU workloads, configuring Docker images,
or setting up automated deployment scripts.
Trigger with phrases like "deploy vastai", "vastai deployment",
"vastai docker", "vastai production deploy".
|
| allowed-tools | Read, Write, Edit, Bash(vastai:*), Bash(docker:*), Bash(ssh:*) |
| version | 1.11.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","vast-ai","deployment"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Vast.ai Deploy Integration
Overview
Deploy ML training jobs and inference services on Vast.ai GPU cloud. Covers Docker image optimization, automated provisioning scripts, data transfer strategies, and deployment automation.
Prerequisites
- Vast.ai CLI authenticated
- Docker image published to a registry
- Training/inference code tested locally
Instructions
Step 1: Optimized Docker Image
# Dockerfile.vastai — optimized for fast pulls on Vast.ai
FROM pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime
# Install dependencies in a single layer
COPY requirements.txt /tmp/
RUN pip install --no-cache-dir -r /tmp/requirements.txt && rm /tmp/requirements.txt
# Copy application code
COPY src/ /workspace/src/
COPY scripts/ /workspace/scripts/
WORKDIR /workspace
CMD ["python", "src/train.py"]
docker build -t ghcr.io/yourorg/training:v1 -f Dockerfile.vastai .
docker push ghcr.io/yourorg/training:v1
Step 2: Automated Deployment Script
"""deploy.py — Automated Vast.ai deployment with monitoring."""
import subprocess, json, time, argparse, sys
def deploy(args):
query = (f"num_gpus={args.gpus} gpu_name={args.gpu} "
f"reliability>{args.reliability} dph_total<={args.max_price} "
f"disk_space>={args.disk} rentable=true")
offers = json.loads(subprocess.run(
["vastai", "search", "offers", query, "--order", "dph_total",
"--raw", "--limit", "5"],
capture_output=True, text=True, check=True).stdout)
offers:
(, file=sys.stderr)
sys.exit()
offer = offers[]
(
)
cmd = [, , , (offer[]),
, args.image, , (args.disk)]
args.onstart:
cmd.extend([, args.onstart])
result = json.loads(subprocess.run(
cmd, capture_output=, text=, check=).stdout)
instance_id = result[]
()
_ ():
info = json.loads(subprocess.run(
[, , , (instance_id), ],
capture_output=, text=).stdout)
info.get() == :
()
instance_id, info
time.sleep()
TimeoutError()
__name__ == :
parser = argparse.ArgumentParser()
parser.add_argument(, default=)
parser.add_argument(, =, default=)
parser.add_argument(, required=)
parser.add_argument(, =, default=)
parser.add_argument(, =, default=)
parser.add_argument(, =, default=)
parser.add_argument(, default=)
deploy(parser.parse_args())