Skip to main content

Sizing and scaling

Set what one replica of a model runs on, how many replicas run, and the signal that adds or removes them. Every field has a default, so most models need nothing on this page.

In Deploy model, the Compute step sets the GPU and Resources and tuning, and the Scaling step sets Replicas and Scale on. Leave Scale on at Automatic. On a running model, the same steps are under Update.

Before you start​

In the console​

Choose the hardware​

  1. Open Workloads > Models > Deploy model and go to the Compute step. For a running model, open the model and select Update.

  2. Under GPU accelerator, select a GPU, or None, CPU model. Each GPU shows the pool or node group that launches it, its limit, its capacity type and its instance types. A GPU that cannot launch shows the reason in red, for example a pool limit or a cloud quota that is too low.

    Open zoom view

    The Compute step: None, CPU model selected, and one card per GPU with its pool, limit, capacity type, instances and quota

    The Compute step: None, CPU model selected, and one card per GPU with its pool, limit, capacity type, instances and quotaThe Compute step: None, CPU model selected, and one card per GPU with its pool, limit, capacity type, instances and quota
  3. Open Resources and tuning to set Memory, CPU, Context length and KV cache. Left empty, AstroPulse picks the defaults.

    Open zoom view

    Resources and tuning open: Memory 6Gi, CPU 4, Context length at the runtime default, KV cache 2Gi

    Resources and tuning open: Memory 6Gi, CPU 4, Context length at the runtime default, KV cache 2GiResources and tuning open: Memory 6Gi, CPU 4, Context length at the runtime default, KV cache 2Gi
  4. Optional: select Cache weights on the node (see Cut model download cost), and name a Workload queue (see Queueing).

Set replicas and scaling​

  1. On the Scaling step, set Replicas as a min and a max. Leave both empty for one replica. Set the max above the min to autoscale.

    Open zoom view

    The Scaling step: Replicas 1 to 1, Scale on Automatic

    The Scaling step: Replicas 1 to 1, Scale on AutomaticThe Scaling step: Replicas 1 to 1, Scale on Automatic
  2. Under Scale on, keep Automatic: AstroPulse picks the signal for the model and the cluster. To choose, select Queue depth (requestsWaiting) and set requests per replica, or CPU utilisation (cpu). See Scaling.

    Open zoom view

    Scale on Queue depth requestsWaiting, with 2 requests per replica

    Scale on Queue depth requestsWaiting, with 2 requests per replicaScale on Queue depth requestsWaiting, with 2 requests per replica
  3. Continue to Review, where the dry run checks every value, then Deploy (or Apply for an update).

You should see​

The model's Overview has a Serving card with what runs: Accelerator, Memory budget, CPU, Replicas (the current count and the range), Scales on and Context length. A value AstroPulse chose is marked default.

Open zoom view

The Serving card: 1x nvidia l4, Memory budget 8Gi, CPU 3, Replicas 1 of 1 (range 1 to 2), Scales on More than 2 requests waiting, Context length 4,096 tokens

The Serving card: 1x nvidia l4, Memory budget 8Gi, CPU 3, Replicas 1 of 1 (range 1 to 2), Scales on More than 2 requests waiting, Context length 4,096 tokensThe Serving card: 1x nvidia l4, Memory budget 8Gi, CPU 3, Replicas 1 of 1 (range 1 to 2), Scales on More than 2 requests waiting, Context length 4,096 tokens

While a model starts, its status shows the stage it has reached. See Startup stages.

Runtimes​

A Hugging Face model is served as a generative model by default, with vLLM, on the API most AI clients already speak. For any other source, set Format:

FormatGenerative
vLLMyes
SKLearn, XGBoost, LightGBMno
TensorFlow, PyTorchno
ONNX, TensorRT, Tritonno
MLflow, PMML, Paddleno

huggingface is not a format and is refused. To use a serving runtime already installed on the cluster, name it in Runtime engine; AstroPulse does not check it against the format.

Sizing a replica​

A replica is one copy of the model. Its memory and CPU are both the request and the limit, so one model's spike never evicts another. A replica runs on one node, so all its GPUs are on that node.

  • Capacity type. OnDemand suits serving; Spot costs less and can be reclaimed at two minutes' notice. Reserved capacity counts as OnDemand. A Spot model with no Spot capacity gets no node and does not fall back to On-Demand; an Any model runs on On-Demand when Spot is unavailable.
  • GPU vendor. The vLLM runtime AstroPulse installs runs on NVIDIA only, so amd is refused for it.
  • Registered clusters. AstroPulse does not know a registered cluster's node groups, so it skips the GPU model and count checks there.

The GPUs offered per cloud and region are under Accelerators in the console.

Memory on a GPU instance​

On a GPU, Memory is the machine's memory, not the GPU's. The weights end in GPU memory but pass through the machine's memory, and the runtime needs some of its own. A replica asks for the GPU and for CPU and Memory from the machine that carries it.

The request must fit what the instance has left after its system pods, which is less than its listed size. The dry run does not check this yet. A request that does not fit deploys, and the model waits for a node that never comes, with the status "The model is waiting for a node it can run on: a GPU node the cluster couldn't launch, or no room on its nodes. Its events say which." The model's Events tab then shows "no instance type has enough resources" or "Insufficient memory".

To choose memory for a GPU instance:

  1. Look up the instance your GPU node group or GPU pool launches. The Compute step lists it on each GPU.
  2. Start at the default, 8Gi. Raise it only if a replica runs out of memory while it starts.
  3. Keep it a few GiB under the instance's memory. On a 16 GiB instance, 12Gi fits and 14Gi does not.
  4. Keep CPU under the instance's vCPUs. The default of 3 per GPU fits the smallest single-GPU instances, which have 4.

If the model needs more, use a node group or GPU pool with a larger instance.

For example, on g6.xlarge (4 vCPU, 16 GiB, one L4), a 15 GB model runs at the default 8Gi and at 12Gi, and waits for a node at 14Gi.

Context length​

Context length (serving.maxContextTokens) is the longest conversation, prompt and answer together, in tokens, that the runtime reserves room for. Set it to reserve less memory, or to cap what callers may send. Left empty, the runtime picks its own.

It must not exceed the model's own limit: the model card's context length, or max_position_embeddings in the model's config.json on Hugging Face. When AstroPulse can read the model's config.json, the dry run warns about a value above it:

Warning: Context is longer than the model's
source.model.serving.maxContextTokens is 2048, above this model's context of 512 tokens (its config.json), so the model won't start. Set it to 512 or less, or remove it to use the model's own.

It is a warning, not a refusal: the apply still goes through. Deployed, the model stops within a minute of loading and reads Can't start: "The model can't start: source.model.serving.maxContextTokens is longer than the model's context of 512 tokens. Set source.model.serving.maxContextTokens to 512 or less, or remove it to use the model's own, and apply the application again."

KV cache​

KV cache (serving.kvCacheSize) is the memory a generative model keeps for the conversations it is working on. Most models need it left empty. An embedding model keeps no such cache and ignores the field.

Where the model runsDefaultTaken from
CPUabout a quarter of MemoryMemory. A 1Gi cache with 6Gi of memory leaves 5Gi for the weights and the runtime
GPUthe runtime sizes it from the GPU's free memoryGPU memory, per GPU. Memory does not size it

Set it on CPU to give a model more room for long or many conversations. Set it on a GPU only to hold the cache to a fixed size: the runtime then skips its own check of the GPU's memory, and every dry run warns Check the KV cache size. On an L4, 4Gi held about 350,000 tokens for Qwen2.5-0.5B-Instruct; a larger model holds fewer.

Images, video and audio​

For a model that reads images, video or audio on the vLLM runtime, serving.multimodal sets how many of each one request may carry. Left out, the runtime's own limit stands, often one image. The runtime reserves memory for these limits on every replica, so a high limit can need more memory, and a video clip costs far more than an image. Above 64 the dry run warns.

Scaling​

Replicas sets the fewest and the most replicas. Scale to zero is not available. Scale on picks the signal between them. There are four setups. With more than one replica, the replicas spread across nodes, and across zones on a multi-zone tier: see Availability tiers.

A fixed number of replicas​

Set min equal to max, or leave both empty for one replica. There is no autoscaler. The console and the dry run say Model runs at a fixed replica count: "Set maxReplicas above minReplicas to scale this model." Choosing Queue depth or CPU utilisation with equal bounds is refused.

A range on Automatic​

Set max above min and keep Automatic. AstroPulse picks the signal:

  • a generative model on a cluster whose Workload Autoscaling add-on can read the model's metrics: Queue depth, shown as "More than 2 requests waiting";
  • a model without a GPU: CPU utilisation;
  • otherwise a GPU model runs at the min, and the dry run says what would let it scale, for example "Install Workload Autoscaling to scale this model on waiting requests."

A model on Automatic is never refused for its scaling.

Scale on waiting requests: requestsWaiting​

Queue depth (requestsWaiting) is the number of requests waiting at the model, per replica, with a default target of 2. It is the signal for a generative model, on a GPU or not. It needs the Workload Autoscaling add-on; a predictive model publishes no such queue and is told to scale on CPU.

How scale-out behaves for a small chat model on L4 GPUs:

  • A replica is added only when requests wait. The model answered 128 requests at once with nothing waiting; about 400 at once added a second replica.
  • When the new replica needs a new GPU node, it serves about 8 to 9 minutes after it is added: the node starts, the model downloads, the image is pulled and the model loads.
  • Once the load stops, the extra replica is removed after 3 to 5 minutes, and its empty GPU node about 10 minutes later. The 10 minutes is the GPU pool's setting for keeping an empty node.
  • Each replica needs its own GPUs. If the pool's GPU limit is lower than max replicas times GPUs per replica, the dry run says so, for example "Autoscaling to 2 replicas needs 2 GPUs; the pool allows 1.", and the extra replicas wait.

To check the signal is read, send the model traffic and open its Metrics tab: requests waiting should rise above zero. If it stays at zero under load, the add-on cannot see the model's metrics, and the model stays at the min.

Scale on CPU: cpu​

CPU utilisation (cpu) is CPU use as a whole percentage of the replica's CPU, from 1 to 100, default 80. It works on every cluster with a working Kubernetes metrics API. Use it for a model without a GPU.

A GPU model does its work on the GPU, so its CPU barely moves. CPU scaling on one is accepted with the warning CPU scaling doesn't follow GPU load. For example, a GPU model under full GPU load can sit at 27% CPU: a target of 30 adds no replica, and a target of 20 adds one.

On a cluster without a working metrics API, the model still serves, with the notice Application cannot scale: install metrics-server and the autoscaler starts with no redeploy, or set a fixed count.

Changing replicas or the metric on a running model​

A change that replaces a model's replicas asks for no extra capacity. A model with a max of 1 stops and starts again, so it is down until the new replica is ready, about a minute for a small model on a warm node. With two or more replicas, they are replaced one at a time while the rest serve.

The target on the same signal can always change. Moving between signals:

FromToResult
CPUa fixed countAllowed
CPUqueue depthRefused in one update. Update twice: first to a fixed count, and let it finish; then to the range and queue depth
a fixed countCPUAllowed
a fixed countqueue depthAllowed once the earlier autoscaler is gone; until then refused with The earlier autoscaler hasn't gone yet. A range on Automatic lands here too on a generative model, with the warning Model moves to scaling on waiting requests, because it cannot be undone
queue depthCPURefused: AstroPulse cannot take that autoscaler off a running model. Delete and redeploy the model, or keep queue depth
queue depthequal bounds on AutomaticAccepted, but it keeps scaling on queue depth, with the warning Model keeps scaling on waiting requests. To run with no autoscaler, delete and redeploy it

Queueing​

A queue lets models share a quota and wait their turn for it, instead of piling up on a full cluster. Your platform team declares the queues on the Workload Queueing add-on, with deployment in its integrations, because a model's replicas run as a Deployment. The model then names a queue in Workload queue on the Compute step. The queue is fixed once the model exists.

A replica runs only once the queue admits it, when its GPU, CPU and memory fit the quota left. Until then it has no node, the notice is The application isn't serving, and the status reads "The model is waiting for its workload queue to admit it. Its metrics show how the queue stands." When quota frees up, for example when another model on the queue is deleted, the replica is admitted and starts. A small CPU model can start about two minutes after the model ahead of it is deleted.

The model's Metrics tab, under Scaling, has a Queue summary: the queue's name, "Replicas are waiting for quota." or "Nothing is waiting for quota.", Replicas admitted with how many wait, and the admission wait. See A queued model.

Startup stages​

While a model starts, the console shows how far it has come. Not every model passes through every stage, and a short stage can be missed.

StageReason shownMeaning
Provisioningnone, or a reasonThe deploy is accepted. A reason here, such as waiting for a node or a queue, is what holds it back
Getting a node"The model is waiting for a node to run on."A node is being found or started. A new GPU node takes a few minutes
Preparing"The model is being prepared on its node."The replica is set up on its node
Downloading model"The model is downloading to its node."The weights are downloading. Skipped when they are on a volume or in the weight cache
Pulling image"The model's serving image is being pulled onto its node."The runtime's image is pulled. It is large, so this can take minutes on a new node
Loading model"The model is loading; it serves once it has started."The runtime loads the weights. On CPU, the first request after this can take a few minutes more
Can't startwhy, in the noticeA container keeps failing, for example a context length above the model's limit, or running out of memory

As a guide, a small CPU model starts in about 5 minutes on a running node and 8 to 9 minutes with a new one; a small model on a new GPU node in about 9 minutes; a 15 GB model in about 13 minutes. If a model stays in a stage, see How to debug a model.

Other ways in​

  • Nova: ask it in plain language, for example "run qwen-chat on one L4 and scale it to 2 replicas on waiting requests".
  • SDK and API: the Python SDK and the API reference use the same fields.

With astroctl​

model.yaml (source.model)
resources:
cpu: "3"
memory: "8Gi"
accelerator:
gpu:
model: "l4"
countPerReplica: 1
capacityType: "OnDemand"
serving:
maxContextTokens: 4096
scaling:
minReplicas: 1
maxReplicas: 2
metric:
requestsWaiting:
target: "2"
queue:
name: research
Terminal
astroctl application template model # every accepted value, with a starter spec
astroctl app apply -f model.yaml --dry-run # checks every field, deploys nothing
astroctl app events <app> --k8s # why a replica waits for a node
astroctl app metrics <app> # inference.requestsWaiting and the queue figures
astroctl cloud <provider> machines # instance types, vCPUs and memory

The queue is declared on the Workload Queueing add-on:

YAML
configuration:
workloadQueueing:
integrations: [batch/job, deployment]
clusterQueues:
- name: research
quota: { gpu: 2 }

See the astroctl reference.

Settings​

All fields are under source.model.

format

The model format, which picks the serving runtime. In the console, Advanced > Format on the Model step.

Accepts
vLLM, SKLearn, XGBoost, LightGBM, TensorFlow, PyTorch, ONNX, TensorRT, Triton, MLflow, PMML, Paddle
Default
vLLM for a Hugging Face model; required otherwise
runtime.engine

A serving runtime to use instead of the one the format picks. In the console, Advanced > Runtime engine.

Accepts
the name of a serving runtime on the cluster
Default
chosen from the format
resources.memory

Memory for one replica: weights, runtime and, on CPU, the KV cache. In the console, Memory. A value below the default is a dry-run warning, not a refusal.

Accepts
a quantity above zero, for example "8Gi"
Default
generative model: 4Gi on CPU, 8Gi on a GPU. Other models: the runtime's own default
resources.cpu

CPU for one replica. In the console, CPU. On CPU inference, cores set the throughput.

Accepts
a quantity above zero, for example "2" or "500m"
Default
generative model on a GPU: 3 per GPU. Otherwise the runtime's own default
resources.accelerator.gpu.model

The GPU. In the console, the card selected under GPU accelerator. Without resources.accelerator.gpu, the model runs on CPU.

Accepts
a GPU the cluster offers, for example l4
Default
none: CPU
resources.accelerator.gpu.countPerReplica

GPUs for one replica, all on one node. Required with gpu.

Accepts
1 to 64
resources.accelerator.gpu.capacityType

How the replica's GPU node is bought.

Accepts
  • OnDemand On-Demand Never runs the replica on Spot capacity; reserved capacity counts as on-demand.
  • Spot Spot Runs the replica on Spot capacity, which costs less but can be reclaimed at short notice.
  • Any Any Runs the replica on whatever GPU capacity the cluster offers.
Default

Any

resources.accelerator.gpu.vendor

The GPU vendor. amd is refused on the vLLM runtime.

Accepts
nvidia, amd
Default
nvidia
serving.maxContextTokens

The longest conversation, in tokens, the runtime reserves room for. In the console, Context length. Keep it at or below the model's own limit.

Accepts
a whole number, 1 or more
Default
the runtime's own
serving.kvCacheSize

The memory the runtime keeps for its KV cache. In the console, KV cache. On CPU it comes out of resources.memory and must be smaller than it; on a GPU it is device memory per GPU.

Accepts
a quantity above zero, for example "2Gi"
Default
CPU: about a quarter of resources.memory. GPU: sized by the runtime
serving.multimodal.maxImagesPerPrompt, maxVideosPerPrompt, maxAudioClipsPerPrompt

How many images, video clips or audio clips one request may carry, for a generative model on the vLLM runtime. Set at least one.

Accepts
a whole number, 1 or more
Default
the runtime's own limit per modality
scaling.minReplicas

The fewest replicas. In the console, the min under Replicas.

Accepts
1 or more
Default
1
scaling.maxReplicas

The most replicas. Above the min, the model autoscales; equal, it runs at that count.

Accepts
the min or more
Default
the min
scaling.metric

The signal replicas follow, with a target. In the console, Scale on. Leave it out for Automatic. Needs a max above the min.

Accepts
exactly one of requestsWaiting (a positive number, generative models only, needs the Workload Autoscaling add-on) or cpu (a whole percentage, 1 to 100, no leading zero)
Default
chosen for you: see A range on Automatic. Targets: requestsWaiting 2, cpu 80
queue.name

A queue the cluster's Workload Queueing add-on declares. In the console, Workload queue. Fixed once the model exists.

Accepts
a queue name the add-on declares
Default
none: no queue

If it's refused​

These come back from Check model, Review or a dry run, before anything is deployed, unless the card says otherwise.

"source.model.resources.cpu "0" must be greater than zero (for example "2" or "500m")"
Cause
CPU is zero or negative. The same refusal names source.model.resources.memory, with the example "8Gi", for memory.
Fix
Set a value above zero, or leave it empty for the default.
"source.model.resources.cpu "abc" is not a Kubernetes quantity (for example "2" or "500m")"
Cause
The value is not a quantity. Memory is refused the same way.
Fix
Write a quantity such as 2, 500m or 8Gi.
Memory is below the default: "source.model.resources.memory is 1400Mi, below the 4Gi this runtime gets by default. A model that needs more may run out of memory while it starts: raise that field if it does."
Cause
A warning, not a refusal: what a model needs is not known before it runs. The deploy goes ahead.
Fix
Raise Memory if the model runs out of memory.
"model.resources.accelerator.gpu.vendor "intel" must be nvidia or amd"
Cause
The vendor is not one AstroPulse supports.
Fix
Set nvidia or amd.
No engine build for that GPU vendor: "model.resources.accelerator.gpu.vendor is "amd", and the kserve-vllmserver runtime runs on nvidia GPUs only. Set model.resources.accelerator.gpu.vendor to nvidia, or remove model.resources.accelerator to serve on CPU."
Cause
The vLLM runtime runs on NVIDIA GPUs only.
Fix
Pick an NVIDIA GPU, or None, CPU model.
"spec.source.model.serving.maxContextTokens in body should be greater than or equal to 1"
Cause
Context length is 0.
Fix
Set 1 or more, or leave it empty.
"source.model.serving.kvCacheSize "6Gi" fills source.model.resources.memory "6Gi", leaving no room for the runtime or the model: raise the memory or lower the cache"
Cause
On CPU the KV cache comes out of Memory, and this one takes all of it.
Fix
Raise Memory or lower KV cache.
Check the KV cache size: "source.model.serving.kvCacheSize is 4Gi of device memory per GPU, and with it set the runtime skips its own memory check. A size near the GPU's memory may start and then run out under load: lower it if that happens."
Cause
A warning on every dry run for a GPU model with KV cache set.
Fix
Lower it if the model runs out of memory under load, or leave it empty.
"source.model.serving.kvCacheSize has no effect here: AstroPulse sets the KV cache only on the generative runtime it installs. Drop the field, or size the cache in your runtime's own configuration."
Cause
A dry-run warning: the model uses a runtime AstroPulse did not install.
Fix
Remove KV cache, or size the cache in your runtime.
"model.serving.multimodal.maxImagesPerPrompt is 0: set it to 1 or more, or leave it out to keep the runtime's own limit for that modality"
Cause
A limit is 0.
Fix
Set 1 or more, or leave it out.
"model.serving.multimodal sets no limit: set at least one of maxImagesPerPrompt, maxVideosPerPrompt or maxAudioClipsPerPrompt, or drop the block"
Cause
The multimodal block is empty.
Fix
Set one limit, or remove the block.
"model.serving.multimodal applies to a generative model only, and format "sklearn" is served by a predictive runtime that accepts no image, video or audio parts: ..."
Cause
A predictive model does not take images, video or audio.
Fix
Remove multimodal.
"model.scaling.metric.requestsWaiting has nothing to scale: minReplicas and maxReplicas are both 1. Set maxReplicas above minReplicas, or remove model.scaling.metric to run a fixed count."
Cause
A signal is chosen with min equal to max.
Fix
Raise the max, or choose Automatic.
"model.scaling.metric.requestsWaiting needs a runtime-metric autoscaler, and this cluster does not have one. Install the workload-autoscaling add-on and point it at a Prometheus that scrapes your models (configuration.metricsSource.prometheus.endpoint), or scale on cpu instead."
Cause
Queue depth needs the Workload Autoscaling add-on.
Fix
Install it from the cluster's Add-ons tab, or choose CPU utilisation or Automatic.
A CPU target such as "080" or "80.5" is not "a whole percentage without a leading zero", and "120" "cannot exceed 100"
Cause
The CPU target is not a whole percentage from 1 to 100.
Fix
Write a whole number such as 80.
CPU scaling doesn't follow GPU load: "This model's work is on its GPU, which CPU use doesn't reflect, so it may not add replicas when it's busy."
Cause
A warning: CPU utilisation on a GPU model.
Fix
Choose Queue depth or Automatic.
The earlier autoscaler hasn't gone yet: "Wait a minute and apply again. The model keeps running at its fixed count until then."
Cause
The model moves from a fixed count to queue depth while the earlier autoscaler is still being removed.
Fix
Wait a minute and update again.
"queue is fixed once the application exists: a model's replicas keep the queue they were admitted through. Delete and recreate the application to put it on a different queue"
Cause
An update changes Workload queue.
Fix
Delete the model and deploy it again on the new queue.
Workload-queueing add-on is not installed: "source.model.queue names "team-a", but the workload-queueing add-on is not installed on cluster <cluster>. ..."
Cause
The cluster has no Workload Queueing add-on.
Fix
Install it from the cluster's Add-ons tab and declare the queue under configuration.workloadQueueing.clusterQueues.
Workload queue is not declared on the cluster: "source.model.queue names "team-a", but the workload-queueing add-on on cluster <cluster> declares only: research. ..."
Cause
The queue name is not declared.
Fix
Name a declared queue, or declare it on the add-on.
Workload-queueing add-on does not watch Deployments
Cause
The add-on's integrations do not include deployment.
Fix
Set the integrations list the refusal gives on the add-on.
Workload queue cannot hold this model's GPUs (or CPU, or memory): "...its replicas would wait in the queue forever."
Cause
One replica needs more than the queue's whole quota.
Fix
Raise the quota the refusal names, or make the replica smaller.
The model waits with "The model is waiting for a node it can run on: a GPU node the cluster couldn't launch, or no room on its nodes. Its events say which."
Cause
After deploy: no node has room, or the cloud would not launch one. A Spot model with no Spot capacity, or memory or CPU larger than the instance, both read like this.
Fix
Read the model's Events tab. "no instance type has enough resources" or "Insufficient memory": lower Memory or CPU (see Memory on a GPU instance). No capacity: wait, or use Any or OnDemand.
Can't start: "The model keeps running out of memory at its memory limit of 1400Mi. Raise source.model.resources.memory, or lower source.model.serving.kvCacheSize or maxContextTokens, and apply the application again."
Cause
After deploy: the replica used all its memory.
Fix
Raise Memory, or lower KV cache or Context length, then update the model.
Can't start: "The model can't start: its KV cache is too small for its context. Raise source.model.resources.memory or source.model.serving.kvCacheSize, or lower source.model.serving.maxContextTokens, and apply the application again."
Cause
After deploy: the cache cannot hold one full context. On a GPU the fix names only kvCacheSize and maxContextTokens.
Fix
Do what the message says, then update the model.
Can't start: "The model keeps exiting with code 1 and restarting; its logs say why.", with a notice naming max_model_len
Cause
After deploy: Context length is above the model's limit.
Fix
Set Context length to the model's limit or lower. See Context length.

Next​