Puffdeploy 🐡
Deploy open-source LLMs directly to your own AWS/GCP account with one command. Zero Docker, zero Kubernetes, scale-to-zero.
Contents
Status
- Alpha: Under heavy development
- Beta: Ready for use. But go easy on us, there may be a few kinks.
- 1.0: Use in production!
This repo is still under heavy development and the documentation is evolving. You're welcome to try it, but expect some breaking changes. Watch "releases" of this repo to receive a notification when we are ready for Beta. And give us a star if you like it!
Example
# 1. Initialize a model service
puff init my-model
cd my-model
# 2. Deploy to AWS with scale-to-zero
puff deploy
# Output:
# Replica ready at http://34.201.45.12:8000
# Test your endpoint:
# curl -X POST http://34.201.45.12:8000/predict \
# -H "Content-Type: application/json" \
# -d '{"prompt": "Hello world"}'
Introduction
What is this?
This is a CLI and deployment engine that allows you to deploy open-source LLMs directly to your own cloud account (AWS/GCP) with a single command.
It works like this:
- the CLI reads your model code (
app.py) and hardware spec (puffdeploy.yaml) - it provisions an optimized Spot or On-Demand instance (via SkyPilot) directly inside your cloud account
- it prepares the runtime, loads the weights, verifies the health probe, and prints a ready-to-test
curlcommand.
Cool, but why not just use Modal, RunPod, or Baseten?
A few reasons:
- Your data, prompts, and model weights never leave your own AWS/GCP account. Zero third-party servers, and zero SOC2 or HIPAA compliance headaches
- You don't have to pay a $50k-$100k enterprise paywall just to deploy inside your private VPC. Puffdeploy gives you that exact serverless experience natively in your account on day one
- Zero framework lock-in. Modal forces you to rewrite your code with proprietary decorators (
@modal.function)
What are the benefits?
- The beauty of deploying directly to your own cloud account is that your proprietary data, customer queries, and model weights never leave your security perimeter. Zero third-party compliance reviews (SOC2/HIPAA) needed.
- Cost efficiency. Puffdeploy defaults to Spot instances (
use_spot: true), allowing you to serve models on AWS without burning $1,500+/mo on idle, unmanaged GPUs. - This is built on SkyPilot, an extremely robust open-source compute orchestrator developed at UC Berkeley.
What can I build with this?
- Private LLM inference APIs (any open-weights checkpoint or fine-tuned model)
- Custom embedding & reranking microservices
- Real-time reasoning and agent tool-calling backends
- Domain-specific fine-tuned models hosted securely inside your VPC
- High-throughput batch inference endpoints
Getting started
Deploy a real, open-weights Small Language Model (Qwen/Qwen2.5-0.5B-Instruct) directly to your AWS account on a Spot instance (~$0.07/hr) in under 2 minutes.
- Install and verify cloud access
pip install puffdeploy
puff check
- Create project folder
mkdir llm-service
cd llm-service
- Create
app.py
Paste this into app.py:
from fastapi import FastAPI
from transformers import pipeline
app = FastAPI()
pipe = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct")
@app.get("/health")
def health():
return {"status": "ok"}
@app.post("/predict")
def predict(data: dict):
return {"response": pipe([{"role": "user", "content": data["prompt"]}], max_new_tokens=50)[0]["generated_text"][-1]["content"]}
- Create
puffdeploy.yaml
Paste this into puffdeploy.yaml:
name: llm-service
compute:
cpus: 4+
memory: 8+
use_spot: true
runtime:
setup: pip install fastapi uvicorn "transformers<5.0.0" accelerate
- Deploy to the cloud
Run:
puff deploy
Puffdeploy provisions the AWS Spot instance, installs dependencies, verifies the /health probe, and outputs your live replica URL.
- Test your live endpoint
Query your live inference API using curl:
curl -X POST http://<ENDPOINT_IP>:8000/predict \
-H "Content-Type: application/json" \
-d '{"prompt": "Say this is a test"}'
Output:
{
"response": "This is a test."
}
- Clean Up
When finished testing, terminate all cloud compute to avoid lingering charges:
puff down --all
Contributing
We welcome any issues, pull requests, and feedback. See CONTRIBUTING.md for local development setup.
License
This repo is licensed under Apache 2.0.
Credits
- https://github.com/skypilot-org/skypilot - A lot of this implementation leveraged the amazing work already done on SkyPilot.
- https://github.com/basetenlabs/truss - Model packaging and serving conventions are powered by the amazing Truss framework.
Release files for puffdeploy 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| puffdeploy-0.2.0.tar.gz | 1.1 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| puffdeploy-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / puffdeploy-0.2.0.tar.gz
| Download URL | puffdeploy-0.2.0.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ef4c03da9b8f0808d0f16d1863f7dbbeaea295929a3f40abd01d852987b58f09
|
|
BLAKE2b-256 checksum How to use checksums |
4b8382c8dd3e5fbe6f0ac2dd829f8f0d8e4f046e03aaecda427ab87979398944
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / puffdeploy-0.2.0-py3-none-any.whl
| Download URL | puffdeploy-0.2.0-py3-none-any.whl |
|---|---|
| Size | 18.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d2527466219d559ed200416c6848c1a150b2d8c35305adbf709a0e41fbb52acc
|
|
BLAKE2b-256 checksum How to use checksums |
b60354a50f5f19fdc55990c02023c9305857251481f4cdf69e616fb160cf8541
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log