From c0564ebd16224af93a69a28f9175adebd0e07137 Mon Sep 17 00:00:00 2001 From: kosabogi Date: Thu, 24 Oct 2024 20:07:15 +0200 Subject: [PATCH 01/19] Adds Trained model autoscaling page --- serverless/images/ml-nlp-deployment.png | Bin 0 -> 108579 bytes serverless/nav/serverless-general.docnav.json | 3 + serverless/pages/ml-nlp-auto-scale.mdx | 132 ++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 serverless/images/ml-nlp-deployment.png create mode 100644 serverless/pages/ml-nlp-auto-scale.mdx diff --git a/serverless/images/ml-nlp-deployment.png b/serverless/images/ml-nlp-deployment.png new file mode 100644 index 0000000000000000000000000000000000000000..640bf19669539335cee4b70aa007f2f968af445c GIT binary patch literal 108579 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 f2L)Rb<`I3->-4xjM8)YD@FV$NR + To fully leverage model autoscaling, it is highly recommended to enable [Elasticsearch deployment autoscaling](https://www.elastic.co/guide/en/cloud/current/ec-autoscaling.html). + + +Trained model autoscaling is available for Search, Observability, and Security projects on serverless deployments. However, these projects handle processing power differently, which impacts their costs and resource limits. + +Security and Observability projects are only charged for data collection (ingest) and storage (retention). They are not charged for processing power (vCPU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. + +Because vCPU processing is costly, Search projects are given access to more processing resources, while Security and Observability projects have lower limits on their processing power. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. + +On serverless, adaptive allocations are automatically enabled for all project types. +However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. + +## Enabling autoscaling through APIs - adaptive allocations + +Model allocations are independent units of work for NLP tasks. +If you set the numbers of threads and allocations for a model manually, they remain constant even when not all the available resources are fully used or when the load on the model requires more resources. +Instead of setting the number of allocations manually, you can enable adaptive allocations to set the number of allocations based on the load on the process. +This can help you to manage performance and cost more easily. +(Refer to the [pricing calculator](https://cloud.elastic.co/pricing) to learn more about the possible costs.) + +When adaptive allocations are enabled, the number of allocations of the model is set automatically based on the current load. +When the load is high, a new model allocation is automatically created. +When the load is low, a model allocation is automatically removed. +You can explicitely set the minimum and maximum number of allocations; autoscaling will occur within these limits. + + + If you manually set the minimum number of Machine Learning (ML) resources (allocations) to 1, you will be charged every hour, even if the system isn’t fully using those resources. + + +You can enable adaptive allocations by using: + +- the create inference endpoint API for [ELSER](https://www.elastic.co/guide/en/elasticsearch/reference/master/infer-service-elser.html), [E5 and models uploaded through Eland](https://www.elastic.co/guide/en/elasticsearch/reference/master/infer-service-elasticsearch.html) that are used as inference services. +- the [start trained model deployment](https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trained-model-deployment.html) or [update trained model deployment](https://www.elastic.co/guide/en/elasticsearch/reference/master/update-trained-model-deployment.html) APIs for trained models that are deployed on machine learning nodes. + +If the new allocations fit on the current machine learning nodes, they are immediately started. +If more resource capacity is needed for creating new model allocations, then your machine learning node will be scaled up if machine learning autoscaling is enabled to provide enough resources for the new allocation. +The number of model allocations can be scaled down to 0. +They cannot be scaled up to more than 32 allocations, unless you explicitly set the maximum number of allocations to more. +Adaptive allocations must be set up independently for each deployment and [inference endpoint](https://www.elastic.co/guide/en/elasticsearch/reference/master/put-inference-api.html). + +When you create inference endpoints on serverless deployments using Kibana, adaptive allocations are automatically turned on, and there is no option to disable them. + +### Optimizing for typical use cases + +You can optimize your model deployment for typical use cases, such as search and ingest. +When you optimize for ingest, the throughput will be higher, which increases the number of inference requests that can be performed in parallel. +When you optimize for search, the latency will be lower during search processes. + +- If you want to optimize for ingest, set the number of threads to `1` (`"threads_per_allocation": 1`). +- If you want to optimize for search, set the number of threads to greater than `1`. +Increasing the number of threads will make the search processes more performant. + +## Enabling autoscaling in Kibana - adaptive resources + +You can enable adaptive resources for your models when starting or updating the model deployment. +Adaptive resources make it possible for Elasticsearch to scale up or down the available resources based on the load on the process. +This can help you to manage performance and cost more easily. +When adaptive resources are enabled, the number of vCPUs that the model deployment uses is set automatically based on the current load. +When the load is high, the number of vCPUs that the process can use is automatically increased. +When the load is low, the number of vCPUs that the process can use is automatically decreased. + +You can choose from three levels of resource usage for your trained model deployment; autoscaling will occur within the selected level's range. + +Refer to the tables in the auto-scaling-matrix section to find out the setings for the level you selected. + + + +## Model deployment resource matrix + +The used resources for trained model deployments depend on three factors: + +- your cluster environment (Serverless, Cloud, or on-premises) +- the use case you optimize the model deployment for (ingest or search) +- whether model autoscaling is enabled with adaptive allocations/resources to have dynamic resources, or disabled for static resources + +The following tables show you the number of allocations, threads, and vCPUs available on serverless when adaptive resources are enabled or disabled. + +### Deployments on serverless optimized for ingest + +In case of ingest-optimized deployments, we maximize the number of model allocations. + +#### Adaptive resources enabled + +| Level | Allocations | Threads | vCPUs | +|--------|------------------------------------------------------|---------|------------------------------------------------------| +| Low | 0 to 2 dynamically | 1 | 0 to 2 dynamically | +| Medium | 1 to 32 dynamically | 1 | 1 to 32 dynamically | +| High | 1 to 512 for Search
1 to 128 for Security and Observability | 1 | 1 to 512 for Search
1 to 128 for Security and Observability | + +#### Adaptive resources disabled (Search only) + +| Level | Allocations | Threads | vCPUs | +|--------|------------------------------------------------------|---------|------------------------------------------------------| +| Low | Exactly 2 | 1 | 2 | +| Medium | Exactly 32 | 1 | 32 | +| High | 512 for Search
No static allocations for Security and Observability | 1 | 512 for Search
No static allocations for Security and Observability | + +### Deployments on serverless optimized for search + +In case of search-optimized deployments, we maximize the number of threads. +The maximum number of threads that can be claimed depends on the hardware your architecture has. + +#### Adaptive resources enabled + +| Level | Allocations | Threads | vCPUs | +|--------|------------------------------------------------------|---------|------------------------------------------------------| +| Low | 0 to 1 dynamically | Always 2 | 0 to 2 dynamically | +| Medium | 1 to 2 (if threads=16), dinamically | Maximum (for example, 16) | 1 to 32 dynamically | +| High | 1 to 32 (if threads=16), dinamically | Maximum (for example, 16) | 1 to 512 in Search
1 to 128 for Security and Observability | + +#### Adaptive resources disabled + +| Level | Allocations | Threads | vCPUs | +|--------|---------------------------------------------------------|------------------------|------------------------------------------------------| +| Low | 1 statically | Always 2 | 2 | +| Medium | 2 statically (if threads=16) | Maximum (for example, 16) | 32 | +| High | 32 statically (if threads=16) for Search
No static allocations for Security and Observability | Maximum (for example, 16) | 512 for Search
No static allocations for Security and Observability | \ No newline at end of file From d8dde76d6cfb34367ebf16d759323bde76b6ff29 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:46:39 +0200 Subject: [PATCH 02/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 1c1cafbd..85b56ac4 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -20,7 +20,7 @@ Trained model autoscaling is available for Search, Observability, and Security p Security and Observability projects are only charged for data collection (ingest) and storage (retention). They are not charged for processing power (vCPU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. -Because vCPU processing is costly, Search projects are given access to more processing resources, while Security and Observability projects have lower limits on their processing power. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. +Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. On serverless, adaptive allocations are automatically enabled for all project types. However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. From f6b650d53e565c198281e32071054a9effb8e3e0 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:47:44 +0200 Subject: [PATCH 03/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 85b56ac4..8e5d47dc 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -22,7 +22,7 @@ Security and Observability projects are only charged for data collection (ingest Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. -On serverless, adaptive allocations are automatically enabled for all project types. +On Serverless, adaptive allocations are automatically enabled for all project types. However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. ## Enabling autoscaling through APIs - adaptive allocations From 4683ddc96da9c586d656dfd18db9bc6d36c1edde Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:48:53 +0200 Subject: [PATCH 04/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 8e5d47dc..48ee39e1 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -39,7 +39,7 @@ When the load is low, a model allocation is automatically removed. You can explicitely set the minimum and maximum number of allocations; autoscaling will occur within these limits. - If you manually set the minimum number of Machine Learning (ML) resources (allocations) to 1, you will be charged every hour, even if the system isn’t fully using those resources. + If you set the minimum number of allocations to 1, you will be charged even if the system is not using those resources. You can enable adaptive allocations by using: From f91c731b506a1f3a385aad08112766907dde737a Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:50:12 +0200 Subject: [PATCH 05/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 48ee39e1..f5507bb2 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -88,7 +88,7 @@ The used resources for trained model deployments depend on three factors: - the use case you optimize the model deployment for (ingest or search) - whether model autoscaling is enabled with adaptive allocations/resources to have dynamic resources, or disabled for static resources -The following tables show you the number of allocations, threads, and vCPUs available on serverless when adaptive resources are enabled or disabled. +The following tables show you the number of allocations, threads, and vCUs available on Serverless when adaptive resources are enabled or disabled. ### Deployments on serverless optimized for ingest From f17b2a412d7b0a727f2fb111a6d0aeaa6d7005aa Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:50:34 +0200 Subject: [PATCH 06/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index f5507bb2..7c9a7e00 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -96,7 +96,7 @@ In case of ingest-optimized deployments, we maximize the number of model allocat #### Adaptive resources enabled -| Level | Allocations | Threads | vCPUs | +| Level | Allocations | Threads | vCUs | |--------|------------------------------------------------------|---------|------------------------------------------------------| | Low | 0 to 2 dynamically | 1 | 0 to 2 dynamically | | Medium | 1 to 32 dynamically | 1 | 1 to 32 dynamically | From 26fb9e08269d26278f6fbc32cd4650d3e3b2a548 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:50:49 +0200 Subject: [PATCH 07/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 7c9a7e00..38407ae4 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -70,9 +70,9 @@ Increasing the number of threads will make the search processes more performant. You can enable adaptive resources for your models when starting or updating the model deployment. Adaptive resources make it possible for Elasticsearch to scale up or down the available resources based on the load on the process. This can help you to manage performance and cost more easily. -When adaptive resources are enabled, the number of vCPUs that the model deployment uses is set automatically based on the current load. -When the load is high, the number of vCPUs that the process can use is automatically increased. -When the load is low, the number of vCPUs that the process can use is automatically decreased. +When adaptive resources are enabled, the number of vCUs that the model deployment uses is set automatically based on the current load. +When the load is high, the number of vCUs that the process can use is automatically increased. +When the load is low, the number of vCUs that the process can use is automatically decreased. You can choose from three levels of resource usage for your trained model deployment; autoscaling will occur within the selected level's range. From c8b8b3bcf4b876b9a7c07e3f1e79b7b1a8250577 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:51:05 +0200 Subject: [PATCH 08/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 38407ae4..51c3284f 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -53,7 +53,7 @@ The number of model allocations can be scaled down to 0. They cannot be scaled up to more than 32 allocations, unless you explicitly set the maximum number of allocations to more. Adaptive allocations must be set up independently for each deployment and [inference endpoint](https://www.elastic.co/guide/en/elasticsearch/reference/master/put-inference-api.html). -When you create inference endpoints on serverless deployments using Kibana, adaptive allocations are automatically turned on, and there is no option to disable them. +When you create inference endpoints on Serverless using Kibana, adaptive allocations are automatically turned on, and there is no option to disable them. ### Optimizing for typical use cases From 55117e6e50fcd7a120d1c441fb9814dabb2cf96e Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:51:23 +0200 Subject: [PATCH 09/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 51c3284f..67c01ffd 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -104,7 +104,7 @@ In case of ingest-optimized deployments, we maximize the number of model allocat #### Adaptive resources disabled (Search only) -| Level | Allocations | Threads | vCPUs | +| Level | Allocations | Threads | vCUs | |--------|------------------------------------------------------|---------|------------------------------------------------------| | Low | Exactly 2 | 1 | 2 | | Medium | Exactly 32 | 1 | 32 | From ac3a20196d3c9312cea14dc0d2f2a7916309fe76 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:51:42 +0200 Subject: [PATCH 10/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 67c01ffd..77234400 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -125,7 +125,7 @@ The maximum number of threads that can be claimed depends on the hardware your a #### Adaptive resources disabled -| Level | Allocations | Threads | vCPUs | +| Level | Allocations | Threads | vCUs | |--------|---------------------------------------------------------|------------------------|------------------------------------------------------| | Low | 1 statically | Always 2 | 2 | | Medium | 2 statically (if threads=16) | Maximum (for example, 16) | 32 | From 18487de52ca707388ff517f3ee381a3d747ea41c Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:52:08 +0200 Subject: [PATCH 11/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 77234400..0ea61820 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -18,7 +18,7 @@ There are two ways to enable autoscaling: Trained model autoscaling is available for Search, Observability, and Security projects on serverless deployments. However, these projects handle processing power differently, which impacts their costs and resource limits. -Security and Observability projects are only charged for data collection (ingest) and storage (retention). They are not charged for processing power (vCPU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. +Security and Observability projects are only charged for data ingestion and retention. They are not charged for processing power (vCU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. From e430ce7e35d31075389229f37f3f7d94e0a303c9 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:52:27 +0200 Subject: [PATCH 12/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 0ea61820..7184c9b5 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -117,7 +117,7 @@ The maximum number of threads that can be claimed depends on the hardware your a #### Adaptive resources enabled -| Level | Allocations | Threads | vCPUs | +| Level | Allocations | Threads | vCUs | |--------|------------------------------------------------------|---------|------------------------------------------------------| | Low | 0 to 1 dynamically | Always 2 | 0 to 2 dynamically | | Medium | 1 to 2 (if threads=16), dinamically | Maximum (for example, 16) | 1 to 32 dynamically | From 27b445c4ab2c1220ac9b7f14d98db37de3ff4af8 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:52:42 +0200 Subject: [PATCH 13/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 7184c9b5..78fc03bb 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -113,7 +113,6 @@ In case of ingest-optimized deployments, we maximize the number of model allocat ### Deployments on serverless optimized for search In case of search-optimized deployments, we maximize the number of threads. -The maximum number of threads that can be claimed depends on the hardware your architecture has. #### Adaptive resources enabled From 8f7a9d207c774819b0071b139b1cbfcf5408a420 Mon Sep 17 00:00:00 2001 From: kosabogi Date: Fri, 25 Oct 2024 12:01:29 +0200 Subject: [PATCH 14/19] Changes paragraph placement --- serverless/pages/ml-nlp-auto-scale.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 78fc03bb..84122128 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -20,11 +20,6 @@ Trained model autoscaling is available for Search, Observability, and Security p Security and Observability projects are only charged for data ingestion and retention. They are not charged for processing power (vCU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. -Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. - -On Serverless, adaptive allocations are automatically enabled for all project types. -However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. - ## Enabling autoscaling through APIs - adaptive allocations Model allocations are independent units of work for NLP tasks. @@ -78,7 +73,12 @@ You can choose from three levels of resource usage for your trained model deploy Refer to the tables in the auto-scaling-matrix section to find out the setings for the level you selected. - + + +Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. + +On Serverless, adaptive allocations are automatically enabled for all project types. +However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. ## Model deployment resource matrix From 1beb41c6a4b99e8f20f327662c8c7ae234fcb9fd Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:58:52 +0100 Subject: [PATCH 15/19] Update serverless/pages/ml-nlp-auto-scale.mdx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: István Zoltán Szabó --- serverless/pages/ml-nlp-auto-scale.mdx | 3 --- 1 file changed, 3 deletions(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 84122128..126c8861 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -12,9 +12,6 @@ There are two ways to enable autoscaling: - through APIs by enabling adaptive allocations - in Kibana by enabling adaptive resources - - To fully leverage model autoscaling, it is highly recommended to enable [Elasticsearch deployment autoscaling](https://www.elastic.co/guide/en/cloud/current/ec-autoscaling.html). - Trained model autoscaling is available for Search, Observability, and Security projects on serverless deployments. However, these projects handle processing power differently, which impacts their costs and resource limits. From 031c91f1fdea7a2003be7e8f4d307cf7d421ed8f Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:57:23 +0100 Subject: [PATCH 16/19] Update serverless/pages/ml-nlp-auto-scale.mdx Co-authored-by: Dima Arnautov --- serverless/pages/ml-nlp-auto-scale.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 126c8861..07162602 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -62,7 +62,7 @@ Increasing the number of threads will make the search processes more performant. You can enable adaptive resources for your models when starting or updating the model deployment. Adaptive resources make it possible for Elasticsearch to scale up or down the available resources based on the load on the process. This can help you to manage performance and cost more easily. -When adaptive resources are enabled, the number of vCUs that the model deployment uses is set automatically based on the current load. +When adaptive resources are enabled, the number of VCUs that the model deployment uses is set automatically based on the current load. When the load is high, the number of vCUs that the process can use is automatically increased. When the load is low, the number of vCUs that the process can use is automatically decreased. From 9fdee403d1e6d6478a9b1490285556a063a937a6 Mon Sep 17 00:00:00 2001 From: kosabogi Date: Wed, 6 Nov 2024 08:13:04 +0100 Subject: [PATCH 17/19] Updates document based on feedback --- serverless/pages/ml-nlp-auto-scale.mdx | 66 +++++++++++++------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx index 07162602..e127294f 100644 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ b/serverless/pages/ml-nlp-auto-scale.mdx @@ -13,20 +13,20 @@ There are two ways to enable autoscaling: - in Kibana by enabling adaptive resources -Trained model autoscaling is available for Search, Observability, and Security projects on serverless deployments. However, these projects handle processing power differently, which impacts their costs and resource limits. +Trained model autoscaling is available for both serverless and Cloud deployments. In serverless deployments, processing power is managed differently across Search, Observability, and Security projects, which impacts their costs and resource limits. -Security and Observability projects are only charged for data ingestion and retention. They are not charged for processing power (vCU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. +Security and Observability projects are only charged for data ingestion and retention. They are not charged for processing power (VCU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. ## Enabling autoscaling through APIs - adaptive allocations Model allocations are independent units of work for NLP tasks. -If you set the numbers of threads and allocations for a model manually, they remain constant even when not all the available resources are fully used or when the load on the model requires more resources. +If you set a static number of allocations, they remain constant even when not all the available resources are fully used or when the load on the model requires more resources. Instead of setting the number of allocations manually, you can enable adaptive allocations to set the number of allocations based on the load on the process. This can help you to manage performance and cost more easily. (Refer to the [pricing calculator](https://cloud.elastic.co/pricing) to learn more about the possible costs.) When adaptive allocations are enabled, the number of allocations of the model is set automatically based on the current load. -When the load is high, a new model allocation is automatically created. +When the load is high, additional model allocations are automatically created as needed. When the load is low, a model allocation is automatically removed. You can explicitely set the minimum and maximum number of allocations; autoscaling will occur within these limits. @@ -63,8 +63,8 @@ You can enable adaptive resources for your models when starting or updating the Adaptive resources make it possible for Elasticsearch to scale up or down the available resources based on the load on the process. This can help you to manage performance and cost more easily. When adaptive resources are enabled, the number of VCUs that the model deployment uses is set automatically based on the current load. -When the load is high, the number of vCUs that the process can use is automatically increased. -When the load is low, the number of vCUs that the process can use is automatically decreased. +When the load is high, the number of VCUs that the process can use is automatically increased. +When the load is low, the number of VCUs that the process can use is automatically decreased. You can choose from three levels of resource usage for your trained model deployment; autoscaling will occur within the selected level's range. @@ -85,44 +85,44 @@ The used resources for trained model deployments depend on three factors: - the use case you optimize the model deployment for (ingest or search) - whether model autoscaling is enabled with adaptive allocations/resources to have dynamic resources, or disabled for static resources -The following tables show you the number of allocations, threads, and vCUs available on Serverless when adaptive resources are enabled or disabled. +The following tables show you the number of allocations, threads, and VCUs available on Serverless when adaptive resources are enabled or disabled. ### Deployments on serverless optimized for ingest In case of ingest-optimized deployments, we maximize the number of model allocations. -#### Adaptive resources enabled +### Adaptive Resources Enabled -| Level | Allocations | Threads | vCUs | -|--------|------------------------------------------------------|---------|------------------------------------------------------| -| Low | 0 to 2 dynamically | 1 | 0 to 2 dynamically | -| Medium | 1 to 32 dynamically | 1 | 1 to 32 dynamically | -| High | 1 to 512 for Search
1 to 128 for Security and Observability | 1 | 1 to 512 for Search
1 to 128 for Security and Observability | +#### Ingest-Optimized Deployments -#### Adaptive resources disabled (Search only) +| Level | Allocations | Threads | VCUs | +|--------|------------------------------------------------------|---------|-----------------------------------------------------| +| Low | 0 to 2 dynamically | 1 | 0 to 16 dynamically | +| Medium | 1 to 32 dynamically | 1 | 8 to 256 dynamically | +| High | - 1 to 512 for Search
- 1 to 128 for Security and Observability | 1 | - 8 to 4096 for Search
- 8 to 1024 for Security and Observability | -| Level | Allocations | Threads | vCUs | -|--------|------------------------------------------------------|---------|------------------------------------------------------| -| Low | Exactly 2 | 1 | 2 | -| Medium | Exactly 32 | 1 | 32 | -| High | 512 for Search
No static allocations for Security and Observability | 1 | 512 for Search
No static allocations for Security and Observability | +#### Adaptive Resources Disabled (Search Only) -### Deployments on serverless optimized for search +| Level | Allocations | Threads | VCUs | +|--------|------------------------------------------------------|---------|-----------------------------------------------------| +| Low | Exactly 2 | 1 | 16 | +| Medium | Exactly 32 | 1 | 256 | +| High | - 512 for Search
- No static allocations for Security and Observability | 1 | - 4096 for Search
- No static allocations for Security and Observability | -In case of search-optimized deployments, we maximize the number of threads. +### Deployments on Serverless Optimized for Search -#### Adaptive resources enabled +#### Adaptive Resources Enabled -| Level | Allocations | Threads | vCUs | -|--------|------------------------------------------------------|---------|------------------------------------------------------| -| Low | 0 to 1 dynamically | Always 2 | 0 to 2 dynamically | -| Medium | 1 to 2 (if threads=16), dinamically | Maximum (for example, 16) | 1 to 32 dynamically | -| High | 1 to 32 (if threads=16), dinamically | Maximum (for example, 16) | 1 to 512 in Search
1 to 128 for Security and Observability | +| Level | Allocations | Threads | VCUs | +|--------|------------------------------------------------------|---------|-----------------------------------------------------| +| Low | 0 to 1 dynamically | Always 2 | 0 to 16 dynamically | +| Medium | 1 to 2 (if threads=16), dynamically | Maximum (e.g., 16) | 8 to 256 dynamically | +| High | - 1 to 32 (if threads=16), dynamically
- 1 to 128 for Security and Observability | Maximum (e.g., 16) | - 8 to 4096 for Search
- 8 to 1024 for Security and Observability | -#### Adaptive resources disabled +#### Adaptive Resources Disabled -| Level | Allocations | Threads | vCUs | -|--------|---------------------------------------------------------|------------------------|------------------------------------------------------| -| Low | 1 statically | Always 2 | 2 | -| Medium | 2 statically (if threads=16) | Maximum (for example, 16) | 32 | -| High | 32 statically (if threads=16) for Search
No static allocations for Security and Observability | Maximum (for example, 16) | 512 for Search
No static allocations for Security and Observability | \ No newline at end of file +| Level | Allocations | Threads | VCUs | +|--------|------------------------------------------------------|---------|-----------------------------------------------------| +| Low | 1 statically | Always 2 | 16 | +| Medium | 2 statically (if threads=16) | Maximum (e.g., 16) | 256 | +| High | - 32 statically (if threads=16) for Search
- No static allocations for Security and Observability | Maximum (e.g., 16) | - 4096 for Search
- No static allocations for Security and Observability | From 37ee519ccd53192bde769036612ae60a4b9ce4b4 Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Wed, 6 Nov 2024 08:54:11 -0600 Subject: [PATCH 18/19] mdx to asciidoc --- serverless/index-serverless-general.asciidoc | 2 + serverless/pages/ml-nlp-auto-scale.asciidoc | 210 +++++++++++++++++++ serverless/pages/ml-nlp-auto-scale.mdx | 128 ----------- 3 files changed, 212 insertions(+), 128 deletions(-) create mode 100644 serverless/pages/ml-nlp-auto-scale.asciidoc delete mode 100644 serverless/pages/ml-nlp-auto-scale.mdx diff --git a/serverless/index-serverless-general.asciidoc b/serverless/index-serverless-general.asciidoc index 08dbf303..7bf46038 100644 --- a/serverless/index-serverless-general.asciidoc +++ b/serverless/index-serverless-general.asciidoc @@ -32,3 +32,5 @@ include::./pages/service-status.asciidoc[leveloffset=+2] include::./pages/user-profile.asciidoc[leveloffset=+2] include::./pages/cloud-regions.asciidoc[leveloffset=+2] + +include::./pages/ml-nlp-auto-scale.asciidoc[leveloffset=+2] diff --git a/serverless/pages/ml-nlp-auto-scale.asciidoc b/serverless/pages/ml-nlp-auto-scale.asciidoc new file mode 100644 index 00000000..347bf1fc --- /dev/null +++ b/serverless/pages/ml-nlp-auto-scale.asciidoc @@ -0,0 +1,210 @@ +[[general-ml-nlp-auto-scale]] += Trained model autoscaling + +// :keywords: serverless + +You can enable autoscaling for each of your trained model deployments. +Autoscaling allows Elasticsearch to automatically adjust the resources the model deployment can use based on the workload demand. + +There are two ways to enable autoscaling: + +* through APIs by enabling adaptive allocations +* in Kibana by enabling adaptive resources + + +Trained model autoscaling is available for both serverless and Cloud deployments. In serverless deployments, processing power is managed differently across Search, Observability, and Security projects, which impacts their costs and resource limits. + +Security and Observability projects are only charged for data ingestion and retention. They are not charged for processing power (VCU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. + +[discrete] +[[enabling-autoscaling-through-apis-adaptive-allocations]] +== Enabling autoscaling through APIs - adaptive allocations + +Model allocations are independent units of work for NLP tasks. +If you set a static number of allocations, they remain constant even when not all the available resources are fully used or when the load on the model requires more resources. +Instead of setting the number of allocations manually, you can enable adaptive allocations to set the number of allocations based on the load on the process. +This can help you to manage performance and cost more easily. +(Refer to the https://cloud.elastic.co/pricing[pricing calculator] to learn more about the possible costs.) + +When adaptive allocations are enabled, the number of allocations of the model is set automatically based on the current load. +When the load is high, additional model allocations are automatically created as needed. +When the load is low, a model allocation is automatically removed. +You can explicitly set the minimum and maximum number of allocations; autoscaling will occur within these limits. + +[NOTE] +==== +If you set the minimum number of allocations to 1, you will be charged even if the system is not using those resources. +==== + +You can enable adaptive allocations by using: + +* the create inference endpoint API for https://www.elastic.co/guide/en/elasticsearch/reference/master/infer-service-elser.html[ELSER], https://www.elastic.co/guide/en/elasticsearch/reference/master/infer-service-elasticsearch.html[E5 and models uploaded through Eland] that are used as inference services. +* the https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trained-model-deployment.html[start trained model deployment] or https://www.elastic.co/guide/en/elasticsearch/reference/master/update-trained-model-deployment.html[update trained model deployment] APIs for trained models that are deployed on machine learning nodes. + +If the new allocations fit on the current machine learning nodes, they are immediately started. +If more resource capacity is needed for creating new model allocations, then your machine learning node will be scaled up if machine learning autoscaling is enabled to provide enough resources for the new allocation. +The number of model allocations can be scaled down to 0. +They cannot be scaled up to more than 32 allocations, unless you explicitly set the maximum number of allocations to more. +Adaptive allocations must be set up independently for each deployment and https://www.elastic.co/guide/en/elasticsearch/reference/master/put-inference-api.html[inference endpoint]. + +When you create inference endpoints on Serverless using Kibana, adaptive allocations are automatically turned on, and there is no option to disable them. + +[discrete] +[[optimizing-for-typical-use-cases]] +=== Optimizing for typical use cases + +You can optimize your model deployment for typical use cases, such as search and ingest. +When you optimize for ingest, the throughput will be higher, which increases the number of inference requests that can be performed in parallel. +When you optimize for search, the latency will be lower during search processes. + +* If you want to optimize for ingest, set the number of threads to `1` (`"threads_per_allocation": 1`). +* If you want to optimize for search, set the number of threads to greater than `1`. +Increasing the number of threads will make the search processes more performant. + +[discrete] +[[enabling-autoscaling-in-kibana-adaptive-resources]] +== Enabling autoscaling in Kibana - adaptive resources + +You can enable adaptive resources for your models when starting or updating the model deployment. +Adaptive resources make it possible for Elasticsearch to scale up or down the available resources based on the load on the process. +This can help you to manage performance and cost more easily. +When adaptive resources are enabled, the number of VCUs that the model deployment uses is set automatically based on the current load. +When the load is high, the number of VCUs that the process can use is automatically increased. +When the load is low, the number of VCUs that the process can use is automatically decreased. + +You can choose from three levels of resource usage for your trained model deployment; autoscaling will occur within the selected level's range. + +Refer to the tables in the auto-scaling-matrix section to find out the setings for the level you selected. + +image::images/ml-nlp-deployment.png[ML model deployment with adaptive resources enabled.] + +Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. + +On Serverless, adaptive allocations are automatically enabled for all project types. +However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. + +[discrete] +[[model-deployment-resource-matrix]] +== Model deployment resource matrix + +The used resources for trained model deployments depend on three factors: + +* your cluster environment (Serverless, Cloud, or on-premises) +* the use case you optimize the model deployment for (ingest or search) +* whether model autoscaling is enabled with adaptive allocations/resources to have dynamic resources, or disabled for static resources + +The following tables show you the number of allocations, threads, and VCUs available on Serverless when adaptive resources are enabled or disabled. + +[discrete] +[[deployments-on-serverless-optimized-for-ingest]] +=== Deployments on serverless optimized for ingest + +In case of ingest-optimized deployments, we maximize the number of model allocations. + +[discrete] +[[adaptive-resources-enabled]] +=== Adaptive Resources Enabled + +[discrete] +[[ingest-optimized-deployments]] +==== Ingest-Optimized Deployments + +|=== +| Level | Allocations | Threads | VCUs + +| Low +| 0 to 2 dynamically +| 1 +| 0 to 16 dynamically + +| Medium +| 1 to 32 dynamically +| 1 +| 8 to 256 dynamically + +| High +a| * 1 to 512 for Search +* 1 to 128 for Security and Observability +| 1 +a| * 8 to 4096 for Search +* 8 to 1024 for Security and Observability +|=== + +[discrete] +[[adaptive-resources-disabled-search-only]] +==== Adaptive Resources Disabled (Search Only) + +|=== +| Level | Allocations | Threads | VCUs + +| Low +| Exactly 2 +| 1 +| 16 + +| Medium +| Exactly 32 +| 1 +| 256 + +| High +a| * 512 for Search +* No static allocations for Security and Observability +| 1 +a| * 4096 for Search +* No static allocations for Security and Observability | +|=== + +[discrete] +[[deployments-on-serverless-optimized-for-search]] +=== Deployments on Serverless Optimized for Search + +[discrete] +[[adaptive-resources-enabled-for-search]] +==== Adaptive Resources Enabled + +|=== +| Level | Allocations | Threads | VCUs + +| Low +| 0 to 1 dynamically +| Always 2 +| 0 to 16 dynamically + +| Medium +| 1 to 2 (if threads=16), dynamically +| Maximum (e.g., 16) +| 8 to 256 dynamically + +| High +a| * 1 to 32 (if threads=16), dynamically +* 1 to 128 for Security and Observability +| Maximum (e.g., 16) +a| * 8 to 4096 for Search +* 8 to 1024 for Security and Observability +|=== + +[discrete] +[[adaptive-resources-disabled-for-search]] +==== Adaptive Resources Disabled + +|=== +| Level | Allocations | Threads | VCUs + +| Low +| 1 statically +| Always 2 +| 16 + +| Medium +| 2 statically (if threads=16) +| Maximum (e.g., 16) +| 256 + +| High +a| * 32 statically (if threads=16) for Search +* No static allocations for Security and Observability +| Maximum (e.g., 16) +a| * 4096 for Search +* No static allocations for Security and Observability +|=== diff --git a/serverless/pages/ml-nlp-auto-scale.mdx b/serverless/pages/ml-nlp-auto-scale.mdx deleted file mode 100644 index e127294f..00000000 --- a/serverless/pages/ml-nlp-auto-scale.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -slug: /serverless/general/ml-nlp-auto-scale -title: Trained model autoscaling -tags: ['serverless'] ---- - -You can enable autoscaling for each of your trained model deployments. -Autoscaling allows Elasticsearch to automatically adjust the resources the model deployment can use based on the workload demand. - -There are two ways to enable autoscaling: - -- through APIs by enabling adaptive allocations -- in Kibana by enabling adaptive resources - - -Trained model autoscaling is available for both serverless and Cloud deployments. In serverless deployments, processing power is managed differently across Search, Observability, and Security projects, which impacts their costs and resource limits. - -Security and Observability projects are only charged for data ingestion and retention. They are not charged for processing power (VCU usage), which is used for more complex operations, like running advanced search models. For example, in Search projects, models such as ELSER require significant processing power to provide more accurate search results. - -## Enabling autoscaling through APIs - adaptive allocations - -Model allocations are independent units of work for NLP tasks. -If you set a static number of allocations, they remain constant even when not all the available resources are fully used or when the load on the model requires more resources. -Instead of setting the number of allocations manually, you can enable adaptive allocations to set the number of allocations based on the load on the process. -This can help you to manage performance and cost more easily. -(Refer to the [pricing calculator](https://cloud.elastic.co/pricing) to learn more about the possible costs.) - -When adaptive allocations are enabled, the number of allocations of the model is set automatically based on the current load. -When the load is high, additional model allocations are automatically created as needed. -When the load is low, a model allocation is automatically removed. -You can explicitely set the minimum and maximum number of allocations; autoscaling will occur within these limits. - - - If you set the minimum number of allocations to 1, you will be charged even if the system is not using those resources. - - -You can enable adaptive allocations by using: - -- the create inference endpoint API for [ELSER](https://www.elastic.co/guide/en/elasticsearch/reference/master/infer-service-elser.html), [E5 and models uploaded through Eland](https://www.elastic.co/guide/en/elasticsearch/reference/master/infer-service-elasticsearch.html) that are used as inference services. -- the [start trained model deployment](https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trained-model-deployment.html) or [update trained model deployment](https://www.elastic.co/guide/en/elasticsearch/reference/master/update-trained-model-deployment.html) APIs for trained models that are deployed on machine learning nodes. - -If the new allocations fit on the current machine learning nodes, they are immediately started. -If more resource capacity is needed for creating new model allocations, then your machine learning node will be scaled up if machine learning autoscaling is enabled to provide enough resources for the new allocation. -The number of model allocations can be scaled down to 0. -They cannot be scaled up to more than 32 allocations, unless you explicitly set the maximum number of allocations to more. -Adaptive allocations must be set up independently for each deployment and [inference endpoint](https://www.elastic.co/guide/en/elasticsearch/reference/master/put-inference-api.html). - -When you create inference endpoints on Serverless using Kibana, adaptive allocations are automatically turned on, and there is no option to disable them. - -### Optimizing for typical use cases - -You can optimize your model deployment for typical use cases, such as search and ingest. -When you optimize for ingest, the throughput will be higher, which increases the number of inference requests that can be performed in parallel. -When you optimize for search, the latency will be lower during search processes. - -- If you want to optimize for ingest, set the number of threads to `1` (`"threads_per_allocation": 1`). -- If you want to optimize for search, set the number of threads to greater than `1`. -Increasing the number of threads will make the search processes more performant. - -## Enabling autoscaling in Kibana - adaptive resources - -You can enable adaptive resources for your models when starting or updating the model deployment. -Adaptive resources make it possible for Elasticsearch to scale up or down the available resources based on the load on the process. -This can help you to manage performance and cost more easily. -When adaptive resources are enabled, the number of VCUs that the model deployment uses is set automatically based on the current load. -When the load is high, the number of VCUs that the process can use is automatically increased. -When the load is low, the number of VCUs that the process can use is automatically decreased. - -You can choose from three levels of resource usage for your trained model deployment; autoscaling will occur within the selected level's range. - -Refer to the tables in the auto-scaling-matrix section to find out the setings for the level you selected. - - - -Search projects are given access to more processing resources, while Security and Observability projects have lower limits. This difference is reflected in the UI configuration: Search projects have higher resource limits compared to Security and Observability projects to accommodate their more complex operations. - -On Serverless, adaptive allocations are automatically enabled for all project types. -However, the "Adaptive resources" control is not displayed in Kibana for Observability and Security projects. - -## Model deployment resource matrix - -The used resources for trained model deployments depend on three factors: - -- your cluster environment (Serverless, Cloud, or on-premises) -- the use case you optimize the model deployment for (ingest or search) -- whether model autoscaling is enabled with adaptive allocations/resources to have dynamic resources, or disabled for static resources - -The following tables show you the number of allocations, threads, and VCUs available on Serverless when adaptive resources are enabled or disabled. - -### Deployments on serverless optimized for ingest - -In case of ingest-optimized deployments, we maximize the number of model allocations. - -### Adaptive Resources Enabled - -#### Ingest-Optimized Deployments - -| Level | Allocations | Threads | VCUs | -|--------|------------------------------------------------------|---------|-----------------------------------------------------| -| Low | 0 to 2 dynamically | 1 | 0 to 16 dynamically | -| Medium | 1 to 32 dynamically | 1 | 8 to 256 dynamically | -| High | - 1 to 512 for Search
- 1 to 128 for Security and Observability | 1 | - 8 to 4096 for Search
- 8 to 1024 for Security and Observability | - -#### Adaptive Resources Disabled (Search Only) - -| Level | Allocations | Threads | VCUs | -|--------|------------------------------------------------------|---------|-----------------------------------------------------| -| Low | Exactly 2 | 1 | 16 | -| Medium | Exactly 32 | 1 | 256 | -| High | - 512 for Search
- No static allocations for Security and Observability | 1 | - 4096 for Search
- No static allocations for Security and Observability | - -### Deployments on Serverless Optimized for Search - -#### Adaptive Resources Enabled - -| Level | Allocations | Threads | VCUs | -|--------|------------------------------------------------------|---------|-----------------------------------------------------| -| Low | 0 to 1 dynamically | Always 2 | 0 to 16 dynamically | -| Medium | 1 to 2 (if threads=16), dynamically | Maximum (e.g., 16) | 8 to 256 dynamically | -| High | - 1 to 32 (if threads=16), dynamically
- 1 to 128 for Security and Observability | Maximum (e.g., 16) | - 8 to 4096 for Search
- 8 to 1024 for Security and Observability | - -#### Adaptive Resources Disabled - -| Level | Allocations | Threads | VCUs | -|--------|------------------------------------------------------|---------|-----------------------------------------------------| -| Low | 1 statically | Always 2 | 16 | -| Medium | 2 statically (if threads=16) | Maximum (e.g., 16) | 256 | -| High | - 32 statically (if threads=16) for Search
- No static allocations for Security and Observability | Maximum (e.g., 16) | - 4096 for Search
- No static allocations for Security and Observability | From aaf7ae9b7df3708a2c1b39b47468cc72da46156f Mon Sep 17 00:00:00 2001 From: kosabogi Date: Fri, 8 Nov 2024 13:32:05 +0100 Subject: [PATCH 19/19] Updates table --- serverless/pages/ml-nlp-auto-scale.asciidoc | 55 ++++++++++----------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/serverless/pages/ml-nlp-auto-scale.asciidoc b/serverless/pages/ml-nlp-auto-scale.asciidoc index 347bf1fc..33fc2e0f 100644 --- a/serverless/pages/ml-nlp-auto-scale.asciidoc +++ b/serverless/pages/ml-nlp-auto-scale.asciidoc @@ -103,11 +103,7 @@ In case of ingest-optimized deployments, we maximize the number of model allocat [discrete] [[adaptive-resources-enabled]] -=== Adaptive Resources Enabled - -[discrete] -[[ingest-optimized-deployments]] -==== Ingest-Optimized Deployments +==== Adaptive resources enabled |=== | Level | Allocations | Threads | VCUs @@ -123,16 +119,17 @@ In case of ingest-optimized deployments, we maximize the number of model allocat | 8 to 256 dynamically | High -a| * 1 to 512 for Search -* 1 to 128 for Security and Observability +a| 1 to 512 for Search + +1 to 128 for Security and Observability | 1 -a| * 8 to 4096 for Search -* 8 to 1024 for Security and Observability +a| 8 to 4096 for Search + +8 to 1024 for Security and Observability |=== + [discrete] [[adaptive-resources-disabled-search-only]] -==== Adaptive Resources Disabled (Search Only) +==== Adaptive resources disabled (Search only) |=== | Level | Allocations | Threads | VCUs @@ -148,20 +145,20 @@ a| * 8 to 4096 for Search | 256 | High -a| * 512 for Search -* No static allocations for Security and Observability +a| 512 for Search + +No static allocations for Security and Observability | 1 -a| * 4096 for Search -* No static allocations for Security and Observability | +a| 4096 for Search + +No static allocations for Security and Observability |=== [discrete] [[deployments-on-serverless-optimized-for-search]] -=== Deployments on Serverless Optimized for Search +=== Deployments on serverless optimized for search [discrete] [[adaptive-resources-enabled-for-search]] -==== Adaptive Resources Enabled +==== Adaptive resources enabled |=== | Level | Allocations | Threads | VCUs @@ -173,20 +170,20 @@ a| * 4096 for Search | Medium | 1 to 2 (if threads=16), dynamically -| Maximum (e.g., 16) +| Maximum (for example, 16) | 8 to 256 dynamically | High -a| * 1 to 32 (if threads=16), dynamically -* 1 to 128 for Security and Observability -| Maximum (e.g., 16) -a| * 8 to 4096 for Search -* 8 to 1024 for Security and Observability +a| 1 to 32 (if threads=16), dynamically + +1 to 128 for Security and Observability +| Maximum (for example, 16) +a| 8 to 4096 for Search + +8 to 1024 for Security and Observability |=== [discrete] [[adaptive-resources-disabled-for-search]] -==== Adaptive Resources Disabled +==== Adaptive resources disabled |=== | Level | Allocations | Threads | VCUs @@ -198,13 +195,13 @@ a| * 8 to 4096 for Search | Medium | 2 statically (if threads=16) -| Maximum (e.g., 16) +| Maximum (for example, 16) | 256 | High -a| * 32 statically (if threads=16) for Search -* No static allocations for Security and Observability -| Maximum (e.g., 16) -a| * 4096 for Search -* No static allocations for Security and Observability +a| 32 statically (if threads=16) for Search + +No static allocations for Security and Observability +| Maximum (for example, 16) +a| 4096 for Search + +No static allocations for Security and Observability |===