Artifacts

041 · ARTIFACTS

Artifacts

Versioned file sets over buckets you own

Checkpoints next to your GPUs, resumable anywhere.Your own buckets in AWS, GCP, Azure or any S3 endpoint, as one global store of versioned file sets. Every write lands in the writer's region.

Read the docsAgents: /llms.txt · curl any page
$0
per GB written to a bucket in the box's region
≈ $2
to resume a 20 GB checkpoint across clouds
≈ $700
the same week of writes, sent out of the cloud

01 · Writes are the volume

Write where you train. Read across clouds, rarely.

A training run writes a checkpoint every half hour and reads one back a few times, when it resumes somewhere new. Writes into the box's own region cost nothing; sending them out of the cloud costs real money. So every write lands next to the GPUs, and the one read that crosses clouds is noise. Nothing is replicated ahead of time.

Where the writes goPer GBFor the run
A bucket in the box's own region$0$0
Same cloud, another region≈ $0.02≈ $130
Out of the cloud: another cloud, Tigris, R2≈ $0.08–0.12≈ $550–800
One run: a 20 GB checkpoint, weights plus Adam state, every 30 minutes for a week on spot boxes. 336 checkpoints, about 6.7 TB written. One cross-cloud resume of the latest costs about $2; ten of them, $20.

02 · Checkpointing, the worked example

A spot run hops clouds. Its checkpoints follow it.

  1. 01aws us-east-1
    step 100 … 500

    Writes to S3 in us-east-1. Preempted.

  2. 02gcp europe-west4
    step 510 … 900

    Reads step 500 once, across clouds. Writes to GCS in europe-west4.

  3. 03azure westeurope
    step 910 …

    Reads step 900 once. Writes to Blob in westeurope.

SkyPilot brings a preempted job back wherever GPUs are, with the same command. --resume latest opens the artifact from its latest version, which fences the old box should it still be alive, and returns that version signed. The run reads it once across clouds, then every checkpoint after lands in your bucket in the new region.

zsh
# From SexpGPU's release with o41-checkpoint, in review.
# The only change to a run: the location string.
$ export O41_ARTIFACTS_API_KEY=ak_…
$ SEXPGPU_CHECKPOINT_DIR=o41://experiments/run-1234 \
    sexpgpu run train.sx --resume latest
# Preempted; SkyPilot brings it back on GCP. Same command.
resumed step-00000500 from aws us-east-1 (cross-cloud)
saved step-00000510 to gcp europe-west4 (region)

03 · Four ways in

SexpGPU, Rust, the shell, or plain HTTP.

Every operation resolves to PUTs and GETs against S3, GCS, Azure Blob or another S3 endpoint, each signed for one object. Any language with an HTTP client can read and write, and no box ever holds a bucket key.

O41-CHECKPOINT · RUST
use o41_checkpoint::{open, step_name, Config};

let checkpoints =
    open("o41://experiments/run-1234", Config::from_env()?).await?;

// The latest, or None on an empty artifact, and the one writer.
let (resumed, mut writer) = checkpoints.resume().await?;
if let Some(at) = &resumed {
    let state = at.file("state.json")?.bytes().await?;
}

writer
    .save(&step_name(510), files, meta)  // lands in this box's region
    .await?;
CLI · @O41/ARTIFACTS
npx @o41/artifacts login
npx @o41/artifacts ls experiments/
npx @o41/artifacts versions experiments/run-1234
npx @o41/artifacts get o41://experiments/run-1234/latest ./ckpt
HTTP · ANY LANGUAGE
curl -H "Authorization: Bearer $O41_ARTIFACTS_API_KEY" \
  "https://artifacts.041.io/api/v1/versions/read?artifact=experiments/run-1234&version=latest&urls=1"
# → { "version": "step-00000900", "transfer": "cross-cloud",
#     "files": [{ "name": "params.safetensors", "url": "https://…" }] }

04 · A control plane, not a store

01

Your buckets, your bill

Bytes never pass through us. Boxes PUT and GET straight against S3, GCS, Azure Blob or any S3 endpoint with URLs signed for one object.

02

No cloud keys to leak

Clouds connect by OIDC federation: the app is an issuer your account trusts for one subject. Revoking is deleting a role.

03

Training continues

A region without a bucket writes to its cloud's default, then to your fallback, with a warning. A cache miss, never an error.

04

Self-describing buckets

Every version ends with _manifest.json beside its files. Read your own bucket with your own keys if we are ever down.

Bring your buckets.

Connect a cloud, pick a fallback, point a run at o41://. Questions: info@041.io