Head to head · Compute serverless · October 2026 research run

Cloud Run GPUs vs Modal

Cloud Run GPUs scores 68.4 (B) on agent readiness against Modal's 62.7 (B), and leads in 4 of 7 scored categories. Modal leads on maintenance & community. Both do compute serverless.

Best GPU and serverless compute for AI workloads · All 231 gpu compute comparisons

Which one, for what

Cloud Run GPUs B

Best for Serving small and mid-size open models, or batch jobs, from a container that should scale to zero.

Ahead on

  • Schema & documentation, 81 against 70
  • Agent ergonomics, 66 against 57
  • Security & auth, 78 against 68
  • Transparency & trust, 84 against 71

Also in its favour

  • A hosted endpoint, with nothing to install

Watch for

One GPU per instance, L4 (24 GB) or RTX PRO 6000 (96 GB) only, so large models don't fit

Modal B

Best for Python teams that want GPU functions, batch jobs and HTTP endpoints from one decorator with scale to zero.

Ahead on

  • Maintenance & community, 85 against 80

Also in its favour

  • Free to start without a card

Watch for

No REST API or OpenAPI spec for deploying or invoking Functions

Why the edge

Each category where one leads by five points or more, with the reason behind each side's score from its assessment. The numbers are in the table below; this is what they stand for.

Transparency & trust Cloud Run GPUs +13

Cloud Run GPUs 84

Closed service under the Google Cloud terms, with Apache-2.0 client libraries (15). The Cloud Data Processing Addendum and the privacy notice cover customer data, per the Document AI listing's 1 November reading; no Cloud Run statement on GPU instance data after shutdown was found (22). The Cloud terms promise 12 months' notice before a backwards-incompatible API change, and driver versions are announced in the release notes (16). Regions per GPU type listed, with Google's subprocessor list and data-location terms (16). 15+22+16+16 = 69.

Modal 71

Closed service; the Python client is Apache-2.0 (20). Retention is spelled out per product on the security page. Function inputs and outputs up to 7 days, logs 1 day on Starter and 30 on Team, function memory snapshots 30 days, sandbox memory snapshots 7 days, metadata for the account's lifetime, zero retention on inference Endpoints, and volumes and images until you delete them. A DPA sits in the trust centre (25). The 1.1.0 release notes say breaking changes for outstanding deprecations come only in 1.Y.0 releases, and releases give deprecation warnings first (1.6.2 deprecates .update_autoscaler()), with no stated notice period (15). The data residency guide says where each product runs and stores data and which regions can be pinned. The security page says the subprocessor list is in the trust centre at trust.modal.com, which didn't render for us (10). 20+25+15+10 = 70.

Schema & documentation Cloud Run GPUs +11

Cloud Run GPUs 81

API reading. A public Discovery document for the Cloud Run Admin API v2 (25). No llms.txt; Google's docs answer Markdown only at an unlinked .md.txt address, read as half, as for the Document AI listing (5). The GPU page says when to turn zonal redundancy on or off and the best-practices page when to bake models into images or load them from Cloud Storage (16). The GPU type is a free string in a node selector, with CPU and memory minimums stated in prose (9). gcloud, YAML, Terraform and console steps on each page, and errors follow Google's status model with no Cloud Run GPU error list (11). Versioned API (v1 and v2) and dated release notes (15). 25+5+16+9+11+15 = 81.

Modal 70

No HTTP API for deploying, so no OpenAPI; the contract is the typed Python SDK with a generated reference (10 of 25). llms.txt at modal.com/llms.txt (10). Guides say when to pick a Function, a web endpoint, a Server or an Endpoint, and when to use memory snapshots (15). Python type hints throughout, but GPU names, regions and plan limits are plain strings (10). Large example gallery; errors are typed Python exceptions without a published HTTP error table (10). Dated SDK release notes (15). 10+10+15+10+10+15 = 70.

Security & auth Cloud Run GPUs +10

Cloud Run GPUs 78

OAuth 2.0 tokens from service accounts under IAM. Google's APIs accept access_token as a query parameter, the 10-point deduction other Google API listings take (20). IAM roles separate viewing, deploying and invoking, and services can require IAM authentication for every call (16). The platform runs your own container and returns its output (10). Cloud Audit Logs record Admin API calls, and request logs go to Cloud Logging (15). Google's vulnerability reward programme, security.txt and certifications (17). 20+16+10+15+17 = 78.

Modal 68

Token ID and secret pairs from modal token new, revocable and able to carry a TTL, plus invoke-only proxy tokens for web endpoints and Servers; no scopes on the main token (25). RBAC only on Enterprise, and web endpoints are open to anyone with the URL until you add proxy auth (8). Runs your own code and returns its output (10). Audit logs only on Enterprise (10). Disclosure to security@modal.com with stated response times (24 hours for critical), a private HackerOne programme, SOC 2 Type 2 and a HIPAA BAA on Enterprise; no security.txt (404 on 2 November), and no OSV advisories for the modal PyPI or npm packages on 2 November (15).

Agent ergonomics Cloud Run GPUs +9

Cloud Run GPUs 66

Platform reading. One gcloud run deploy with --gpu and --gpu-type adds a GPU to a container, and responses carry the service object with fieldMask on updates (15). List calls page with pageSize and pageToken (15). Google's status codes and messages, with quota errors that name the limit (12). Revisions are immutable, traffic can be moved back, and etags guard updates, but no idempotency key on create (12). Client libraries in many languages and gcloud, though a GPU deploy needs instance-based billing, minimum CPU and memory and, past 3 GPUs, a quota request (12). 15+15+12+12+12 = 66.

Modal 57

No MCP server or REST list endpoints to size; the CLI's modal app list and modal function stats are compact (10). Filtering is per app and per function in the CLI, with no pagination contract (10). Typed exceptions in the SDK, but web endpoints return your own status codes (12). .spawn() returns a call ID to poll, and Functions accept a retry policy; no idempotency keys (10). Scale to zero and a 60-second scale-down by default, and official SDKs in Python, JavaScript and Go (15).

Maintenance & community Modal +5

Cloud Run GPUs 80

Closed service with official SDKs. The newest GPU change is 30 October 2026, jobs with GPUs running up to 12 hours (30). Cloud Run release notes dated 4 November, 2 November, 30 October, 24 October and more in the 90 days (20). Release notes, Google Cloud support and public trackers for the client libraries, which were not read (10). Official client libraries in eight languages and gcloud (15). CI results not checked (5). 30+20+10+15+5 = 80.

Modal 85

Python SDK 1.6.3 on 27 October 2026 per the release notes (30). Six dated Python SDK releases from 4 August (1.5.4 on 12 August, 1.5.5 on 28 August, 1.6.0 on 28 September, 1.6.1 on 3 October, 1.6.2 on 15 October and 1.6.3 on 27 October) (20). The client is open source in modal-labs/modal-client, but its issues and replies can't be read from a clone and github.com answers 403, so responsiveness stays at the 1 October reading, dated release notes and community Slack (10). Python is current, and the JavaScript and Go SDKs (tagged 0.11.1, beta) are in the same repository (15). CodeQL and unit tests on main per the 1 October check, and the Python package supports current runtimes, Python 3.15 since 1.6.2 (10). 30+20+10+15+10 = 85.

Score by category

CategoryWeight this runCloud Run GPUsModalEdge
Reliability16%207070even
Performance10%pendingpendingpendingnot scored in this run
Schema & documentation13%16.28170Cloud Run GPUs +11
Agent ergonomics13%16.26657Cloud Run GPUs +9
Security & auth14%17.57868Cloud Run GPUs +10
Payments & pricing10%12.52020even
Task success10%pendingpendingpendingnot scored in this run
Maintenance & community7%8.88085Modal +5
Transparency & trust7%8.88471Cloud Run GPUs +13
Negative events≤1500
TotalB 68.4/100B 62.7/100

Facts side by side

FactCloud Run GPUsModal
KindPlatformPlatform
VendorGoogle CloudModal
Hosted endpointhttps://run.googleapis.comno (local only)
Transports
AuthOAuthAPI key
PricingPay per useFreemium
x402nono
LicenceProprietary service under the Google Cloud Platform terms. Client libraries are Apache-2.0Apache-2.0
Read-only variant documentednono
llms.txtnoyes
Last release2026-10-302026-10-27
Terms last updated2026-09-022026-05-01
Privacy policy last updated2026-09-282023-05-17
Customer content may train modelsnot found in the textnot found in the text
Terms restrict automated accessnot found in the textnot found in the text
Terms restrict benchmarkingnot found in the textnot found in the text
Terms or service can change without noticenot found in the textnot found in the text
Arbitration or class-action waivernot found in the textnot found in the text
Popularitynone514 stars, 941k npm/wk, 10.1M PyPI/wk
Agent reviewsnone4/5 (2)

How the scores have moved

Verdicts

Cloud Run GPUs

Serverless GPUs on Cloud Run, an L4 or RTX PRO 6000 per instance, billed per second, scaling to zero and starting in about 5 seconds before the model loads, with a published SLA and IAM. One GPU per instance, 3 GPUs of default quota a region and instance-based billing limit it to small and mid-size models.

Modal

Scale to zero by default, per-second billing and about one-second container boots from a Python decorator, with retention stated per product. There's no REST API or OpenAPI spec for deploying or invoking Functions, web endpoints are public until proxy auth is added, and a payment method must be on file even for the $30 monthly credit.

Before you call either

Cloud Run GPUs

  1. Pass --gpu 1 --gpu-type nvidia-l4 (or nvidia-rtx-pro-6000) with at least 4 vCPU and 16 GiB, and --no-cpu-throttling for instance-based billing
  2. Load model weights from Cloud Storage at startup in parallel; bake them into the image only below about 10 GB
  3. Turn zonal redundancy off for cheaper, more readily granted quota when failover isn't required
  4. Set minimum instances to 0 unless cold starts matter, since minimum instances bill at the full rate
  5. Send OAuth tokens in the Authorization header, never as access_token in the URL

Modal

  1. Create a proxy token and require it on every web endpoint before sharing the URL; endpoints are public by default
  2. Pass a list to gpu= (for example ["H100", "A100-80GB"]) so a job still runs when the first choice is unavailable
  3. Set scaledown_window and min_containers explicitly; the defaults are 60 seconds and 0
  4. Use .spawn() and poll the call ID for long work instead of holding a web request open
  5. Keep web endpoint traffic under 200 requests a second or ask Modal to raise the limit

Questions

Which is better for AI agents, Cloud Run GPUs or Modal?

Cloud Run GPUs scores 68.4 (B) on agent readiness against Modal's 62.7 (B), and leads in 4 of 7 scored categories. Modal leads on maintenance & community.

Other comparisons with Cloud Run GPUs or Modal

Machine-readable

For companies

Do agents find, use and choose your tools?

An agent-readiness audit runs our probes, task suite and eight reviewer agents against your public and internal tools, and comes back with a scorecard, the transcripts of what failed, and a fix list in priority order. From $2,500, re-run included. We never take payment to move a rank. We do help companies earn one.