Auto-Containerize with chamber run
One command. That’s all it takes. Point chamber run at your training code and it handles everything: containerization, registry authentication, image building, and workload submission.
No Docker knowledge required. Chamber auto-detects your project structure, generates optimized Dockerfiles, and guides you through any missing prerequisites.
What Chamber Does For You
Detects your project
Scans for PyTorch, TensorFlow, or JAX. Finds
train.py, main.py, or your entrypoint. Reads requirements.txt or pyproject.toml.Generates optimized Dockerfile
Creates a GPU-optimized container with the right CUDA version, cuDNN, and your dependencies pre-installed.
Handles authentication
Auto-authenticates with Google Artifact Registry or AWS ECR using your existing cloud credentials.
Builds and pushes
Uses
docker buildx build --push to build and push in a single efficient step. Automatically pulls the :latest tag to seed the layer cache so teammates get fast rebuilds. Uses content-addressed image tags — if the image already exists, build and push are skipped entirely.Quick Start
Interactive Setup (First-Time Users)
Chamber guides you through everything. Missing something? Chamber will help:No Registry Configured?
Docker Not Installed?
AWS CLI Not Configured?
One-time setup. After your first successful run, these settings are saved. Future runs work instantly without prompts.
Supported Container Registries
Chamber automatically handles authentication for major cloud registries:| Registry | URL Pattern | Auto-Auth |
|---|---|---|
| Google Artifact Registry | {region}-docker.pkg.dev/{project}/{repo} | gcloud CLI |
| AWS ECR | {account}.dkr.ecr.{region}.amazonaws.com | AWS CLI |
| Other registries | Any Docker-compatible registry | Via docker login |
Project Detection
Chamber automatically detects your project configuration:| What | How |
|---|---|
| Framework | Scans requirements.txt for PyTorch, TensorFlow, or JAX |
| Entrypoint | Looks for train.py, main.py, run.py, or app.py |
| Python Version | Checks .python-version or pyproject.toml |
| Distributed Training | Detects Accelerate, DeepSpeed, Ray, or Horovod |
| Requirements | Uses requirements.txt, pyproject.toml, or setup.py |
Project Configuration
Create a.chamber.yaml file for persistent settings (optional):
Command Reference
Required Flags
| Flag | Description |
|---|---|
--team, -t | Team ID for the workload |
Resource Flags
| Flag | Default | Description |
|---|---|---|
--gpus, -g | From config or 1 | Number of GPUs |
--gpu-type | From config or H100 | GPU type (H100, A100, L40S, etc.) |
--class, -c | ELASTIC | Workload class: RESERVED or ELASTIC |
Container Flags
| Flag | Description |
|---|---|
--registry | Container registry URL (or use default_registry config) |
--base-image | Override the auto-detected base image |
--dockerfile | Use an existing Dockerfile instead of generating one |
--no-cache | Force Docker rebuild without cache |
Entrypoint Flags
| Flag | Description |
|---|---|
--name, -n | Workload name (default: from config or directory name) |
--entrypoint | Override detected Python entrypoint |
--entrypoint-args | Arguments to pass to the entrypoint |
--env | Environment variable KEY=VALUE (repeatable) |
Workflow Flags
| Flag | Description |
|---|---|
--dry-run | Preview generated artifacts without executing |
--save-dockerfile | Write generated Dockerfile to project directory |
--save-manifest | Write generated K8s manifest to project directory |
Examples
Basic Training Workload
Custom Entrypoint with Arguments
With Environment Variables
Reserved (Non-Preemptible) Capacity
Using Your Own Dockerfile
Generated Artifacts
Example Dockerfile
For a PyTorch project with Accelerate, Chamber generates:Example Kubernetes Manifest
Troubleshooting
Docker is not installed
Docker is not installed
Chamber will prompt you with installation options:Select an option and follow the prompts.
Registry authentication failed
Registry authentication failed
If auto-authentication fails:For Google Artifact Registry:For AWS ECR:
Build failed - missing dependencies
Build failed - missing dependencies
Check your If needed, use
requirements.txt is complete. Use --dry-run to preview the Dockerfile:--save-dockerfile to inspect and modify:Docker Build Optimizations
Chamber automatically applies several optimizations to make builds fast:| Optimization | What it does |
|---|---|
| Single build+push | Uses docker buildx build --push to build and push in one step. This is significantly faster than separate build+push because buildkit pushes layers directly as they complete, avoiding Docker daemon/containerd manifest duplication issues |
| BuildKit | Enabled by default (DOCKER_BUILDKIT=1) for parallel build stages and advanced caching |
| Pip cache mounts | Uses --mount=type=cache,target=/root/.cache/pip so pip packages are cached across builds instead of re-downloaded |
| Remote layer caching | Pulls the :latest tag from your registry before building to seed the local layer cache. After a successful build, tags as :latest using docker buildx imagetools create (fast manifest aliasing, no layer re-upload) so future builds benefit |
| Content-addressed tags | Images are tagged with a content hash of your project. If the image already exists in the registry, build and push are skipped entirely |
| Platform targeting | Explicitly builds for linux/amd64 to ensure consistent images regardless of your local architecture |
| Reduced metadata | Uses --provenance=false --sbom=false to skip unnecessary metadata generation that slows down builds |
| Context size warnings | Reports build context size and warns if it exceeds 500MB, helping you identify large files that should be in .dockerignore |
| Streaming output | Build output is streamed to your terminal in real-time so you can follow progress |
--no-cache to force a full Docker rebuild (this does not force re-push if the image already exists):
Best Practices
Start with --dry-run
Always preview generated artifacts before building to catch issues early.
Use .chamber.yaml
Store project-specific settings to avoid repeating flags on every run.
Set default_registry
Configure your registry once:
chamber config set default_registry <url>Use forward_env
Securely inject API keys without hardcoding them in your config.

