DEV Community

Viswaretas Kotra
Viswaretas Kotra

Posted on Edited on Originally published at nodus-compute.ai

What are the best Modal alternatives in 2026?

The best Modal alternative depends on what you use Modal for. For training and other long GPU jobs, Nodus is the closest swap: its Python API keeps Modal's names, its listed H100 rate is lower than Modal's, and a reclaimed run restarts on a new machine with its checkpoint restored. For a container you manage yourself pick RunPod, for more than 8 nodes pick Together, CoreWeave or Modal's own clusters, and keep short jobs that sit next to Modal web endpoints where they are.

This list comes from the team that builds Nodus. To keep it checkable, every competitor fact links to that vendor's own docs or pricing page, and the cost math is written out so you can redo it with your own rates.

If your shortlist is really Modal against RunPod, our Modal vs RunPod comparison goes deeper on that pair. If it includes AWS, the Nodus vs SageMaker training comparison explains checkpoint recovery and the cost of moving an existing pipeline.

How do the main Modal alternatives compare for training?

The table puts Modal next to seven alternatives, each with its listed H100 rate.

Platform H100 per GPU-hour (listed) How you pay What to know for training Best fit
Modal $3.95 Per second GPU Functions are preemptible; 24 hours max per call Short and medium Python jobs
Nodus $2.60 Prepaid credits Checkpoint directory restored on a new machine after a reclaim Long or interruptible runs, code written for Modal
RunPod $3.99 Secure Cloud, $2.69 Community Cloud Per second, Pods and Serverless A Pod runs until you stop it and bills while it is up A full container with SSH that you manage
Northflank $2.74 Hourly, or on your own cloud Can use your own cloud credits, commitments and spot capacity Teams running an app stack plus GPUs
Together GPU clusters $3.99 on demand, $1.99 preemptible Per GPU-hour, HGX nodes Reserved rates from 3 days up Large clusters, plus a fine-tuning API
CoreWeave $6.16 on demand, about $2.45 spot Whole 8-GPU HGX nodes Spot nodes can be reclaimed Big multi-node runs bought by the node
Baseten Training $6.50 Per minute Volume discounts available Teams that already serve on Baseten
AWS SageMaker Varies by instance and region By instance and time Managed spot restores checkpoints from S3 Teams with AWS credits or commitments

Prices checked October 25, 2026 on each vendor's page: Modal, RunPod (with Pod billing docs), Northflank, Together, CoreWeave, Baseten and the SageMaker managed spot training docs. Per-second and per-minute rates are multiplied out to hours, and CoreWeave's 8-GPU node prices are divided by 8. The Nodus figure is the hourly supply price listed on the Nodus pricing page.

Which Modal alternative should you pick for your job?

Start from the job, not the price list.

  • Long single-node runs where the bill matters, with code already written for Modal: Nodus.
  • A machine you can SSH into and keep running between experiments: RunPod Pods. Nodus vs RunPod covers when a managed run beats a Pod.
  • More than 8 nodes on one network fabric: Modal Clusters, Together GPU clusters or CoreWeave.
  • A hosted fine-tuning API instead of your own training loop: Together's fine-tuning service.
  • Models already served on Baseten: Baseten Training keeps training next to serving.
  • One platform for your services and your GPUs, or GPUs inside your own cloud account: Northflank.
  • A budget made of AWS credits or commitments: SageMaker with managed spot training.

Why do teams move training off Modal?

Most of the reasons are written in Modal's own docs. Every Modal Function can be preempted, and the nonpreemptible setting is not supported for GPU Functions (preemption docs). Modal then restarts the Function on the same input, so a run without its own checkpoints starts over. Modal also notes that the chance of an interruption grows with how long a Function runs, which describes training exactly.

One call can run for at most 24 hours, and the limit applies to each attempt (timeouts). A three-day run has to be split into pieces that hand off state. Pinning a region multiplies the whole bill: 1.15x for a broad region such as us, 1.75x for a narrow one such as us-west (region selection).

None of this matters for a 20-minute fine-tune. It matters a lot for a 30-hour run on 8 H100s. For a head-to-head on that kind of run, see Nodus vs Modal for GPU training.

What does one 80 GPU-hour run cost on each?

Take a run on 8 H100s for 10 hours, 80 GPU-hours in total, at the listed rates from the table above.

Platform Cost of 80 H100-hours
Together GPU clusters, preemptible $159.20, can be reclaimed
CoreWeave spot (one 8-GPU node) $195.10 to $197.10, can be reclaimed
Nodus $208.00
RunPod Pod, Community Cloud $215.20
Northflank $219.20
Modal $315.94
RunPod Pod, Secure Cloud $319.20
Together GPU clusters, on demand $319.20
CoreWeave on demand $492.40
Baseten Training $519.98

The same run costs $208 on Nodus and $520 on Baseten Training, a spread of 2.5 times. The two cheapest lines are capacity that can be taken back mid-run, so they are only cheap if the run survives being interrupted. CoreWeave lists two spot rates for the same 8 x H100 node on its pricing page, which is why that row is a range. A RunPod Pod bills for every hour it is up, so time spent loading data or reading logs on the same Pod adds to its line.

Is preemptible capacity worth it for a long run?

It is worth it when your trainer saves checkpoints often enough that a reclaim costs minutes, not hours. Here is the math we use, with Together's listed rates: $1.99 per H100-hour preemptible against $3.99 on demand, about half price.

Suppose the 10-hour run has no checkpoints and is reclaimed at hour 7. You pay for those 7 hours twice, so the run costs 1.7 times the plan: $270.64 instead of $159.20, still 15% under the on-demand $319.20. A second reclaim at hour 7 takes it to 2.4 times, or $382.08, which is 20% more than on demand. It also turns a 10-hour run into a 24-hour one.

With a checkpoint every 30 minutes, each reclaim costs at most half an hour, 5% of a 10-hour run. Our rule: take interruptible capacity only when the work a reclaim can destroy is small next to the discount. Frequent checkpoints pass that test easily, while running with none usually fails it. Spot vs on-demand GPUs covers what else breaks when capacity is reclaimed.

Who saves and restores your checkpoints on each platform?

On most platforms you do. On a RunPod Pod your trainer writes checkpoints itself, and they belong on a network volume: if your balance reaches $0, a Pod without one is terminated and its data cannot be recovered (Pod pricing docs). On Modal you save checkpoints to a Volume yourself and load the latest one when the Function restarts, which is the pattern in Modal's long-training example. On Together's preemptible clusters and CoreWeave spot nodes, plan on your trainer resuming from its own checkpoints.

SageMaker managed spot training does part of it for you. It copies a local checkpoint folder to S3 and copies it back when the job restarts, so the job resumes from the last checkpoint (managed spot docs).

Nodus saves the files under /nodus/state while the job runs and restores them on the next machine. When capacity gives notice, Nodus asks your process for an urgent checkpoint and prepares a replacement at the same time. The replacement starts only once the old machine is provably gone, so two machines never write the same state (attempts and recovery).

Which alternatives can train across many nodes?

Modal Clusters run up to 32 nodes and 256 GPUs per cluster on an RDMA network, and Modal starts your code only once every node is there (clusters guide). Each node must use all of its GPUs, so H100:8 works and H100:4 does not. Together GPU clusters and CoreWeave sell HGX capacity by the hour, which suits teams that want to run the cluster themselves.

Nodus multi-node training is in Beta, on for every organization with no access request, and limited to 8 nodes per gang (multi-node guide). By default every node comes from one provider in one region, on its private network. You can let nodes span providers, but in the Beta that traffic crosses public addresses unencrypted, so keep the default for sensitive data. If one run needs more than 8 nodes, Nodus is not the right pick today.

When is Modal still the better choice?

Stay on Modal if your training runs finish within an hour and the rest of your product already lives there. Nodus does not support Modal web endpoints (@modal.web_endpoint, @modal.asgi_app), modal.Dict, modal.Queue or parametrized classes, so an app built on those needs real changes, not an import swap (differences list).

Modal also wins on size for one job: 32 nodes, against the 8-node limit in the Nodus Beta. If you want a ready-made training library rather than your own loop, look at Modal Dojo. Modal's training quickstart describes it as an open-source library for supervised fine-tuning and RL, next to a Tinker-compatible API in Beta.

How do you move a Modal training function to Nodus?

Nodus is an AI compute platform that runs each job on the cheapest capacity that will finish it, with checkpoints and recovery built in. Its Python SDK keeps Modal's names where the concept is the same (App, @app.function, .remote(), .map(), .spawn(), Image, Volume, Secret), so most code starts with one import change (migration guide). For training you add a checkpoint path, permission to use interruptible capacity and, ideally, a spending cap.

import nodus  # was: import modal

app = nodus.App("finetune")
image = nodus.Image.debian_slim().pip_install("torch", "transformers", "datasets")

@app.function(
    gpu="H100:8",
    image=image,
    timeout="12h",
    max_cost=250,               # hard cap in USD
    checkpoint="/nodus/state",  # saved, then restored on the next machine after a reclaim
    interruptible=True,         # allow cheaper interruptible capacity
)
def train(lr: float = 2e-5) -> dict:
    # Load model, optimizer and step from /nodus/state if they exist, then keep training.
    ...

@app.local_entrypoint()
def main() -> None:
    print(train.estimate(2e-5))  # expected cost and start time; nothing runs
    print(train.remote(2e-5))
Enter fullscreen mode Exit fullscreen mode

Run it, or skip the SDK and launch any training script as a Job with a hard spending cap:

pip install nodus-compute
nodus login
nodus run app.py

# any script: preview the estimate, then run with a $250 cap
nodus run --dry-run --gpu H100:8 -- torchrun train.py
nodus run --gpu H100:8 --interruptible --max-cost 250 -d -- torchrun train.py
Enter fullscreen mode Exit fullscreen mode

FAQ

Can I try these platforms for free before moving a training run?
Modal's Starter plan includes $30 a month in credits (pricing). Nodus gives $2 of starter credit after email and card verification and adds the other $28 after a first paid top-up or a support approval. GPU jobs need one of those two first (credits).

Is Modal's multi-node training generally available?
The docs disagree. Modal's GPU guide still calls multi-node training a private Beta and asks you to email support for access, while the clusters guide documents clusters of up to 32 nodes. Ask Modal which applies to your workspace before you plan a big run around it.

Can I train on one platform and serve on Modal?
Yes. Write the final weights to Hugging Face or your own object storage and load them from a Modal endpoint. Nodus does not replace Modal web endpoints for your own model; its nodus.InferenceEndpoint serves models from the Nodus catalog through an OpenAI-compatible API with its own rate limits and spending cap (inference guide).

Is RunPod a good Modal alternative?
For a different style of work, yes. RunPod gives you a Pod you control, or Serverless workers you package yourself, while Modal and Nodus run decorated Python functions for you. Our RunPod alternatives list compares it with the rest of the field.

Are these the prices I will actually pay?
They are list prices. Region pinning on Modal, volume discounts, reserved terms and committed spend all change the number. On Nodus, nodus run --dry-run and train.estimate() show the expected cost of your exact run before anything starts.

Does SageMaker managed spot training work with any script?
It works best with scripts that checkpoint. AWS limits prebuilt SageMaker algorithms that do not checkpoint to a MaxWaitTimeInSeconds of 60 minutes, and that wait must always be longer than MaxRuntimeInSeconds (managed spot docs).

Originally published on the Nodus blog.

Top comments (0)