Forky Pig: The Demo
August 2, 2026 · View on GitHub
Ephemeral dev boxes fit for AI Workloads is now here!
Turn one GPU server into an isolated executeion platform for agents, testing, anything your heart desires!
This is a single-instance demonstration of Forky Pig. Instead of Firecracker, we use Porker VMM. This allows for GPU passthrough to vm environments. This means it's NOT a container trick, it's NOT some namespace hack; it's a real isolated environment!
Pre-reqs
You'll need:
- A bare-metal Ubuntu 24.04 host with an NVIDIA GPU
- Root (SSH in as root, or a user with sudo)
- VT-d / AMD-Vi (IOMMU) turned on in the BIOS — most server boards have it, some consumer ones, too!
- ~20 GB free on
/var
Install on a target host:
You will need a baremetal machine somewhere.
sudo ./install/preflight.sh # sanity check — does this box even have what we need?
sudo ./install/host-prep.sh # IOMMU + GPU rebinding. edits boot config, then reboots
# ... box reboots ...
cd forky-pig-0.1.0
sudo ./install/install.sh # the actual install
Running Forky Pig server
I've been running it like so:
sudo -E env DATABASE_URL="postgres://forky:forky@localhost:5432/forky?sslmode=disable" PORT=8080 EXTERNAL_IFACE=wlp0s20f3 EXTERNAL_IP=10.0.0.59 GPU_BDFS=0000:01:00.0 PORKER_BIN_PATH=/home/user/code/firecracker/build/cargo_target/release/firecracker KERNEL_IMAGE_PATH=/home/user/code/firecracker/gpu-kernel-build/out/vmlinux ROOTFS_DIR=/var/lib/forky/rootfs LOG_DIR=./tmp/forky/logs OVERLAY_INITRD_PATH=/home/user/code/vm_hypercomputer/forky-pig-v2/overlay-initramfs.cpio.gz CATALOG_PATH=./catalog.yaml SECRETS_KEY=LosSWgk12uVoPX7tF0+9svYso98gSws8noS7PnveYK8= GPU_DRIVER_BUNDLE_PATH=/home/user/code/firecracker/driver-6.1.155-580.159.03.ext4 ./bin/forky-daemon
You can also do:
sudo systemctl start forky-daemon
sudo systemctl status forky-daemon
sudo journalctl -u forky-daemon -f # follow logs
Your GPU_BDFS will probably be different than mine!
Using Forky Pig
fpig will be dropped into /usr/local/bin/fpig
# use the token install.sh printed
fpig auth login --api-url http://<your-box-ip>:8080
# register your ssh key so you can get into sandboxes
fpig ssh-key add --name laptop --key-file ~/.ssh/id_ed25519.pub
# boot a sandbox with the GPU attached
fpig create --shape gpu.whole --image ubuntu-server --ssh
Forking Images
# 1. Register an image from a Docker reference.
# This pulls + converts to a bootable rootfs asynchronously; --wait blocks
# until it's ready instead of handing you back a "pending" row.
fpig image create \
--name my-nginx \
--reference docker.io/library/nginx:1.27 \
--wait
# 2. Boot a sandbox from that image.
fpig create --shape gpu.whole --image my-nginx --ssh
# → prints a sandbox id (sb_...) and an ssh line
# 3. Change something inside it (this is the state you want to capture).
ssh -p <port> root@<host-ip>
# ... apt install stuff, drop in weights/config, whatever ... then exit
# 4. Fork it — snapshot the running sandbox's disk into a NEW private image.
fpig snapshot sb_xxxxxxxx --name my-nginx-tweaked
# 5. Boot the fork. It carries all your changes from step 3.
fpig create --shape gpu.whole --image my-nginx-tweaked --ssh