CommonCompute
Get startedDownload the Mac app
Migrate

Move AWS Batch inference jobs to Apple Silicon. Without rewriting them.

Point boto3 at aws.commoncompute.ai and the AWS Batch wire calls you already have — SubmitJob, DescribeJobs, TerminateJob, array jobs, retries — run on Apple Silicon at list prices below g5 / p5 on-demand instance hours for the supported workloads.

Mint an AWS access key →Read full migration guide
The whole change

One client, one URL.

# Before — boto3 hits AWS Batch
import boto3
batch = boto3.client("batch", region_name="us-east-1")

# After — same boto3, same calls, same response shapes
batch = boto3.client(
    "batch",
    endpoint_url="https://aws.commoncompute.ai",
    region_name="us-east-1",
    aws_access_key_id="AKIACC...",       # mint at /app/aws-keys
    aws_secret_access_key="...",
)

resp = batch.submit_job(
    jobName="nightly-embed",
    jobQueue="default",
    jobDefinition="bge-base:1",
    containerOverrides={"environment": [
        {"name": "INPUT_PAYLOAD", "value": '{"texts": ["..."]}'},
    ]},
)
print(resp["jobId"])

Same response shapes (jobId, jobArn, status, statusReason, startedAt, stoppedAt) — boto3's parser is happy without modification.

Array jobs

Up to 50,000 items per submit, billed at batch tier.

# Array jobs work too — translates to a CommonCompute batch
batch.submit_job(
    jobName="transcribe-corpus",
    jobQueue="default",
    jobDefinition="whisper_ane",
    arrayProperties={"size": 5000},
    parameters={
        "array_input_uri": "r2://artifacts/inputs/audio.jsonl",
    },
)

Each AWS array child <jobId>:<idx> resolves through describe_jobs exactly like AWS Batch — children are real CommonCompute tasks you can poll, cancel, or download results from individually.

What works on day one

The boto3 surface area you actually use.

Drop-in
RegisterJobDefinition / DeregisterJobDefinition
Image name + tags map to a CommonCompute workload
DescribeJobDefinitions
Echoes back your registered defs
SubmitJob
Single job. arrayProperties.size up to 50,000
DescribeJobs
Up to 100 IDs per call (AWS limit)
ListJobs
Recent jobs, filter by status, paginate
CancelJob / TerminateJob
Soft-cancel queued or running tasks
DescribeJobQueues / DescribeComputeEnvironments
Synthesised default — boto3 / Step Functions stay happy
Doesn't map
Arbitrary container images
We run ~10 hardcoded Apple Silicon runners (Whisper, embeddings, MLX LLM/image, FLUX, VideoToolbox transcode, Blender). Image name → workload via regex; override with the cc-workload tag.
Job dependencies / DAGs
Sequence submissions in your code, or use Step Functions / Airflow.
VPC / IAM passthrough
Public HTTPS only. No NAT, no PrivateLink today.
Multi-node parallel jobs
Single Mac per task. Use array jobs to fan out.
Supported runtimes

Cheaper than g5 because it runs on idle Macs.

Workload ID
Does what
Common Compute
Vs.
whisper_ane
Audio → transcript
$0.25 / hr
OpenAI Whisper $0.36 / hr
coreml_embed
Text → embedding vector
$0.014 / 1M tokens
OpenAI emb-3-small $0.02
vt_transcode
Video → H.264 / HEVC / ProRes
$0.012 / out-min
AWS MediaConvert $0.017
mlx_image
Prompt → SDXL-Turbo image
$0.0019 / image
Replicate $0.0055
mlx_llm
Chat completion (Q4 8B)
$8.80 / 1M tok
Llama-3.1-8B
mlx_llm_long_ctx
Long-context (70B)
$44 / 1M tok
Qwen-2.5-72B / Llama-3.3-70B

Map your container image to a workload one of two ways: image name (e.g. ghcr.io/me/whisper:v3 auto-routes to whisper_ane) or an explicit tags={cc-workload: whisper_ane} on the JobDefinition.

Bring your last AWS Batch invoice.

Email support@commoncompute.ai with a redacted line-item invoice and we'll send a per-job projection of what the same workload costs on CommonCompute. The math is deterministic — no sales call.