---
type: api
title: Update a trained model deployment
description: ## Required authorization
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-ml-update-trained-model-deployment
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-ml-update-trained-model-deployment
products:
  - Elasticsearch
---

# Update a trained model deployment

Availability: 8.6+

## Paths

- `POST` `/_ml/trained_models/{model_id}/deployment/_update`

- [Api key auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#apikeyauth)
- [Basic auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#basicauth)
- [Bearer auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#bearerauth)

#### Path Parameters

- `model_id` (string Id)
  The unique identifier of the trained model. Currently, only PyTorch models are supported.

## Description



## Required authorization

* Cluster privileges: `manage_ml`

## Query String Parameters

- `number_of_allocations` (number · default: 1)
  The number of model allocations on each node where the model is deployed.
All allocations on a node share the same copy of the model in memory but use
a separate set of threads to evaluate the model.
Increasing this value generally increases the throughput.
If this setting is greater than the number of hardware threads
it will automatically be changed to a value less than the number of hardware threads.

## Request Body

`application/json`

- `number_of_allocations` (number · default: 1) — optional
  The number of model allocations on each node where the model is deployed.
All allocations on a node share the same copy of the model in memory but use
a separate set of threads to evaluate the model.
Increasing this value generally increases the throughput.
If this setting is greater than the number of hardware threads
it will automatically be changed to a value less than the number of hardware threads.
If adaptive_allocations is enabled, do not set this value, because it’s automatically set.
- `adaptive_allocations` ({} AdaptiveAllocationsSettings) — optional
  Adaptive allocations configuration. When enabled, the number of allocations
is set based on the current load.
If adaptive_allocations is enabled, do not set the number of allocations manually.
  - `enabled` (boolean) — required
    If true, adaptive_allocations is enabled
  - `min_number_of_allocations` (number) — optional
    Specifies the minimum number of allocations to scale to.
If set, it must be greater than or equal to 0.
If not defined, the deployment scales to 0.
  - `max_number_of_allocations` (number) — optional
    Specifies the maximum number of allocations to scale to.
If set, it must be greater than or equal to min_number_of_allocations.

## Response

`application/json`

- `assignment` ({} TrainedModelAssignment)
  - `adaptive_allocations` (union oneOf) — nullable
    - **AdaptiveAllocationsSettings**
      - `enabled` (boolean)
        If true, adaptive_allocations is enabled
      - `min_number_of_allocations` (number)
        Specifies the minimum number of allocations to scale to.
If set, it must be greater than or equal to 0.
If not defined, the deployment scales to 0.
      - `max_number_of_allocations` (number)
        Specifies the maximum number of allocations to scale to.
If set, it must be greater than or equal to min_number_of_allocations.
    - **string**
  - `assignment_state` (enum DeploymentAssignmentState)
    The overall assignment state.

Supported values include:
  - `started`: The deployment is usable; at least one node has the model allocated.
  - `starting`: The deployment has recently started but is not yet usable; the model is not allocated on any nodes.
  - `stopping`: The deployment is preparing to stop and deallocate the model from the relevant nodes.
  - `failed`: The deployment is on a failed state and must be re-deployed.
    Values: `started`, `starting`, `stopping`, `failed`
  - `max_assigned_allocations` (number)
  - `reason` (string)
  - `routing_table` (map string to TrainedModelAssignmentRoutingTable)
    The allocation state for each node.
    Map values ({} TrainedModelAssignmentRoutingTable)
    - `reason` (string)
      The reason for the current state. It is usually populated only when the
`routing_state` is `failed`.
    - `routing_state` (enum RoutingState)
      The current routing state.

Supported values include:
  - `failed`: The allocation attempt failed.
  - `started`: The trained model is allocated and ready to accept inference requests.
  - `starting`: The trained model is attempting to allocate on this node; inference requests are not yet accepted.
  - `stopped`: The trained model is fully deallocated from this node.
  - `stopping`: The trained model is being deallocated from this node.
      Values: `failed`, `started`, `starting`, `stopped`, `stopping`
    - `current_allocations` (number)
      Current number of allocations.
    - `target_allocations` (number)
      Target number of allocations.
  - `start_time` (DateTime)
    The timestamp when the deployment started.
  - `task_parameters` ({} TrainedModelAssignmentTaskParameters)
    - `model_bytes` (number | string ByteSize)
      The size of the trained model in bytes.
    - `model_id` (string Id)
      The unique identifier for the trained model.
    - `deployment_id` (string Id)
      The unique identifier for the trained model deployment.
    - `cache_size` (number | string ByteSize)
      The size of the trained model cache.
    - `number_of_allocations` (number)
      The total number of allocations this model is assigned across ML nodes.
    - `priority` (enum TrainingPriority)
      Values: `normal`, `low`
    - `per_deployment_memory_bytes` (number | string ByteSize)
    - `per_allocation_memory_bytes` (number | string ByteSize)
    - `queue_capacity` (number)
      Number of inference requests are allowed in the queue at a time.
    - `threads_per_allocation` (number)
      Number of threads per allocation.
## Code Examples

#### Console

```console
POST _ml/trained_models/elastic__distilbert-base-uncased-finetuned-conll03-english/deployment/_update
{
  "number_of_allocations": 4
}
```

#### JavaScript

```javascript
const response = await client.ml.updateTrainedModelDeployment({
  model_id: "elastic__distilbert-base-uncased-finetuned-conll03-english",
  number_of_allocations: 4,
});
```

#### Python

```python
resp = client.ml.update_trained_model_deployment(
    model_id="elastic__distilbert-base-uncased-finetuned-conll03-english",
    number_of_allocations=4,
)
```

#### curl

```curl
curl -X POST "$ELASTICSEARCH_URL/_ml/trained_models/elastic__distilbert-base-uncased-finetuned-conll03-english/deployment/_update" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "number_of_allocations": 4
  }'
```

#### Java

```java
client.ml().updateTrainedModelDeployment(u -> u
    .modelId("elastic__distilbert-base-uncased-finetuned-conll03-english")
    .numberOfAllocations(4)
);
```

#### C#

```c#
var response = await client.MachineLearning
    .UpdateTrainedModelDeploymentAsync(modelId: "elastic__distilbert-base-uncased-finetuned-conll03-english", d1 => d1
        .NumberOfAllocations(4)
    );
```

#### PHP

```php
$resp = $client->ml()->updateTrainedModelDeployment([
    "model_id" => "elastic__distilbert-base-uncased-finetuned-conll03-english",
    "body" => [
        "number_of_allocations" => 4,
    ],
]);
```

#### Ruby

```ruby
response = client.ml.update_trained_model_deployment(
  model_id: "elastic__distilbert-base-uncased-finetuned-conll03-english",
  body: {
    "number_of_allocations": 4
  }
)
```

