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.
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.
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.
The boto3 surface area you actually use.
Cheaper than g5 because it runs on idle Macs.
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.