MODULE 4 · DAY 1
Packaging Models as OCI Artifacts
Ship a model like a container image — versioned, layered, registry-native
Gourav Shah · School of DevOps & AI · KitOps · ModelKit · ORAS
M4·01
What you'll learn
Why models belong in OCI registries — and how to pack, push, and pull them.
By the end you'll treat a model the way you treat an image: tagged, stored, and shipped.
M4·02
The problem with loose model files
Weights here, prompt there, config in Slack — every receiver re-assembles by hand.
Logistics teams solved this decades ago with a shipping manifest and a sealed, labelled crate.
M4·03
A ModelKit is a sealed, labelled crate
One signed bundle — open it and the contents are exactly what the manifest says.
Model weights + adapter + config + prompts, versioned together — the manifest names every item.
M4·04
An OCI artifact is a layered blob store
The same mechanism that stores container images stores anything — including model checkpoints.
A layer is just bytes + a digest. Registries dedupe: retrain the prompt, only the config layer is pushed.
M4·05
KitOps, ModelKit & ORAS
A CNCF stack: the format, the CLI, and the library that speaks to every registry.
Because it's plain OCI underneath, the same commands work on every compliant registry.
M4·06
The Kitfile — your shipping manifest
A tiny YAML file; each field maps to one typed OCI layer.
kit pack reads the Kitfile, hashes each file into a layer, and stores it in the local kit cache.
M4·07
The lifecycle: pack → push → pull → run
From a workspace to a serving node — the registry is the hub in the middle.
OCI is the distribution mechanism here, not the execution mechanism — the crate ships; a separate runtime opens it.
M4·08
Selective pull — grab only what you need
A warehouse shelved by chapter: the researcher who needs chapter 3 asks for just that box.
The typed-layer manifest is the catalogue — each consumer pulls its box, not the whole book.
M4·09
One artifact, every registry
Same kit push / unpack syntax — only the target reference changes.
TLS by default; add --plain-http for local or air-gapped HTTP-only registries.
M4·10
ModelKit / ORAS vs docker model package
Both pack a GGUF into an OCI artifact — the difference is ecosystem scope.
Want portability across registries and runtimes — including Flux into Kubernetes or air-gapped Harbor? Take the CNCF path.
M4·11
TO THE LAB
Ship your model like an image
In the lab: pack SmolLM2 + prompts, push to a registry, pull on a clean dir, then selective-pull the weights.
Next up: Lab — Pack & Push a ModelKit with KitOps · Gourav Shah · School of DevOps & AI
M4·12