Skip to main content

Issue: truss push can’t find config.yaml

Fix: set correct target directory

The directory truss push is looking at is not a Truss. Make sure you’re giving truss push access to the correct directory by:
  • Running truss push from the directory containing the Truss. You should see the file config.yaml when you run ls in your working directory.
  • Or passing the target directory as an argument, such as truss push /path/to/my-truss.

Issue: unexpected failure during model build

During the model build step, there can be unexpected failures from temporary circumstances. An example is a network error while downloading model weights from Hugging Face or installing a Python package from PyPi.

Fix: restart deploy from Baseten UI

First, check your model logs to determine the exact cause of the error. If it’s an error during model download, package installation, or similar, you can try restarting the deploy from the model dashboard in your workspace.

Issue: a single replica is stuck or unhealthy

One replica of a multi-replica deployment can fail while the others keep serving, for example by hanging, becoming unresponsive, or consuming excessive memory. Restarting the whole deployment is heavier than the problem warrants.

Fix: terminate the affected replica

Terminate just the bad replica. The deployment’s autoscaler brings up a fresh replica to maintain your target replica count, so traffic keeps flowing on the healthy replicas while the replacement starts. First find the ID of the bad replica. Every log line is tagged with the replica that emitted it; platform-level lines carry an empty replica ID:
To find the replica ID:
  1. Sign in to your workspace at app.baseten.co and choose Dedicated Inference in the sidebar.
  2. Select your model.
  3. Select the deployment under Deployments.
  4. Choose Logs.
  5. Open the Replica filter. The dropdown lists each replica ID.
Then terminate the replica from the Baseten CLI or the REST API.
After termination, the autoscaler starts a replacement replica to maintain the deployment’s target count, so capacity dips by one replica until the replacement finishes its cold start. If the whole deployment is unhealthy across replicas, deactivate or replace it instead. For more information, see baseten model deployment replica and the terminate replica endpoint.

Issue: requests fail with “Model version is deactivated”

Requests to a deactivated deployment fail with a 400 error:

Fix: activate the deployment

Activate the deployment from the model’s page in your workspace, or run:
Activation redeploys the model, so the deployment passes through DEPLOYING before serving requests again. If the deployment was deactivated to stop idle spend, consider scaling to zero instead: the endpoint stays live and replicas start on demand.

Issue: “You’ve reached the maximum number of deployed models”

Pushing a model, pushing a new deployment, or activating an inactive deployment fails with a 400 error:
Every workspace has a limit on how many deployments it can keep deployed at once, so a workspace can’t accumulate deployments without bound. The limit applies across the whole workspace, not per model, and the number in the message is how many of your deployments currently count against it. Two things about the count catch people out:
  • It counts deployments, not models: A model with four deployments uses four slots. Chainlet deployments count individually, so a chain with five chainlets uses five slots.
  • Scaled-to-zero deployments count: A deployment scaled to zero runs no replicas and costs nothing, but its endpoint stays live and ready to cold-start, so it holds its slot. Only deactivated deployments release theirs.
Counts against the limit
  • ACTIVE
  • SCALED_TO_ZERO
  • WAKING_UP
  • UPDATING
  • UNHEALTHY
  • BUILDING
  • DEPLOYING
Doesn’t count
  • INACTIVE
  • DEACTIVATING
  • BUILD_FAILED
  • DEPLOY_FAILED
  • BUILD_STOPPED
Models you call through Model APIs don’t count, since you don’t deploy them into your workspace.

Fix: free deployment slots

First, find which deployments hold a slot. Deployments are listed per model, so this means checking each of your models.
To check a model’s deployments:
  1. Sign in to your workspace at app.baseten.co and choose Dedicated Inference in the sidebar.
  2. Select your model.
  3. Review the status of each deployment under Deployments.
The console shows one model at a time. To audit a whole workspace at once, use the Baseten CLI or the REST API.
Then work through the deployments that shouldn’t hold a slot:
  1. Deactivate deployments you don’t expect to serve traffic soon: Deactivating keeps the deployment’s configuration and releases its slot, and you can activate it again later. This is the fastest way to unblock a push.
  2. Delete deployments you’re finished with: Deleting is irreversible, so reserve it for finished experiments and stale versions.
  3. Stop accumulating superseded deployments: After a promotion, the target environment’s promotion_cleanup_strategy decides what happens to the deployment it replaced. The default, SCALE_TO_ZERO, leaves that deployment holding its slot. Set the strategy to DEACTIVATE so each promotion releases the slot it supersedes. See deployment cleanup.
  4. Request a higher limit: If every counted deployment is one you need, email support@baseten.co.
Deactivating and deleting both free a slot within a few seconds, so you can retry the push right away. For more information, see baseten model deployment list and the list deployments endpoint.

Autoscaling issues

Before troubleshooting, review Autoscaling for parameter details, Traffic patterns for pattern-specific recommendations, and Request lifecycle for HTTP status codes and timeout behavior.

Latency spikes during scaling events

Symptoms: TTFT (time to first token) or p95/p99 latency degrades when replicas are added or removed. Causes:
  • Replicas terminated while handling in-flight requests
  • Cold start delays while new replicas initialize
Solutions (in order of priority):
  1. Increase scale-down delay (for example, 300s → 900s) to reduce how often replicas are removed.
  2. Increase min replicas to reduce cold start frequency.
  3. Lower target utilization to provide more headroom during scaling.

Replicas oscillating (thrash)

Symptoms: Replica count bounces repeatedly (for example, 8↔9) even with relatively stable traffic. Causes: Autoscaler reacting to short-term traffic noise or internal model fluctuations. Solutions (in order of priority):
  1. Increase scale-down delay: this is the primary lever for oscillation.
  2. Increase autoscaling window to smooth out noise.
  3. Lower max scale-down rate so each scale-down step removes fewer replicas.
  4. Only then consider lowering target utilization for more headroom.
Don’t use target utilization as the primary fix for thrash. Scale-down delay is more effective and doesn’t waste capacity.

Slow scale-up / “Scaling up replicas” persists

Symptoms: New replicas take many minutes (or longer) to become ready. The deployment shows “Scaling up replicas” for an extended period. Causes:
  • GPU capacity not available in your region
  • Slow model initialization (large weights, slow downloads)
Solutions:
  1. Pre-warm by bumping min replicas through the API before expected load spikes.
  2. Contact support about capacity pool availability.
  3. Check if optimized images are being used (look for “streaming-enabled image” in logs).

Model scales to zero before testing

Symptoms: A newly deployed model scales down to zero before you can send your first test request. Solution: Set min_replica = 1 during testing. After testing, you can set it back to 0 if you want scale-to-zero behavior.

Async queue growing without bound

Symptoms: The async queue size keeps increasing and requests are not being processed fast enough. Cause: Requests are arriving faster than the deployment can process them. Solutions:
  1. Increase max replicas to add more processing capacity.
  2. Increase concurrency target if your model can handle more concurrent requests.
  3. Lower target utilization to trigger scaling earlier.

Bill higher than expected

Symptoms: GPU costs are higher than anticipated, especially during low-traffic periods. Solutions:
  1. Raise concurrency target to squeeze more throughput from each replica.
  2. Monitor p95 latency as you raise concurrency. If latency stays stable, keep raising; if it rises sharply, you’ve gone too far.
  3. Enable scale-to-zero (min replicas = 0) for intermittent workloads.
  4. Review your traffic patterns and adjust settings accordingly. See Traffic patterns.

Cold starts taking too long

Symptoms: First request after scale-from-zero takes several minutes. Logs show extended time in model loading or container initialization. Causes:
  • Large model weights (10s–100s of GB)
  • Slow network downloads from model registries
  • Heavy initialization code in load() method
Solutions:
  1. Look for “streaming-enabled image” in logs. This confirms image streaming is active.
  2. Keep min_replica ≥ 1 to avoid cold starts entirely.
  3. Pre-warm before expected traffic spikes using the autoscaling API.
See Cold starts for detailed optimization strategies.

Development deployment won’t scale

Symptoms: Development deployment won’t scale beyond 1 replica under load. Can’t change autoscaling settings. Cause: Development deployments have fixed autoscaling settings that cannot be modified. They run 0 to 1 replicas, so they scale to zero when idle, but max replicas is locked at 1. Solution: Promote to a production deployment to enable full autoscaling. Development deployments are optimized for iteration with live reload, not traffic handling. See Development deployments for the fixed settings.

Not sure which traffic pattern I have

Symptoms: Unsure how to configure autoscaling because traffic behavior is unclear. Solution:
  1. Sign in to your workspace at app.baseten.co and choose Dedicated Inference in the sidebar, then select your model.
  2. Choose the Metrics tab.
  3. Look at Inference volume and Replicas over the past week.
  4. Identify your pattern:
See Traffic patterns for detailed recommendations.

Concurrency target misconfigured

Symptoms: Either unexpectedly high costs OR high latency despite having replicas available. Diagnosis:
  • Too low (common): Running many more replicas than needed. Default of 1 is conservative but expensive.
  • Too high: Requests queue at replicas, causing latency even when replica count looks healthy.
Solutions:
  1. Benchmark your model to find actual throughput capacity.
  2. Use starting points by model type:
  1. Gradually increase while monitoring p95 latency. Stop when latency rises sharply.
See Concurrency target for full guidance.
For detailed autoscaling configuration, see Autoscaling. For pattern-specific recommendations, see Traffic patterns.