Skip to main content

Project Configuration

C3 projects are configured with a .c3 YAML file at the project root. Run c3 deploy from anywhere in the project to submit a job.

Key differences from running locally

Environment: You declare dependencies via python.project pointing to a directory with pyproject.toml + uv.lock. C3 builds the environment on the GPU automatically. See Environment.

Data mounting: Your data lives in C3's centralised storage. You tell C3 which datasets to mount and where using datasets:. Your script reads from that path as if the files were local. See Data Mounting.

Artifact output: Files on the GPU are discarded when the job ends. Write results to $C3_ARTIFACTS_DIR or a directory listed in output:. Only these are collected. See Artifact Output.

Configuration reference

FieldTypeDescription
projectstringProject name (auto-generated if not set). Lowercase alphanumeric + hyphens.
scriptstringRequired. Path to a bash script with your execution commands (e.g. run.sh), relative to .c3
gpustringGPU profile (e.g. l40, h100-80gb, a100-80gb-pcie). See c3 list
timestringMaximum runtime in HH:MM:SS format. You're only charged for actual usage
job_namestringJob display name
python.projectstringPath to Python project dir (must contain pyproject.toml + uv.lock)
datasetslistDatasets to mount (ref + optional mount). See Data Mounting
outputlistDirectories to collect as artifacts. See Artifact Output

Full example

All job configuration goes in .c3. The script field points to a bash script containing your execution commands — no #SBATCH or #C3 directives needed.

# .c3
project: my-experiment
script: run.sh
gpu: l40
time: "04:00:00"
job_name: train-model

python:
project: ./

datasets:
- ref: /datasets/imagenet
mount: /data/imagenet

output:
- ./checkpoints
- ./results
# run.sh
#!/bin/bash
python3 train.py

Creating a new project

cd my-project
c3 init

This creates a .c3 file with sensible defaults. Edit it and deploy with c3 deploy.

API keys

For team billing or CI/CD, add an API key to .c3.local (keep this file out of version control):

# .c3.local — secrets (add to .gitignore)
api_key: c3_key_abc123def456...

Create keys with c3 apikey create my-team-key. The API key takes priority over c3 login credentials.