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