From 85cf5739535405ae5974a1d21b7d5c27edae877c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 5 Mar 2026 14:07:40 +0100 Subject: [PATCH 01/54] [HWORKS-2662] Extensive improvements to serving docs --- .../serving/deployment_adv_form_scaling.png | Bin 0 -> 96638 bytes .../mlops/serving/deployment_endpoints.png | Bin 560838 -> 0 bytes .../deployment_simple_form_py_endp_env.png | Bin 0 -> 99566 bytes docs/concepts/hopsworks.md | 2 +- docs/concepts/mlops/serving.md | 23 +- docs/tutorials/index.md | 2 +- .../fs/feature_view/feature-vectors.md | 3 - .../fs/feature_view/helper-columns.md | 5 - .../model-dependent-transformations.md | 6 - .../fs/feature_view/training-data.md | 1 - .../user_guides/mlops/serving/api-protocol.md | 19 +- docs/user_guides/mlops/serving/autoscaling.md | 149 ++++++++ .../mlops/serving/deployment-state.md | 32 +- docs/user_guides/mlops/serving/deployment.md | 141 +++----- .../mlops/serving/external-access.md | 9 +- docs/user_guides/mlops/serving/index.md | 35 +- .../mlops/serving/inference-batcher.md | 30 +- .../mlops/serving/inference-logger.md | 87 ++--- docs/user_guides/mlops/serving/predictor.md | 338 ++++++++---------- docs/user_guides/mlops/serving/resources.md | 38 +- docs/user_guides/mlops/serving/rest-api.md | 172 ++++++--- docs/user_guides/mlops/serving/scheduling.md | 94 +++++ docs/user_guides/mlops/serving/transformer.md | 143 +++++--- .../mlops/serving/troubleshooting.md | 7 +- .../python-deployment/python-deployment.md | 225 ++++++++++++ .../projects/python-deployment/rest-api.md | 105 ++++++ .../python-deployment/troubleshooting.md | 164 +++++++++ mkdocs.yml | 24 +- 28 files changed, 1299 insertions(+), 555 deletions(-) create mode 100644 docs/assets/images/guides/mlops/serving/deployment_adv_form_scaling.png delete mode 100644 docs/assets/images/guides/mlops/serving/deployment_endpoints.png create mode 100644 docs/assets/images/guides/mlops/serving/deployment_simple_form_py_endp_env.png create mode 100644 docs/user_guides/mlops/serving/autoscaling.md create mode 100644 docs/user_guides/mlops/serving/scheduling.md create mode 100644 docs/user_guides/projects/python-deployment/python-deployment.md create mode 100644 docs/user_guides/projects/python-deployment/rest-api.md create mode 100644 docs/user_guides/projects/python-deployment/troubleshooting.md diff --git a/docs/assets/images/guides/mlops/serving/deployment_adv_form_scaling.png b/docs/assets/images/guides/mlops/serving/deployment_adv_form_scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..22cc64ae16719b14f884755a219f62e4a9427f45 GIT binary patch literal 96638 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≶WyQiJuR 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%0A7*EV#1j*6 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

HC$p3igpH;En-<(wI!thi>OEy?qV)p; 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%0D<;CoToBC!RU+9V&FsA%#X!bJ!aooJLiB4`}% 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 QlabSDg;nOuHim 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�H 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 -`mZM2r)

IO>ey}>9SnJvahEG2q&3#d7f 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 diff --git a/docs/assets/images/guides/mlops/serving/deployment_simple_form_py_endp_env.png b/docs/assets/images/guides/mlops/serving/deployment_simple_form_py_endp_env.png new file mode 100644 index 0000000000000000000000000000000000000000..285ebb899bc4537a46662e6b687d5d418e807ee6 GIT binary patch literal 99566 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 W*!= z?E)q10qanGd-3-{Xu*sn_g|&1BR%x?G5zB?dg@^!%yzeG+aV`3K1F8`(91W0Fyh`k zEX7n_M-Y;Eu5TR@g)`_b7dNyb*gEcg+53{BRml6p)qqJJ*srs5=5_#<)XND2O8=N- zI@eeo@&5iooN4P{w4milR&*1R`zD`9nIM#`T#ih#xQ;kX>pDE0gyDCTZ#v@-&Ojah zs8^JEI&3r=gy!5Q$AbA$*@0XN(-Al?^>JF2zsvRvfV1v*xcvA(M+cgQgp!_K#7Y|j zCvZH-=4htm{fVhRSvy;1E9!u|XhG9cxabCS^IeyWn-PoPDF8|RFu|&A)M8-xjf>FJ z$D&D&l~H@cwZc!qeIjO#Ml-8LDouOgynL0q6ybhPHdwp%#E-Q=Z?{X%x$|E^qvs^X zK-HP@b3s@p0koQBfvs4~y@^}9jjc0Gz2Y<&SPUt;5gql;VQ6!?IW8f!H6}` z*Cjjt$V`IXLYd#1i6tBw(&BNj)#vJWJ2v&o*7j@Q!H9+Dbo!h|x zDJ7_BOw;t=qW|QadYb;bsqO7~5DR$u0P?-Trek8GKa`WtN2T`u2Q&ILwe5z);n(Oi`-a zPGLQ6dOUj~Q+paSRq?T=nm5N4?{8udoj4V9tR-RaMe`v91DDi9qpPIg8sYaJE>B6w zWFcil-TaAQS=hksqg66%xAtQIYx?=1Uj1{p{pBm#Unbv0<$2i !!! info "Model Serving Guide" More information can be found in the [Model Serving guide](../../user_guides/mlops/serving/index.md). + +!!! tip "Python deployments" + For deploying Python scripts without a model artifact, see the [Python Deployments](../../user_guides/projects/python-deployment/python-deployment.md) page. diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md index ba806925ed..41a07d1e97 100644 --- a/docs/tutorials/index.md +++ b/docs/tutorials/index.md @@ -25,7 +25,7 @@ This is a quick-start of the Hopsworks Feature Store; using a fraud use case we ### Batch -This is a batch use case variant of the fraud tutorial, it will give you a high level view on how to use our python APIs and the UI to navigate the feature groups. +This is a batch use case variant of the fraud tutorial, it will give you a high level view on how to use our Python APIs and the UI to navigate the feature groups. | Notebooks | | --- | diff --git a/docs/user_guides/fs/feature_view/feature-vectors.md b/docs/user_guides/fs/feature_view/feature-vectors.md index c16778a532..8f47b012e2 100644 --- a/docs/user_guides/fs/feature_view/feature-vectors.md +++ b/docs/user_guides/fs/feature_view/feature-vectors.md @@ -239,7 +239,6 @@ However, you can retrieve the untransformed feature vectors without applying mod entry=[{"id": 1}, {"id": 2}], transform=False ) - ``` ## Retrieving feature vector without on-demand features @@ -258,7 +257,6 @@ To achieve this, set the parameters `transform` and `on_demand_features` to `Fa entry=[{"id": 1}, {"id": 2}], transform=False, on_demand_features=False ) - ``` ## Passing Context Variables to Transformation Functions @@ -274,7 +272,6 @@ After [defining a transformation function using a context variable](../transform entry=[{"pk1": 1}], transformation_context={"context_parameter": 10} ) - ``` ## Choose the right Client diff --git a/docs/user_guides/fs/feature_view/helper-columns.md b/docs/user_guides/fs/feature_view/helper-columns.md index cbb22f305e..cb394e2cf9 100644 --- a/docs/user_guides/fs/feature_view/helper-columns.md +++ b/docs/user_guides/fs/feature_view/helper-columns.md @@ -41,7 +41,6 @@ for computing the [on-demand feature](../../../concepts/fs/feature_group/on_dema inference_helper_columns=["expiry_date"], ) - ``` ### Inference Data Retrieval @@ -88,7 +87,6 @@ However, they can be optionally fetched with inference or training data. ] ] - ``` #### Online inference @@ -129,7 +127,6 @@ However, they can be optionally fetched with inference or training data. passed_features={"days_valid": days_valid}, ) - ``` ## Training Helper columns @@ -156,7 +153,6 @@ For example one might want to use feature like `category` of the purchased produ training_helper_columns=["category"], ) - ``` ### Training Data Retrieval @@ -190,7 +186,6 @@ However, they can be optionally fetched. training_dataset_version=1, training_helper_columns=True ) - ``` !!! note diff --git a/docs/user_guides/fs/feature_view/model-dependent-transformations.md b/docs/user_guides/fs/feature_view/model-dependent-transformations.md index 66ebfe518a..cf1cbd142c 100644 --- a/docs/user_guides/fs/feature_view/model-dependent-transformations.md +++ b/docs/user_guides/fs/feature_view/model-dependent-transformations.md @@ -55,7 +55,6 @@ Additionally, Hopsworks also allows users to specify custom names for transforme transformation_functions=[add_two, add_one_multiple], ) - ``` ### Specifying input features @@ -77,7 +76,6 @@ The features to be used by a model-dependent transformation function can be spec ], ) - ``` ### Using built-in transformations @@ -106,7 +104,6 @@ The only difference is that they can either be retrieved from the Hopsworks or i ], ) - ``` To attach built-in transformation functions from the `hopsworks` module they can be directly imported into the code from `hopsworks.builtin_transformations`. @@ -134,7 +131,6 @@ To attach built-in transformation functions from the `hopsworks` module they can ], ) - ``` ## Using Model Dependent Transformations @@ -160,7 +156,6 @@ Model-dependent transformation functions can also be manually applied to a featu # Apply Model Dependent transformations encoded_feature_vector = fv.transform(feature_vector) - ``` ### Retrieving untransformed feature vector and batch inference data @@ -185,5 +180,4 @@ To achieve this, set the `transform` parameter to False. # Fetching untransformed batch data. untransformed_batch_data = feature_view.get_batch_data(transform=False) - ``` diff --git a/docs/user_guides/fs/feature_view/training-data.md b/docs/user_guides/fs/feature_view/training-data.md index d57d452603..de3c3c68fb 100644 --- a/docs/user_guides/fs/feature_view/training-data.md +++ b/docs/user_guides/fs/feature_view/training-data.md @@ -154,7 +154,6 @@ Once you have [defined a transformation function using a context variable](../tr transformation_context={"context_parameter": 10}, ) - ``` ## Read training data with primary key(s) and event time diff --git a/docs/user_guides/mlops/serving/api-protocol.md b/docs/user_guides/mlops/serving/api-protocol.md index b5f11e8989..be90ebbe97 100644 --- a/docs/user_guides/mlops/serving/api-protocol.md +++ b/docs/user_guides/mlops/serving/api-protocol.md @@ -3,11 +3,7 @@ ## Introduction Hopsworks supports both REST and gRPC as API protocols for sending inference requests to model deployments. -While REST API protocol is supported in all types of model deployments, support for gRPC is only available for models served with [KServe](predictor.md#serving-tool). - -!!! warning - At the moment, the gRPC API protocol is only supported for **Python model deployments** (e.g., scikit-learn, xgboost). - Support for Tensorflow model deployments is coming soon. +While REST API protocol is supported in all types of model deployments, gRPC is currently supported for **Python model deployments** only. ## GUI @@ -40,17 +36,7 @@ To navigate to the advanced creation form, click on `Advanced options`. ### Step 3: Select the API protocol -Enabling gRPC as the API protocol for a model deployment requires KServe as the serving platform for the deployment. -Make sure that KServe is enabled by activating the corresponding checkbox. - -

-

- KServe enabled in advanced deployment form -
Enable KServe in the advanced deployment form
-
-

- -Then, you can select the API protocol to be enabled in your model deployment. +You can select the API protocol to be enabled in your model deployment in the advanced deployment form.

@@ -102,7 +88,6 @@ Once you are done with the changes, click on `Create new deployment` at the bott my_deployment = ms.create_deployment(my_predictor) my_deployment.save() - ``` ### API Reference diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md new file mode 100644 index 0000000000..55bcf3d1f6 --- /dev/null +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -0,0 +1,149 @@ +--- +description: Documentation on how to configure autoscaling for a deployment +--- + +# How To Configure Scaling For A Deployment + +## Introduction + +Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available options. + +## GUI + +### Step 1: Create new deployment + +If you have at least one model already trained and saved in the Model Registry, navigate to the deployments page by clicking on the `Deployments` tab on the navigation menu on the left. + +

+

+ Deployments navigation tab +
Deployments navigation tab
+
+

+ +Once in the deployments page, you can create a new deployment by either clicking on `New deployment` (if there are no existing deployments) or on `Create new deployment` it the top-right corner. +Both options will open the deployment creation form. + +### Step 2: Go to advanced options + +A simplified creation form will appear including the most common deployment fields from all available configurations. +Autoscaling is part of the advanced options of a deployment. +To navigate to the advanced creation form, click on `Advanced options`. + +

+

+ Advance options +
Advanced options. Go to advanced deployment creation form
+
+

+ +### Step 3: Configure autoscaling + +In the `Autoscaling` section of the advanced form, you can configure the scaling parameters for the predictor and/or the transformer (if available). +You can set the scale metric, target value, minimum and maximum instances, as well as the panic and stable window parameters. + +

+

+ Autoscaling configuration for the predictor and transformer components +
Autoscaling configuration for the predictor and transformer
+
+

+ +Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. + +## Code + +### Step 1: Connect to Hopsworks + +=== "Python" + + ```python + import hopsworks + + project = hopsworks.login() + + # get Hopsworks Model Registry handle + mr = project.get_model_registry() + + # get Hopsworks Model Serving handle + ms = project.get_model_serving() + ``` + +### Step 2: Define the predictor scaling configuration + +=== "Python" + + ```python + from hsml.scaling_config import PredictorScalingConfig + + predictor_scaling = PredictorScalingConfig( + min_instances=1, + max_instances=5, + scale_metric="RPS", + target=100 + ) + ``` + +### Step 3 (Optional): Define the transformer scaling configuration + +=== "Python" + + ```python + from hsml.scaling_config import TransformerScalingConfig + + transformer_scaling = TransformerScalingConfig( + min_instances=1, + max_instances=3, + scale_metric="CONCURRENCY", + target=50 + ) + + my_transformer = ms.create_transformer( + script_file="Resources/my_transformer.py", + scaling_configuration=transformer_scaling + ) + ``` + +### Step 4: Create a deployment with the scaling configuration + +=== "Python" + + ```python + my_model = mr.get_model("my_model", version=1) + + my_deployment = my_model.deploy( + scaling_configuration=predictor_scaling, + # transformer=my_transformer + ) + ``` + +### API Reference + +[`PredictorScalingConfig`][hsml.scaling_config.PredictorScalingConfig] + +[`TransformerScalingConfig`][hsml.scaling_config.TransformerScalingConfig] + +## Scale metrics + +The autoscaler supports two metrics to determine when to scale. See [Knative autoscaling metrics](https://knative.dev/docs/serving/autoscaling/autoscaling-metrics/) for more details. + +| Scale Metric | Default Target | Description | +| ------------ | -------------- | ------------------------------- | +| RPS | 200 | Requests per second per replica | +| CONCURRENCY | 100 | Concurrent requests per replica | + +## Scaling parameters + +The following parameters can be used to fine-tune the autoscaling behavior. See [scale bounds](https://knative.dev/docs/serving/autoscaling/scale-bounds/), [autoscaling concepts](https://knative.dev/docs/serving/autoscaling/autoscaling-concepts/) and [scale-to-zero](https://knative.dev/docs/serving/autoscaling/scale-to-zero/) in the Knative documentation for more details. + +| Parameter | Default | Range | Description | +| ----------------------------- | ------- | ------ | ------------------------------------------- | +| `minInstances` | — | ≥ 0 | Minimum replicas (0 enables scale-to-zero) | +| `maxInstances` | — | ≥ 1 | Maximum replicas (cannot be less than min) | +| `panicWindowPercentage` | 10.0 | 1–100 | Panic window as percentage of stable window | +| `stableWindowSeconds` | 60 | 6–3600 | Stable window duration in seconds | +| `panicThresholdPercentage` | 200.0 | > 0 | Traffic threshold to trigger panic mode | +| `scaleToZeroRetentionSeconds` | 0 | ≥ 0 | Time to retain pods before scaling to zero | + +!!! note "Cluster-level constraints" + ==Administrators== can set cluster-wide limits on the maximum and minimum number of instances. When the minimum is set to 0, scale-to-zero is enforced for all deployments. diff --git a/docs/user_guides/mlops/serving/deployment-state.md b/docs/user_guides/mlops/serving/deployment-state.md index 7bc60e5815..3ef8ac5f85 100644 --- a/docs/user_guides/mlops/serving/deployment-state.md +++ b/docs/user_guides/mlops/serving/deployment-state.md @@ -62,7 +62,7 @@ Additionally, you can find the nº of instances currently running by scrolling d !!! info "Scale-to-zero capabilities" If scale-to-zero capabilities are enabled, you can see how the nº of instances of a running deployment goes to zero and the status changes to `idle`. - To enable scale-to-zero in a deployment, see [Resource Allocation Guide](resources.md) + To enable scale-to-zero in a deployment, see [Resources Guide](resources.md) ## Code @@ -86,7 +86,6 @@ Additionally, you can find the nº of instances currently running by scrolling d ```python deployment = ms.get_deployment("mydeployment") - ``` ### Step 3: Inspect deployment state @@ -98,7 +97,6 @@ Additionally, you can find the nº of instances currently running by scrolling d state.describe() - ``` ### Step 4: Check nº of running instances @@ -112,7 +110,6 @@ Additionally, you can find the nº of instances currently running by scrolling d # nº of transformer instances deployment.transformer.resources.describe() - ``` ### API Reference @@ -127,16 +124,23 @@ The status of a deployment is a high-level description of its current state. ??? info "Show deployment status" - | Status | Description | - | -------- | ------------------------------------------------------------------------------------------------------------------------ | - | CREATED | Deployment has never been started | - | STARTING | Deployment is starting | - | RUNNING | Deployment is ready and running. Predictions are served without additional latencies. | - | IDLE | Deployment is ready, but idle. Higher latencies (i.e., cold-start) are expected in the first incoming inference requests | - | FAILED | Deployment is in a failed state, which can be due to multiple reasons. More details can be found in the condition | - | UPDATING | Deployment is applying updates to the running instances | - | STOPPING | Deployment is stopping | - | STOPPED | Deployment has been stopped | + | Status | Description | + | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | + | CREATING | Deployment artifacts are being prepared | + | CREATED | Deployment has never been started | + | STARTING | Deployment is starting | + | RUNNING | Deployment is ready and running. Predictions are served without additional latencies. | + | IDLE | Deployment is ready but scaled to zero or has no active replicas. Higher latencies (cold-start) are expected on the first inference request. | + | FAILED | Terminal state. The deployment has encountered an unrecoverable error. More details can be found in the status condition. | + | UPDATING | Deployment is applying updates to the running instances | + | STOPPING | Deployment is stopping | + | STOPPED | Deployment has been stopped | + +## How States Are Determined + +Deployment state is determined from multiple sources: the database state (whether the deployment has been deployed and its revision), KServe InferenceService conditions, pod presence (available replicas for predictor and transformer), and the artifact filesystem (whether the deployment artifact files are ready). + +A revision ID and deployment version are used to distinguish between STARTING (first generation) and UPDATING (subsequent changes to a running deployment). ## Deployment conditions diff --git a/docs/user_guides/mlops/serving/deployment.md b/docs/user_guides/mlops/serving/deployment.md index c514a0fd8f..634f42bb3d 100644 --- a/docs/user_guides/mlops/serving/deployment.md +++ b/docs/user_guides/mlops/serving/deployment.md @@ -8,12 +8,13 @@ description: Documentation on how to deployment Machine Learning (ML) models and In this guide, you will learn how to create a new deployment for a trained model. -!!! warning - This guide assumes that a model has already been trained and saved into the Model Registry. - To learn how to create a model in the Model Registry, see [Model Registry Guide](../registry/index.md#exporting-a-model) +!!! note + This guide covers model deployments, which require a model saved in the Model Registry. + To learn how to create a model in the Model Registry, see [Model Registry Guide](../registry/index.md#exporting-a-model). + For Python deployments (running a Python script without a model artifact), see [Python Deployments](../../projects/python-deployment/python-deployment.md). -Deployments are used to unify the different components involved in making one or more trained models online and accessible to compute predictions on demand. -For each deployment, there are four concepts to consider: +Model deployments are used to unify the different components involved in making one or more trained models online and accessible to compute predictions on demand. +For each model deployment, there are four concepts to understand: !!! info "" 1. [Model files](#model-files) @@ -42,29 +43,17 @@ Both options will open the deployment creation form. A simplified creation form will appear including the most common deployment fields from all available configurations. We provide default values for the rest of the fields, adjusted to the type of deployment you want to create. -In the simplified form, select the model framework used to train your model. -Then, select the model you want to deploy from the list of available models under `pick a model`. - -After selecting the model, the rest of fields are filled automatically. -We pick the last model version and model artifact version available in the Model Registry. -Moreover, we infer the deployment name from the model name. - -!!! notice "Deployment name validation rules" - A valid deployment name can only contain characters a-z, A-Z and 0-9. - -!!! info "Predictor script for Python models" - For Python models, you must select a custom [predictor script](#predictor) that loads and runs the trained model by clicking on `From project` or `Upload new file`, to choose an existing script in the project file system or upload a new script, respectively. - -If you prefer, change the name of the deployment, model version or [artifact version](#artifact-files). -Then, click on `Create new deployment` to create the deployment for your model. +In the simplified form, choose the model server that will be used to serve your model.

- Select the model framework -
Select the model framework
+ Select the model server +
Select the model server

+Then, select the model you want to deploy from the list of available models under `pick a model`. +

Select the model @@ -72,6 +61,19 @@ Then, click on `Create new deployment` to create the deployment for your model.

+After selecting the model, select a model version and give your model deployment a name. + +!!! notice "Deployment name validation rules" + A valid deployment name can only contain characters a-z, A-Z and 0-9. + +!!! info "Predictor script for Python models" + For Python models, you must select a custom [predictor script](#predictor) that loads and runs the trained model by clicking on `From project` or `Upload new file`, to choose an existing script in the project file system or upload a new script, respectively. + +!!! info "Server configuration file for vLLM" + For vLLM deployments, a server configuration file is required. See the [Predictor Guide](predictor.md#server-configuration-file) for more details. + +Lastly, click on `Create new deployment` to create the deployment for your model. + ### Step 3 (Optional): Advanced configuration Optionally, you can access and adjust other parameters of the deployment configuration by clicking on `Advanced options`. @@ -82,28 +84,11 @@ Optionally, you can access and adjust other parameters of the deployment configu
Advanced options. Go to advanced deployment creation form

- -You will be redirected to a full-page deployment creation form where you can see all the default configuration values we selected for your deployment and adjust them according to your use case. -Apart from the aforementioned simplified configuration, in this form you can setup the following components: - -!!! info "Deployment advanced options" - 1. [Predictor](#predictor) - 2. [Transformer](#transformer) - 3. [Inference logger](predictor.md#inference-logger) - 4. [Inference batcher](predictor.md#inference-batcher) - 5. [Resources](predictor.md#resources) - 6. [API protocol](predictor.md#api-protocol) +You will be redirected to a full-page deployment creation form, where you can review all default configuration values and customize them to fit your requirements. In addition to the basic settings, this form allows you to further configure the [Predictor](#predictor) and [Transformer](#transformer) KServe components of your model deployment. Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. -### Step 4: (Kueue enabled) Select a Queue - -If the cluster is installed with Kueue enabled, you will need to select a queue in which the deployment should run. -This can be done from `Advance configuration -> Scheduler section`. - -![Default queue for job](../../../assets/images/guides/project/scheduler/job_queue.png) - -### Step 5: Deployment creation +### Step 4: Deployment creation Wait for the deployment creation process to finish. @@ -114,7 +99,7 @@ Wait for the deployment creation process to finish.

-### Step 6: Deployment overview +### Step 5: Deployment overview Once the deployment is created, you will be redirected to the list of all your existing deployments in the project. You can use the filters on the top of the page to easily locate your new deployment. @@ -150,45 +135,32 @@ After that, click on the new deployment to access the overview page. mr = project.get_model_registry() ``` -### Step 2: Create deployment +### Step 2: Retrieve your trained model -Retrieve the trained model you want to deploy. +Retrieve the trained model you want to deploy using the Model Registry handle. === "Python" ```python my_model = mr.get_model("my_model", version=1) - ``` -#### Option A: Using the model object +### Step 3: Deploy your trained model + +Create a deployment for your model by calling `.deploy()` on the model metadata object. This will create a deployment for your model with default values. === "Python" ```python my_deployment = my_model.deploy() - + # optionally, start your model deployment + my_deployment.start() ``` -#### Option B: Using the Model Serving handle - -=== "Python" - - ```python - # get Hopsworks Model Serving handle - ms = project.get_model_serving() - - my_predictor = ms.create_predictor(my_model) - my_deployment = my_predictor.deploy() - - # or - my_deployment = ms.create_deployment(my_predictor) - my_deployment.save() - - - ``` +!!! info "Predictor script and server configuration file" + You can provide a predictor script and a server configuration file directly in the `.deploy()` method using the `script_file` and `config_file` parameters. See the [Predictor Guide](predictor.md) for more details. ### API Reference @@ -203,15 +175,12 @@ Inside a model deployment, the local path to the model files is stored in the `M Moreover, you can explore the model files under the `/Models///Files` directory using the File Browser. !!! warning - All files under `/Models` are managed by Hopsworks. - Changes to model files cannot be reverted and can have an impact on existing model deployments. + All files under `/Models` and `/Deployments` are managed by Hopsworks. + Manual changes to these files cannot be reverted and can have an impact on existing model deployments. ## Artifact Files -Artifact files are files involved in the correct startup and running of the model deployment. -The most important files are the **predictor** and **transformer scripts**. -The former is used to load and run the model for making predictions. -The latter is typically used to apply transformations on the model inputs at inference time before making predictions. +Artifact files are essential for the proper initialization and operation of a model deployment. The most critical artifact files are the **predictor** and **transformer scripts**. The predictor script loads the trained model and handles prediction requests, while the transformer script applies any necessary input transformations before inference. Predictor and transformer scripts run on separate components and, therefore, scale independently of each other. !!! tip @@ -220,40 +189,26 @@ Predictor and transformer scripts run on separate components and, therefore, sca Additionally, artifact files can also contain a **server configuration file** that helps detach configuration used within the model deployment from the model server or the implementation of the predictor and transformer scripts. Inside a model deployment, the local path to the configuration file is stored in the `CONFIG_FILE_PATH` environment variable (see [environment variables](../serving/predictor.md#environment-variables)). -Every model deployment runs a specific version of the artifact files, commonly referred to as artifact version. ==One or more model deployments can use the same artifact version== (i.e., same predictor and transformer scripts). -Artifact versions are unique for the same model version. - -When a new deployment is created, a new artifact version is generated in two cases: - -- the artifact version in the predictor is set to `CREATE` (see [Artifact Version](./predictor.md#environment-variables)) -- no model artifact with the same files has been created before. +Each deployment tracks its artifact files through a ==deployment version== — an integer (1, 2, 3...) that is incremented whenever the artifact content changes (e.g., updating a predictor script or configuration file). Inside a model deployment, the local path to the artifact files is stored in the `ARTIFACT_FILES_PATH` environment variable (see [environment variables](../serving/predictor.md#environment-variables)). -Moreover, you can explore the artifact files under the `/Models///Artifacts/` directory using the File Browser. !!! warning - All files under `/Models` are managed by Hopsworks. - Changes to artifact files cannot be reverted and can have an impact on existing model deployments. + All files under `/Models` and `/Deployments` are managed by Hopsworks. + Manual changes to these files cannot be reverted and can have an impact on existing model deployments. -!!! tip "Additional files" - Currently, the artifact files can only include predictor and transformer scripts, and a configuration file. - Support for additional files (e.g., other resources) is coming soon. +!!! tip "vLLM omni mode" + For vLLM deployments, the server configuration file supports a `#HOPSWORKS omni: true` directive to enable omni mode. ## Predictor -Predictors are responsible for running the model server that loads the trained model, listens to inference requests and returns prediction results. -To learn more about predictors, see the [Predictor Guide](predictor.md) - -!!! note - Only one predictor is supported in a deployment. - -!!! info - Model artifacts are assigned an incremental version number, being `0` the version reserved for model artifacts that do not contain predictor or transformer scripts (i.e., shared artifacts containing only the model files). +Predictors are responsible for running the model server that loads the trained model, handles inference requests and returns prediction results. +To learn more about predictors, see the [Predictor (KServe) Guide](predictor.md) ## Transformer Transformers are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. -To learn more about transformers, see the [Transformer Guide](transformer.md). +To learn more about transformers, see the [Transformer (KServe) Guide](transformer.md). !!! warning - Transformers are only supported in KServe deployments. + Transformers are not available for vLLM deployments. diff --git a/docs/user_guides/mlops/serving/external-access.md b/docs/user_guides/mlops/serving/external-access.md index a02c8c2500..d97c31cd9b 100644 --- a/docs/user_guides/mlops/serving/external-access.md +++ b/docs/user_guides/mlops/serving/external-access.md @@ -6,7 +6,7 @@ description: Documentation on how to configure external access to a model deploy ## Introduction -Hopsworks supports role-based access control (RBAC) for project members within a project, where a project ML assets can only be accessed by Hopsworks users that are members of that project (See [governance](../../../concepts/projects/governance.md)). +Hopsworks supports **role-based access control (RBAC)** for project members within a project, where a project ML assets can only be accessed by Hopsworks users that are members of that project (See [governance](../../../concepts/projects/governance.md)). However, there are cases where you might want to grant ==external users== with access to specific model deployments without them having to register into Hopsworks or to join the project which will give them access to all project ML assets. For these cases, Hopsworks supports fine-grained access control to model deployments based on ==user groups== managed by an external Identity Provider. @@ -116,12 +116,9 @@ You can create API keys to authenticate your inference requests by clicking on t ### Step 4: Send inference requests -Depending on the type of model deployment, the URI of the model server can differ (e.g., `/chat/completions` for LLM deployments or `/predict` for traditional model deployments). -You can find the corresponding URI on every model deployment card. +The URI path for sending inference requests depends on the type of model deployment. For example, LLM deployments typically use `/chat/completions`, while traditional model deployments use `/predict`. You can find the exact URI path for each deployment on its model deployment card. -In addition to the `Authorization` header containing the API key, the `Host` header needs to be set according to the model deployment where the inference requests are sent to. -This header is used by the ingress to route the inference requests to the corresponding model deployment. -You can find the `Host` header value in the model deployment card. +For detailed instructions on constructing requests and handling authentication, refer to the [REST API Guide](rest-api.md). !!! tip "Code snippets" For clients sending inference requests using libraries similar to curl or OpenAI API-compatible libraries (e.g., LangChain), you can find code snippet examples by clicking on the `Curl >_` and `LangChain >_` buttons. diff --git a/docs/user_guides/mlops/serving/index.md b/docs/user_guides/mlops/serving/index.md index bc248e01f3..2b0eda9853 100644 --- a/docs/user_guides/mlops/serving/index.md +++ b/docs/user_guides/mlops/serving/index.md @@ -3,19 +3,19 @@ ## Deployment Assuming you have already created a model in the [Model Registry](../registry/index.md), a deployment can now be created to prepare a model artifact for this model and make it accessible for running predictions behind a REST or gRPC endpoint. -Follow the [Deployment Creation Guide](deployment.md) to create a Deployment for your model. -### Predictor +Refer to the [Deployment Creation Guide](deployment.md) for step-by-step instructions on creating a deployment for your model. For details on monitoring the status and lifecycle of an existing deployment, see the [Deployment State Guide](deployment-state.md). -Predictors are responsible for running a model server that loads a trained model, handles inference requests and returns predictions, see the [Predictor Guide](predictor.md). +!!! tip "Python deployments" + If you want to deploy a Python script without a model artifact, see the [Python Deployments](../../projects/python-deployment/python-deployment.md) page. -### Transformer +### Predictor (KServe component) -Transformers are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model, see the [Transformer Guide](transformer.md). +Predictors are responsible for running a model server that loads a trained model, handles inference requests and returns predictions, see the [Predictor Guide](predictor.md). -### Resource Allocation +### Transformer (KServe component) -Configure the resources to be allocated for predictor and transformer in a model deployment, see the [Resource Allocation Guide](resources.md). +Transformers are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model, see the [Transformer Guide](transformer.md). ### Inference Batcher @@ -25,9 +25,28 @@ Configure the predictor to batch inference requests, see the [Inference Batcher Configure the predictor to log inference requests and predictions, see the [Inference Logger Guide](inference-logger.md). +### Resources + +Configure the resources to be allocated for predictor and transformer in a model deployment, see the [Resources Guide](resources.md). + +### Autoscaling + +Configure autoscaling for your model deployment, including scale-to-zero, scale metrics and scaling parameters, see the [Autoscaling Guide](autoscaling.md). + +### Scheduling + +!!! info "Kueue is required" + This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + +Configure scheduling for your model deployment using Kueue queues, see the [Scheduling Guide](scheduling.md). + +### API Protocol + +Choose between REST and gRPC API protocols for your model deployment, see the [API Protocol Guide](api-protocol.md). + ### REST API -Send inference requests to deployed models using REST API, see the [Rest API Guide](rest-api.md). +Send inference requests to deployed models using REST API, see the [REST API Guide](rest-api.md). ### Troubleshooting diff --git a/docs/user_guides/mlops/serving/inference-batcher.md b/docs/user_guides/mlops/serving/inference-batcher.md index d978b900d9..d2fb12c1e7 100644 --- a/docs/user_guides/mlops/serving/inference-batcher.md +++ b/docs/user_guides/mlops/serving/inference-batcher.md @@ -3,8 +3,9 @@ ## Introduction Inference batching can be enabled to increase inference request throughput at the cost of higher latencies. -The configuration of the inference batcher depends on the serving tool and the model server used in the deployment. -See the [compatibility matrix](#compatibility-matrix). +The configuration of the inference batcher depends on the model server used in the deployment. + +!!! warning "Inference batching is not supported for vLLM deployments." ## GUI @@ -48,6 +49,9 @@ To enable inference batching, click on the `Request batching` checkbox. If your deployment uses KServe, you can optionally set three additional parameters for the inference batcher: maximum batch size, maximum latency (ms) and timeout (s). +!!! note "Timeout parameter" + The `timeout` parameter sets the request timeout in seconds for the inference batcher. If a batch is not filled within this time, the available requests are sent as a partial batch. + Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. ## Code @@ -91,30 +95,10 @@ Once you are done with the changes, click on `Create new deployment` at the bott ```python my_model = mr.get_model("my_model", version=1) - my_predictor = ms.create_predictor(my_model, inference_batcher=my_batcher) - my_predictor.deploy() - - # or - - my_deployment = ms.create_deployment(my_predictor) - my_deployment.save() - + my_model.deploy(inference_batcher=my_batcher) ``` ### API Reference [`InferenceBatcher`][hsml.inference_batcher.InferenceBatcher] - -## Compatibility matrix - -??? info "Show supported inference batcher configuration" - - | Serving tool | Model server | Inference batching | Fine-grained configuration | - | ------------ | ------------------ | ------------------ | ------- | - | Docker | Flask | ❌ | - | - | | TensorFlow Serving | ✅ | ❌ | - | Kubernetes | Flask | ❌ | - | - | | TensorFlow Serving | ✅ | ❌ | - | KServe | Flask | ✅ | ✅ | - | | TensorFlow Serving | ✅ | ✅ | diff --git a/docs/user_guides/mlops/serving/inference-logger.md b/docs/user_guides/mlops/serving/inference-logger.md index 64012324b7..abf54ba7d3 100644 --- a/docs/user_guides/mlops/serving/inference-logger.md +++ b/docs/user_guides/mlops/serving/inference-logger.md @@ -6,7 +6,19 @@ Once a model is deployed and starts making predictions as inference requests arr Hopsworks supports logging both inference requests and predictions as events to a Kafka topic for analysis. -!!! warning "Topic schemas vary depending on the serving tool. See [below](#topic-schema)" +!!! warning "Inference logging is not supported for vLLM deployments." + +!!! info "Logging modes" + Three logging modes are available: + + | Mode | Logger Mode | Description | + | ------------ | ----------- | --------------------------- | + | ALL | `all` | Log both inputs and outputs | + | PREDICTIONS | `response` | Log model outputs only | + | MODEL_INPUTS | `request` | Log model inputs only | + +!!! note "Kafka topic requirements" + The Kafka topic must use the `inferenceschema` subject. Schema v4+ is required for KServe topics. ## GUI @@ -105,14 +117,7 @@ Once you are done with the changes, click on `Create new deployment` at the bott ```python my_model = mr.get_model("my_model", version=1) - my_predictor = ms.create_predictor(my_model, inference_logger=my_logger) - my_predictor.deploy() - - # or - - my_deployment = ms.create_deployment(my_predictor) - my_deployment.save() - + my_model.deploy(inference_logger=my_logger) ``` @@ -122,47 +127,23 @@ Once you are done with the changes, click on `Create new deployment` at the bott ## Topic schema -The schema of Kafka events varies depending on the serving tool. -In KServe deployments, model inputs and predictions are logged in separate events, but sharing the same `requestId` field. -In non-KServe deployments, the same event contains both the model input and prediction related to the same inference request. - -??? example "Show kafka topic schemas" - - === "KServe" - - ``` json - { - "fields": [ - { "name": "servingId", "type": "int" }, - { "name": "modelName", "type": "string" }, - { "name": "modelVersion", "type": "int" }, - { "name": "requestTimestamp", "type": "long" }, - { "name": "responseHttpCode", "type": "int" }, - { "name": "inferenceId", "type": "string" }, - { "name": "messageType", "type": "string" }, - { "name": "payload", "type": "string" } - ], - "name": "inferencelog", - "type": "record" - } - ``` - - === "Docker / Kubernetes" - - ``` json - { - "fields": [ - { "name": "modelId", "type": "int" }, - { "name": "modelName", "type": "string" }, - { "name": "modelVersion", "type": "int" }, - { "name": "requestTimestamp", "type": "long" }, - { "name": "responseHttpCode", "type": "int" }, - { "name": "inferenceRequest", "type": "string" }, - { "name": "inferenceResponse", "type": "string" }, - { "name": "modelServer", "type": "string" }, - { "name": "servingTool", "type": "string" } - ], - "name": "inferencelog", - "type": "record" - } - ``` +Model inputs and predictions are logged in separate events, sharing the same `requestId` field. + +!!! example "Kafka topic schema" + + ``` json + { + "fields": [ + { "name": "servingId", "type": "int" }, + { "name": "modelName", "type": "string" }, + { "name": "modelVersion", "type": "int" }, + { "name": "requestTimestamp", "type": "long" }, + { "name": "responseHttpCode", "type": "int" }, + { "name": "inferenceId", "type": "string" }, + { "name": "messageType", "type": "string" }, + { "name": "payload", "type": "string" } + ], + "name": "inferencelog", + "type": "record" + } + ``` diff --git a/docs/user_guides/mlops/serving/predictor.md b/docs/user_guides/mlops/serving/predictor.md index 4470ffac75..fdabbcbfe7 100644 --- a/docs/user_guides/mlops/serving/predictor.md +++ b/docs/user_guides/mlops/serving/predictor.md @@ -14,20 +14,21 @@ In this guide, you will learn how to configure a predictor for a trained model. Predictors are the main component of deployments. They are responsible for running a model server that loads a trained model, handles inference requests and returns predictions. -They can be configured to use different model servers, serving tools, log specific inference data or scale differently. -In each predictor, you can configure the following components: +They can be configured to use different model servers, different resources or scale differently. +In each predictor, you can decide the following configuration: !!! info "" 1. [Model server](#model-server) - 2. [Serving tool](#serving-tool) - 3. [User-provided script](#user-provided-script) - 4. [Server configuration file](#server-configuration-file) - 5. [Python environments](#python-environments) - 6. [Transformer](#transformer) - 7. [Inference Logger](#inference-logger) - 8. [Inference Batcher](#inference-batcher) - 9. [Resources](#resources) - 10. [API protocol](#api-protocol) + 2. [Predictor script](#predictor-script) + 3. [Server configuration file](#server-configuration-file) + 4. [Python environments](#python-environments) + 5. [Transformer script](#transformer-script) + 6. [Inference Logger](#inference-logger) + 7. [Inference Batcher](#inference-batcher) + 8. [Resources](#resources) + 9. [Autoscaling](#autoscaling) + 10. [Scheduling](#scheduling) + 11. [API protocol](#api-protocol) ## GUI @@ -51,11 +52,11 @@ A simplified creation form will appear, including the most common deployment fie The first step is to choose a ==backend== for your model deployment. The backend will filter the models shown below according to the framework that the model was registered with in the model registry. -For example if you registered the model as a TensorFlow model using `ModelRegistry.tensorflow.create_model(...)` you select `Tensorflow Serving` in the dropdown. +For example if you registered the model as a TensorFlow model using `ModelRegistry.tensorflow.create_model(...)` you select `TensorFlow Serving` in the dropdown.

- Select the model framework + Select the model server
Select the backend

@@ -69,12 +70,13 @@ All models compatible with the selected backend will be listed in the model drop

-Moreover, you can optionally select a predictor script (see [Step 3 (Optional): Select a predictor script](#step-3-optional-select-a-predictor-script)), enable KServe (see [Step 4 (Optional): Enable KServe](#step-6-optional-enable-kserve)) or change other advanced configuration (see [Step 5 (Optional): Other advanced options](#step-7-optional-other-advanced-options)). -Otherwise, click on `Create new deployment` to create the deployment for your model. +After selecting a model from the dropdown, you can optionally choose a predictor script, modify the predictor environment, add a configuration file, or adjust other advanced settings as described in the optional steps below. + +Otherwise, click on `Create new deployment` to create the deployment for your model with default values. ### Step 3 (Optional): Select a predictor script -For python models, if you want to use your own [predictor script](#step-2-optional-implement-a-predictor-script) click on `From project` and navigate through the file system to find it, or click on `Upload new file` to upload a predictor script now. +For python models, to select a [predictor script](#step-2-optional-implement-a-predictor-script) click on `From project` and navigate through the file system to find it, or click on `Upload new file` to upload a predictor script now.

@@ -85,12 +87,12 @@ For python models, if you want to use your own [predictor script](#step-2-option ### Step 4 (Optional): Change predictor environment -If you are using a predictor script it is also required to configure the inference environment for the predictor. +If you are using a predictor script, it is required to select an inference environment for the predictor. This environment needs to have all the necessary dependencies installed to run your predictor script. -By default, we provide a set of environments like `tensorflow-inference-pipeline`, `torch-inference-pipeline` and `pandas-inference-pipeline` that serves this purpose for common machine learning frameworks. +Hopsworks provide a collection of built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. By default, the `pandas-inference-pipeline` Python environment is used. -To create your own it is recommended to [clone](../../projects/python/python_env_clone.md) the `minimal-inference-pipeline` and install additional dependencies for your use-case. +To create your own it is recommended to [clone](../../projects/python/python_env_clone.md) the `pandas-inference-pipeline` and install additional dependencies for your use-case.

@@ -101,13 +103,12 @@ To create your own it is recommended to [clone](../../projects/python/python_env ### Step 5 (Optional): Select a configuration file -!!! note - Only available for LLM deployments. - You can select a configuration file to be added to the [artifact files](deployment.md#artifact-files). -If a predictor script is provided, this configuration file will be available inside the model deployment at the local path stored in the `CONFIG_FILE_PATH` environment variable. -If a predictor script is **not** provided, this configuration file will be directly passed to the vLLM server. -You can find all configuration parameters supported by the vLLM server in the [vLLM documentation](https://docs.vllm.ai/en/v0.7.1/serving/openai_compatible_server.html). +In Python model deployments, this configuration file will be available inside the model deployment at the local path stored in the `CONFIG_FILE_PATH` environment variable. In vLLM deployments, this configuration file will be directly passed to the vLLM server. +You can find all configuration parameters supported by the vLLM server in the [vLLM documentation](https://docs.vllm.ai/en/v0.10.2/cli/serve.html). + +!!! info + Configuration files are required for vLLM deployments as they are used to define the configuration for the vLLM server.

@@ -116,10 +117,9 @@ You can find all configuration parameters supported by the vLLM server in the [v

-### Step 6 (Optional): Enable KServe +### Step 6 (Optional): Other advanced options -Other configuration such as the serving tool, is part of the advanced options of a deployment. -To navigate to the advanced creation form, click on `Advanced options`. +To access the advanced deployment configuration, click on `Advanced options`.

@@ -128,25 +128,16 @@ To navigate to the advanced creation form, click on `Advanced options`.

-Here, you change the [serving tool](#serving-tool) for your deployment by enabling or disabling the KServe checkbox. - -

-

- KServe in advanced deployment form -
KServe checkbox in the advanced deployment form
-
-

- -### Step 7 (Optional): Other advanced options - -Additionally, you can adjust the default values of the rest of components: +Here, you can further change the default values of the predictor: -!!! info "Predictor components" +!!! info "Predictor configuration" 1. [Transformer](#transformer) 2. [Inference logger](#inference-logger) 3. [Inference batcher](#inference-batcher) 4. [Resources](#resources) - 5. [API protocol](#api-protocol) + 5. [Autoscaling](#autoscaling) + 6. [Scheduling](#scheduling) + 7. [API protocol](#api-protocol) Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. @@ -168,7 +159,9 @@ Once you are done with the changes, click on `Create new deployment` at the bott ms = project.get_model_serving() ``` -### Step 2 (Optional): Implement a predictor script +### Step 2.1 (Optional): Implement a predictor script + +For Python model deployments, you need implement a predictor script that loads and serve your model. === "Predictor" @@ -203,69 +196,10 @@ Once you are done with the changes, click on `Create new deployment` at the bott # return self.model.predict(result) ``` -=== "Predictor (vLLM deployments only)" - - ``` python - import os - from vllm import **version**, AsyncEngineArgs, AsyncLLMEngine - from typing import Iterable, AsyncIterator, Union, Optional - from kserve.protocol.rest.openai import ( - CompletionRequest, - ChatPrompt, - ChatCompletionRequestMessage, - ) - from kserve.protocol.rest.openai.types import Completion - from kserve.protocol.rest.openai.types.openapi import ChatCompletionTool - - class Predictor(): - - def __init__(self): - """ Initialization code goes here""" - - # (optional) if any, access the configuration file via os.environ["CONFIG_FILE_PATH"] - config = ... - - print("Starting vLLM backend...") - engine_args = AsyncEngineArgs( - model=os.environ["MODEL_FILES_PATH"], - **config - ) - - # "self.vllm_engine" is required as the local variable with the vllm engine handler - self.vllm_engine = AsyncLLMEngine.from_engine_args(engine_args) - - # - # NOTE: Default implementations of the apply_chat_template and create_completion methods are already provided. - # If needed, you can override these methods as shown below - # - - #def apply_chat_template( - # self, - # messages: Iterable[ChatCompletionRequestMessage], - # chat_template: Optional[str] = None, - # tools: Optional[list[ChatCompletionTool]] = None, - #) -> ChatPrompt: - # """Converts a prompt or list of messages into a single templated prompt string""" - - # prompt = ... # apply chat template on the message to build the prompt - # return ChatPrompt(prompt=prompt) - - #async def create_completion( - # self, request: CompletionRequest - #) -> Union[Completion, AsyncIterator[Completion]]: - # """Generate responses using the vLLM engine""" - # - # generators = self.vllm_engine.generate(...) - # - # # Completion: used for returning a single answer (batch) - # # AsyncIterator[Completion]: used for returning a stream of answers - # return ... - ``` - !!! info "Jupyter magic" In a jupyter notebook, you can add `%%writefile my_predictor.py` at the top of the cell to save it as a local file. -### Step 3 (Optional): Upload the script to your project +### Step 2.2 (Optional): Upload the script to your project !!! info "You can also use the UI to upload your predictor script. See [above](#step-3-optional-select-a-predictor-script)" @@ -279,172 +213,180 @@ Once you are done with the changes, click on `Create new deployment` at the bott "/Projects", project.name, uploaded_file_path ) - ``` -### Step 4: Define predictor +### Step 3: Pass predictor configuration to model deployment +You can customize the default predictor settings when creating a model deployment. === "Python" ```python my_model = mr.get_model("my_model", version=1) - my_predictor = ms.create_predictor( - my_model, - # optional + my_deployment = my_model.deploy( + # predictor configuration model_server="PYTHON", - serving_tool="KSERVE", script_file=predictor_script_path, ) - - ``` -### Step 5: Create a deployment with the predictor +### API Reference -=== "Python" +[`Predictor`][hsml.predictor.Predictor] - ```python - my_deployment = my_predictor.deploy() +## Model Server - # or - my_deployment = ms.create_deployment(my_predictor) - my_deployment.save() +Hopsworks Model Serving supports deploying models with a Python model server for python-based models (scikit-learn, XGBoost , pytorch...), TensorFlow Serving for TensorFlow / Keras models and vLLM for Large Language Models (LLMs). +!!! info "Supported model servers" - ``` + | Model Server | Backend | ML Models and Frameworks | + | -------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | + | Python | Any `*-inference-pipeline` Python environment | Python-based (scikit-learn, XGBoost , pytorch...) | + | KServe sklearnserver | Sklearn built-in KServe runtime | Scikit-learn, XGBoost | + | TensorFlow Serving | TensorFlow Serving runtime | Keras, TensorFlow | + | vLLM | vLLM openai-compatible server | vLLM-supported models (see [list](https://docs.vllm.ai/en/v0.10.2/models/supported_models.html)) | -### API Reference +Each model server has specific requirements and supports different types of model artifacts, file formats, and configuration options. When deploying a model, ensure that your model files and configuration align with the expectations of the selected server. -[`Predictor`][hsml.predictor.Predictor] +!!! info "Model artifact requirements" -## Model Server + | Model server | Model files | + | -------------------- | --------------------------------------------------------- | + | Python | Any model file format | + | KServe sklearnserver | Files with extensions `.joblib`, `.pkl`, `.pickle` | + | TensorFlow Serving | Model artifact needs `variables/` and `.pb` file | + | vLLM | Model files supported by vLLM engine (e.g., .safetensors) | -Hopsworks Model Serving supports deploying models with a Flask server for python-based models, TensorFlow Serving for TensorFlow / Keras models and vLLM for Large Language Models (LLMs). -Today, you can deploy PyTorch models as python-based models. +All deployments use [KServe](https://kserve.github.io/website/latest/) as the serving platform, providing autoscaling (including scale-to-zero), fine-grained resource allocation, inference logging, inference batching, and transformers. -??? info "Show supported model servers" +## Predictor script - | Model Server | Supported | ML Models and Frameworks | - | ------------------ | --------- | ----------------------------------------------------------------------------------------------- | - | Flask | ✅ | python-based (scikit-learn, xgboost, pytorch...) | - | TensorFlow Serving | ✅ | keras, tensorflow | - | TorchServe | ❌ | pytorch | - | vLLM | ✅ | vLLM-supported models (see [list](https://docs.vllm.ai/en/v0.7.1/models/supported_models.html)) | +For **Python model deployments** ==only==, you can provide a custom Python script—called a predictor script—to load your model and serve predictions. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must follow a specific template, as shown in [Step 2](#step-2-optional-implement-a-predictor-script). -## Serving tool +## Server configuration file +For **Python model deployments**, you can provide a server configuration file to separate deployment-specific settings from the logic in your predictor or transformer scripts. This approach allows you to update configuration parameters without modifying the code. Within the deployment, the configuration file is accessible at the path specified by the `CONFIG_FILE_PATH` environment variable (see [environment variables](#environment-variables)). -In Hopsworks, model servers are deployed on Kubernetes. -There are two options for deploying models on Kubernetes: using [KServe](https://kserve.github.io/website/latest/) inference services or Kubernetes built-in deployments. ==KServe is the recommended way to deploy models in Hopsworks==. +For **vLLM deployments**, the server configuration file is ==required== and is used to configure the vLLM server. For example, you can use this configuration file to specify the chat template or LoRA modules to be loaded by the vLLM server. See all available parameters in the [official documentation](https://docs.vllm.ai/en/v0.10.2/serving/openai_compatible_server.html). -The following is a comparative table showing the features supported by each of them. +!!! warning "Configuration file format" + The configuration file can be of any format, except in **vLLM deployments** for which a YAML file (`.yml`/`.yaml`) is ==required==. + When a predictor script is provided, any format is allowed as users can load it as necessary. -??? info "Show serving tools comparison" +## Environment variables - | Feature / requirement | Kubernetes (enterprise) | KServe (enterprise) | - | ----------------------------------------------------- | ----------------------- | ------------------------- | - | Autoscaling (scale-out) | ✅ | ✅ | - | Resource allocation | ➖ min. resources | ✅ min / max. resources | - | Inference logging | ➖ simple | ✅ fine-grained | - | Inference batching | ➖ partially | ✅ | - | Scale-to-zero | ❌ | ✅ after 30s of inactivity | - | Transformers | ❌ | ✅ | - | Low-latency predictions | ❌ | ✅ | - | Multiple models | ❌ | ➖ (python-based) | - | User-provided predictor required
(python-only) | ✅ | ❌ | +A number of different environment variables is available in the predictor to ease its implementation. -## User-provided script +!!! tip "Available environment variables" -Depending on the model server and serving platform used in the model deployment, you can (or need) to provide your own python script to load the model and make predictions. -This script is referred to as **predictor script**, and is included in the [artifact files](../serving/deployment.md#artifact-files) of the model deployment. + === "Deployment" -The predictor script needs to implement a given template depending on the model server of the model deployment. -See the templates in [Step 2](#step-2-optional-implement-a-predictor-script). + These variables are available in all deployments. -??? info "Show supported user-provided predictors" + | Name | Description | + | --------------------- | -------------------------------- | + | `DEPLOYMENT_NAME` | Name of the current deployment | + | `DEPLOYMENT_VERSION` | Version of the deployment | + | `ARTIFACT_FILES_PATH` | Local path to the artifact files | - | Serving tool | Model server | User-provided predictor script | - | ------------ | ------------------ | ---------------------------------------------------- | - | Kubernetes | Flask server | ✅ (required) | - | | TensorFlow Serving | ❌ | - | KServe | Fast API | ✅ (only required for artifacts with multiple models) | - | | TensorFlow Serving | ❌ | - | | vLLM | ✅ (optional) | + === "Predictor" -### Server configuration file + These variables are set for predictor components. -Depending on the model server, a **server configuration file** can be selected to help detach configuration used within the model deployment from the model server or the implementation of the predictor and transformer scripts. -In other words, by modifying the configuration file of an existing model deployment you can adjust its settings without making changes to the predictor or transformer scripts. -Inside a model deployment, the local path to the configuration file is stored in the `CONFIG_FILE_PATH` environment variable (see [environment variables](#environment-variables)). + | Name | Description | + | ------------------ | -------------------------------------------------- | + | `SCRIPT_PATH` | Full path to the predictor script | + | `SCRIPT_NAME` | Prefixed filename of the predictor script | + | `CONFIG_FILE_PATH` | Local path to the configuration file (if provided) | + | `IS_PREDICTOR` | Set to `true` for predictor components | -!!! warning "Configuration file format" - The configuration file can be of any format, except in vLLM deployments **without a predictor script** for which a YAML file is ==required==. + === "Model" -!!! note "Passing arguments to vLLM via configuration file" - For vLLM deployments **without a predictor script**, the server configuration file is ==required== and it is used to configure the vLLM server. - For example, you can use this configuration file to specify the chat template or LoRA modules to be loaded by the vLLM server. - See all available parameters in the [official documentation](https://docs.vllm.ai/en/v0.7.1/serving/openai_compatible_server.html#command-line-arguments-for-the-server). + | Name | Description | + | ------------------ | ---------------------------------------------------------------- | + | `MODEL_FILES_PATH` | Local path to the model files (`/var/lib/hopsworks/model_files`) | + | `MODEL_NAME` | Name of the model being served by the current deployment | + | `MODEL_VERSION` | Version of the model being served by the current deployment | -### Environment variables + === "Others" -A number of different environment variables is available in the predictor to ease its implementation. + These variables are available in all deployments. -??? info "Show environment variables" + | Name | Description | + | ------------------------ | -------------------------------------------------- | + | `REST_ENDPOINT` | Hopsworks REST API endpoint | + | `HOPSWORKS_PROJECT_ID` | ID of the project | + | `HOPSWORKS_PROJECT_NAME` | Name of the project | + | `HOPSWORKS_PUBLIC_HOST` | Hopsworks public hostname | + | `API_KEY` | API key for authenticating with Hopsworks services | + | `PROJECT_ID` | Project ID (for Feature Store access) | + | `PROJECT_NAME` | Project name (for Feature Store access) | + | `SECRETS_DIR` | Path to secrets directory (`/keys`) | + | `MATERIAL_DIRECTORY` | Path to TLS certificates (`/certs`) | + | `REQUESTS_VERIFY` | SSL verification setting | - | Name | Description | - | ------------------- | -------------------------------------------------------------------- | - | MODEL_FILES_PATH | Local path to the model files | - | ARTIFACT_FILES_PATH | Local path to the artifact files | - | CONFIG_FILE_PATH | Local path to the configuration file | - | DEPLOYMENT_NAME | Name of the current deployment | - | MODEL_NAME | Name of the model being served by the current deployment | - | MODEL_VERSION | Version of the model being served by the current deployment | - | ARTIFACT_VERSION | Version of the model artifact being served by the current deployment | ## Python environments -Depending on the model server and serving tool used in the model deployment, you can select the Python environment where the predictor and transformer scripts will run. +Based on the model server used in the model deployment, you can select the Python environment where the predictor and transformer scripts will run. To create a new Python environment see [Python Environments](../../projects/python/python_env_overview.md). -??? info "Show supported Python environments" +!!! info "Supported Python environments" - | Serving tool | Model server | Editable | Predictor | Transformer | - | ------------ | ------------------ | -------- | ------------------------------------------ | ------------------------------ | - | Kubernetes | Flask server | ❌ | `pandas-inference-pipeline` only | ❌ | - | | TensorFlow Serving | ❌ | (official) tensorflow serving image | ❌ | - | KServe | Fast API | ✅ | any `inference-pipeline` image | any `inference-pipeline` image | - | | TensorFlow Serving | ✅ | (official) tensorflow serving image | any `inference-pipeline` image | - | | vLLM | ✅ | `vllm-inference-pipeline` or `vllm-openai` | any `inference-pipeline` image | + | Model server | Predictor | Transformer | + | -------------------- | -------------------------------- | -------------------------------- | + | Python | any `*-inference-pipeline` image | any `*-inference-pipeline` image | + | KServe sklearnserver | `sklearnserver` | any `*-inference-pipeline` image | + | TensorFlow Serving | `tensorflow/serving` | any `*-inference-pipeline` image | + | vLLM | `vllm-openai` | Not supported | !!! note - The selected Python environment is used for both predictor and transformer. - Support for selecting a different Python environment for the predictor and transformer is coming soon. + For **Python model deployments**, the same Python environment is used for both predictor and transformer. -## Transformer +## Transformer script -Transformers are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. -To learn more about transformers, see the [Transformer Guide](transformer.md). +Transformer scripts are Python scripts used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. +To learn more about transformers, see the [Transformer (KServe) Guide](transformer.md). !!! note - Transformers are only supported in KServe deployments. + Transformer scripts are ==not== supported in **vLLM deployments** ## Inference logger Inference loggers are deployment components that log inference requests into a Kafka topic for later analysis. + To learn about the different logging modes, see the [Inference Logger Guide](inference-logger.md) ## Inference batcher Inference batcher are deployment component that apply batching to the incoming inference requests for a better throughput-latency trade-off. + To learn about the different configuration available for the inference batcher, see the [Inference Batcher Guide](inference-batcher.md). ## Resources Resources include the number of replicas for the deployment as well as the resources (i.e., memory, CPU, GPU) to be allocated per replica. + To learn about the different combinations available, see the [Resources Guide](resources.md). +## Autoscaling + +Deployments use Knative Pod Autoscaler (KPA) to automatically scale the number of replicas based on traffic, including scale-to-zero. + +To learn about the different autoscaling parameters, see the [Autoscaling Guide](autoscaling.md). + +## Scheduling + +!!! info "Kueue is required" + This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + +If the cluster has Kueue enabled, you can select a queue for your deployment from the advanced configuration. Queues control resource allocation and scheduling priority across the cluster. + +For full details on scheduling configuration, see the [Scheduling Guide](scheduling.md). + ## API protocol -Hopsworks supports both REST and gRPC as the API protocols to send inference requests to model deployments. +Depending on the model server, Hopsworks supports both REST and gRPC as the API protocols to send inference requests to model deployments. In general, you use gRPC when you need lower latency inference requests. + To learn more about the REST and gRPC API protocols for model deployments, see the [API Protocol Guide](api-protocol.md). diff --git a/docs/user_guides/mlops/serving/resources.md b/docs/user_guides/mlops/serving/resources.md index 2ba350d1a9..e053825aef 100644 --- a/docs/user_guides/mlops/serving/resources.md +++ b/docs/user_guides/mlops/serving/resources.md @@ -6,9 +6,19 @@ description: Documentation on how to allocate resources to a model deployment ## Introduction -Depending on the serving tool used to deploy a trained model, resource allocation can be configured at different levels. -While deployments on Docker containers only support a fixed number of resources (CPU and memory), using Kubernetes or KServe allows a better exploitation of the resources available in the platform, by enabling you to specify how many CPUs, GPUs, and memory are allocated to a deployment. -See the [compatibility matrix](#compatibility-matrix). +Resource allocation can be configured ==per component== (predictor and transformer) in a deployment, allowing you to specify how many CPUs, GPUs, and memory are allocated. For each component, you can set minimum (requests) and maximum (limits) resources, as well as the number of instances. + +??? info "Show resource defaults" + + | Field | Default Request | Default Limit | Validation | + | ------------------ | --------------- | -------------- | -------------------------------------------------- | + | CPU (cores) | 0.2 | -1 (unlimited) | Request cannot exceed limit (unless -1, unlimited) | + | Memory (MB) | 32 | -1 (unlimited) | Request cannot exceed limit (unless -1, unlimited) | + | GPUs | 0 | 0 | Request must equal limit | + | Shared Memory (MB) | 128 | — | — | + +!!! tip "Automatic downscale of inactive instances" + Setting the number of instances to **0** for a component (predictor or transformer) enables **scale-to-zero**. This means that all instances of the component will automatically scale down to zero after a default period of inactivity of 30 seconds. ## GUI @@ -39,13 +49,13 @@ To navigate to the advanced creation form, click on `Advanced options`.

-### Step 3: Configure resource allocation +### Step 3: Configure resources In the `Resource allocation` section of the form, you can optionally set the resources to be allocated to the predictor and/or the transformer (if available). Moreover, you can choose the minimum number of replicas for each of these components. -??? note "Scale-to-zero capabilities" - Deployments with KServe enabled can scale to zero by choosing `0` as the number of instances. +!!! note "Scale-to-zero capabilities" + Set the number of instances to **0** to enable scale-to-zero on the component.

@@ -103,7 +113,6 @@ Once you are done with the changes, click on `Create new deployment` at the bott num_instances=2, requests=minimum_res, limits=maximum_res ) - ``` ### Step 4: Create a deployment with the resource configuration @@ -126,22 +135,13 @@ Once you are done with the changes, click on `Create new deployment` at the bott my_deployment = ms.create_deployment(my_predictor) my_deployment.save() - ``` ### API Reference [`Resources`][hsml.resources.Resources] -## Compatibility matrix - -??? info "Show supported resource allocation configuration" +## Autoscaling - | Serving tool | Component | Resources | - | ------------ | ----------- | --------------------------- | - | Docker | Predictor | Fixed | - | | Transformer | ❌ | - | Kubernetes | Predictor | Minimum resources | - | | Transformer | ❌ | - | KServe | Predictor | Minimum / maximum resources | - | | Transformer | Minimum / maximum resources | +Deployments can be configured to automatically scale the number of replicas based on traffic. +To learn about the different autoscaling parameters, see the [Autoscaling Guide](autoscaling.md). diff --git a/docs/user_guides/mlops/serving/rest-api.md b/docs/user_guides/mlops/serving/rest-api.md index d7e99de1e1..2856d7c443 100644 --- a/docs/user_guides/mlops/serving/rest-api.md +++ b/docs/user_guides/mlops/serving/rest-api.md @@ -2,51 +2,108 @@ ## Introduction -Hopsworks provides model serving capabilities by leveraging [KServe](https://kserve.github.io/website/) as the model serving platform and [Istio](https://istio.io/) as the ingress gateway to the model deployments. +Hopsworks provides ==model serving capabilities== by leveraging [KServe](https://kserve.github.io/website/) as the model serving platform and [Istio](https://istio.io/) as the ingress gateway to the model deployments. This document explains how to interact with a model deployment via REST API. -## Base URL +!!! tip "Tutorials" + End-to-end examples are available in the [hopsworks-tutorials](https://github.com/logicalclocks/hopsworks-tutorials/tree/master) repository. -Deployed models are accessible through the Istio ingress gateway. -The URL to interact with a model deployment is provided on the model deployment page in the Hopsworks UI. +## Sending Inference Requests through Istio Ingress -The URL follows the format `http:///`, where `RESOURCE_PATH` depends on the [`Predictor.model_server`][hsml.predictor.Predictor.model_server] (e.g., vLLM, TensorFlow Serving, SKLearn ModelServer). +The full inference URL is constructed by combining a base path with a model server-specific suffix. See [URL Paths](#url-paths) for the complete URL format and examples. -

-

- Endpoints -
Deployment Endpoints
-
-

- -## Authentication +### Authentication All requests must include an API Key for authentication. -You can create an API by following this [guide](../../projects/api_key/create_api_key.md). +You can create an API key by following this [guide](../../projects/api_key/create_api_key.md). -Include the key in the Authorization header: +Include the key in the `Authorization` header: ```text Authorization: ApiKey ``` -## Headers +### Headers + +| Header | Description | Example Value | +| --------------- | ----------------------------------- | ----------------------- | +| `Authorization` | API key for authentication. | `ApiKey ` | +| `Content-Type` | Request payload type (always JSON). | `application/json` | + +## URL Paths + +Deployed models are accessible through the ==Istio ingress gateway== using **path-based** routing. The full URL is constructed by combining the base path with a model server-specific suffix. +This URL is also provided on the model deployment page in the Hopsworks UI. + +!!! example "" + **`/`** + +Where `server-specific_suffix` depends on the model server type (see [ML Inference Paths](#ml-inference) or [OpenAI-compatible Paths](#openai-compatible)). + +### Base URL + +The base URL is composed of the **Istio ingress gateway IP**, the **project name**, and the **deployment name**. + +!!! example "" + **`https:///v1//`** + +!!! warning "Host-based routing (legacy)" + Prior to path-based routing, requests were routed using a `Host` header matching the model deployment hostname, and **`https://`** as base url. + + ``` + Host: .. + ``` + + Each model deployment gets its own Knative-generated hostname, and routing depends on the `Host` header matching Istio ingress gateway rules. + + Path-based routing (described above) is the preferred method for external access. + +### ML Inference + +For model deployments using Python, KServe sklearnserver, or TensorFlow Serving, the URL follows the KServe V1 inference protocol. + +!!! info "Supported verbs and path format" + | Model Server | Supported Verbs | Path Format | + | -------------------- | -------------------------------- | ------------------------------------ | + | Python | `predict` | `/v1/models/:` | + | KServe sklearnserver | `predict` | `/v1/models/:` | + | TensorFlow Serving | `predict`, `classify`, `regress` | `/v1/models/:` | + +!!! tip "Hopsworks Python API" + + ML inference urls can be retrieved using the `Deployment` class. + + ```python + # Returns: https:///v1///v1/models/:predict + inference_url = deployment.get_inference_url() + ``` + +### OpenAI-compatible + +==vLLM deployments== provide an OpenAI API-compatible endpoint at `/v1/`, allowing you to send any standard OpenAI API request to the vLLM server. + +!!! example "e.g., Chat Completions endpoint" + **`/v1/chat/completions`** + +Refer to the official [vLLM OpenAI-compatible server documentation](https://docs.vllm.ai/en/v0.10.2/serving/openai_compatible_server.html) for details about the available APIs. + +!!! tip "Hopsworks Python API" + + OpenAI-compatible urls can be retrieved using the `Deployment` class. -| Header | Description | Example Value | -| --------------- | ------------------------------------------- | ------------------------------------ | -| `Host` | Model’s hostname, provided in Hopsworks UI. | `fraud.test.hopsworks.ai` | -| `Authorization` | API key for authentication. | `ApiKey ` | -| `Content-Type` | Request payload type (always JSON). | `application/json` | + ```python + # Returns: https:///v1///v1 + # Append /chat/completions or /completions for specific endpoints + openai_url = deployment.get_openai_url() + ``` ## Request Format -The request format depends on the model sever being used. +The request format depends on the model server being used. -For predictive inference (i.e., for Tensorflow or SkLearn or Python Serving). -The request must be sent as a JSON object containing an `inputs` or `instances` field. +For predictive inference (TensorFlow, sklearn, or Python model server), the request must be sent as a JSON object containing an `inputs` or `instances` field. See [more information on the request format](https://kserve.github.io/website/docs/concepts/architecture/data-plane/v1-protocol#request-format). -An example for this is given below. !!! example "REST API example for Predictive Inference (Tensorflow or SkLearn or Python Serving)" === "Python" @@ -56,41 +113,72 @@ An example for this is given below. data = {"inputs": [[4641025220953719, 4920355418495856]]} - headers = { - "Host": "fraud.test.hopsworks.ai", - "Authorization": "ApiKey 8kDOlnRlJU4kiV1Y.RmFNJY3XKAUSqmJZ03kbUbXKMQSHveSBgMIGT84qrM5qXMjLib7hdlfGeg8fBQZp", - "Content-Type": "application/json", - } + headers = {"Authorization": "ApiKey ", "Content-Type": "application/json"} response = requests.post( - "http://10.87.42.108/v1/models/fraud:predict", headers=headers, json=data + "https:///v1/my_project/fraud/v1/models/fraud:predict", + headers=headers, + json=data, ) print(response.json()) - - ``` === "Curl" ```bash - curl -X POST "http://10.87.42.108/v1/models/fraud:predict" \ - -H "Host: fraud.test.hopsworks.ai" \ - -H "Authorization: ApiKey 8kDOlnRlJU4kiV1Y.RmFNJY3XKAUSqmJZ03kbUbXKMQSHveSBgMIGT84qrM5qXMjLib7hdlfGeg8fBQZp" \ + curl -X POST "https:///v1/my_project/fraud/v1/models/fraud:predict" \ + -H "Authorization: ApiKey " \ -H "Content-Type: application/json" \ -d '{ "inputs": [ - [ - 4641025220953719, - 4920355418495856 - ] + [4641025220953719, 4920355418495856] ] }' ``` -For generative inference (i.e vLLM) the response follows the [OpenAI specification](https://platform.openai.com/docs/api-reference/chat/create). +For generative inference (vLLM), the request follows the [OpenAI specification](https://docs.vllm.ai/en/v0.10.2/serving/openai_compatible_server.html) supported by the vLLM OpenAI-compatible server. + +!!! example "vLLM chat completions" + === "Python" + + ```python + import requests + + data = { + "model": "my-llm", + "messages": [{"role": "user", "content": "Hello, how are you?"}], + } + + headers = {"Authorization": "ApiKey ", "Content-Type": "application/json"} + + response = requests.post( + "https:///v1/my_project/my-llm/v1/chat/completions", + headers=headers, + json=data, + ) + print(response.json()) + ``` + + === "Curl" + + ```bash + curl -X POST "https:///v1/my_project/my-llm/v1/chat/completions" \ + -H "Authorization: ApiKey " \ + -H "Content-Type: application/json" \ + -d '{ + "model": "my-llm", + "messages": [ + {"role": "user", "content": "Hello, how are you?"} + ] + }' + ``` + +## CORS + +The Istio EnvoyFilter handles CORS preflight (`OPTIONS`) requests automatically. Allowed origins can be configured via `istio.envoyFilter.corsAllowedOrigins` in the Helm chart configuration. ## Response The model returns predictions in a JSON object. The response depends on the model server implementation. -You can find more information regarding specific model servers in the [Kserve documentation](https://kserve.github.io/website/docs/intro). + diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md new file mode 100644 index 0000000000..0cda93a60a --- /dev/null +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -0,0 +1,94 @@ +--- +description: Documentation on how to configure scheduling options for a model deployment +--- + +# How To Configure Scheduling For A Model Deployment + +## Introduction + +Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. Hopsworks supports Kubernetes scheduler abstractions such as **node affinity**, **anti-affinity**, and **priority classes**, as well as advanced scheduling with **Kueue queues and topologies**. + +!!! tip "Scheduling available for all workloads" + In addition to model deployments, all scheduling options are also available for jobs, Jupyter notebooks, and Python deployments. + +## GUI + +### Step 1: Create new deployment + +If you have at least one model already trained and saved in the Model Registry, navigate to the deployments page by clicking on the `Deployments` tab on the navigation menu on the left. + +

+

+ Deployments navigation tab +
Deployments navigation tab
+
+

+ +Once in the deployments page, you can create a new deployment by either clicking on `New deployment` (if there are no existing deployments) or on `Create new deployment` it the top-right corner. +Both options will open the deployment creation form. + +### Step 2: Go to advanced options + +A simplified creation form will appear including the most common deployment fields from all available configurations. +Scheduling is part of the advanced options of a deployment. +To navigate to the advanced creation form, click on `Advanced options`. + +

+

+ Advance options +
Advanced options. Go to advanced deployment creation form
+
+

+ +### Step 3: Configure scheduling + +In the advanced creation form, go to the **Scheduler** section to set up scheduling options for your deployment. Here, you can specify [affinity, anti-affinity, and priority classes](#affinity-anti-affinity-and-priority-classes) to control how your deployment pods are scheduled within the cluster. + +

+

+ Affinity and Priority Classes +
Configure affinity and priority classes for the model deployment
+
+

+ +If Kueue is ==enabled==, you can also select a [queue and topology](#queues-and-topologies) for your deployment. + +

+

+ Select a queue for the deployment +
Select a queue for the model deployment
+
+

+ +

+

+ Select a topology unit for the deployment +
Select a topology unit for the model deployment
+
+

+ +Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. + +## Queues and Topologies + +!!! warning "Kueue is required" + This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + +If the cluster has Kueue enabled, you can select a queue for your deployment. **Queues** control resource allocation and scheduling priority across the cluster. Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. + +You can also select a **topology** unit to control how deployment pods are co-located. For example, you can require all pods to run on the same host to minimize network latency. + +## Affinity, Anti-Affinity, and Priority Classes + +You can configure node affinity, anti-affinity, and priority classes to control pod placement and scheduling priority for your deployment. + +- **Affinity**: Constrains which nodes the deployment pods can run on based on node labels (e.g., GPU nodes, specific zones). +- **Anti-Affinity**: Prevents pods from running on nodes with specific labels. +- **Priority Class**: Determines the scheduling and eviction priority of pods. Higher priority pods are scheduled first and can preempt lower priority pods. + +## Learn more + +For detailed documentation on scheduling abstractions and cluster-level configuration, see the following guides: + +- [Scheduler](../../projects/scheduling/kube_scheduler.md) — Affinity, anti-affinity, priority classes, and project-level defaults +- [Kueue Details](../../projects/scheduling/kueue_details.md) — Queues, cohorts, topologies, and resource flavors diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index 9abf279d59..252845ba48 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -6,19 +6,23 @@ description: Documentation on how to configure a KServe transformer for a model ## Introduction -In this guide, you will learn how to configure a transformer in a deployment. +In this guide, you will learn how to configure a transformer script in a model deployment. -Transformers are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. -They run on a built-in Flask server provided by Hopsworks and require a user-provided python script implementing the [Transformer class](#step-2-implement-transformer-script). +Transformer scripts are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. They are user-provided Python scripts (`.py` or `.ipynb`) implementing the [Transformer class](#step-2-implement-transformer-script). -???+ warning - Transformers are only supported in deployments using KServe as serving tool. +!!! warning "Transformer scripts are not supported in vLLM deployments." -A transformer has two configurable components: +!!! info "Independent scaling" + The transformer has independent resources and autoscaling configuration from the predictor. This allows you to scale the pre/post-processing separately from the model inference. + +A transformer has the following configurable components: !!! info "" - 1. [User-provided script](#step-2-implement-transformer-script) - 5. [Resources](#resources) + 1. [Transformer script](#transformer-script) + 2. [Resources](#resources) + 3. [Autoscaling](#autoscaling) + 4. [Python environments](#python-environments) + 5. [Environment variables](#environment-variables) See examples of transformer scripts in the serving [example notebooks](https://github.com/logicalclocks/hops-examples/blob/master/notebooks/ml/serving). @@ -53,17 +57,7 @@ To navigate to the advanced creation form, click on `Advanced options`. ### Step 3: Select a transformer script -Transformers require KServe as the serving platform for the deployment. -Make sure that KServe is enabled for this deployment by activating the corresponding checkbox. - -

-

- KServe enabled in advanced deployment form -
Enable KServe in the advanced deployment form
-
-

- -Then, if the transformer script is already located in Hopsworks, click on `From project` and navigate through the file system to find your script. +If the transformer script is already located in Hopsworks, click on `From project` and navigate through the file system to find your script. Otherwise, you can click on `Upload new file` to upload the transformer script now.

@@ -73,15 +67,12 @@ Otherwise, you can click on `Upload new file` to upload the transformer script n

-After selecting the transformer script, you can optionally configure resource allocation for your transformer (see [Step 4](#step-4-optional-configure-resource-allocation)). +After selecting the transformer script, you can optionally configure resources and autoscaling for your transformer (see [Step 4](#step-4-optional-configure-resources)). Otherwise, click on `Create new deployment` to create the deployment for your model. -### Step 4 (Optional): Configure resource allocation - -At the end of the page, you can configure the resources to be allocated for the transformer, as well as the minimum and maximum number of replicas to be deployed. +### Step 4 (Optional): Other advanced options -??? note "Scale-to-zero capabilities" - Deployments with KServe enabled can scale to zero by choosing `0` as the number of instances. +In this page, you can also configure the [resources](resources.md) to be allocated for the transformer, as well as the [autoscaling](autoscaling.md) parameters to control how the transformer scales based on traffic.

@@ -106,8 +97,8 @@ Once you are done with the changes, click on `Create new deployment` at the bott # get Dataset API instance dataset_api = project.get_dataset_api() - # get Hopsworks Model Serving handle - ms = project.get_model_serving() + # get Hopsworks Model Registry handle + mr = project.get_model_registry() ``` ### Step 2: Implement transformer script @@ -146,7 +137,6 @@ Once you are done with the changes, click on `Create new deployment` at the bott "/Projects", project.name, uploaded_file_path ) - ``` ### Step 4: Define a transformer @@ -162,43 +152,108 @@ Once you are done with the changes, click on `Create new deployment` at the bott my_transformer = Transformer(script_file) - ``` ### Step 5: Create a deployment with the transformer +Use the `transformer` parameter to set the transformer configuration when creating the model deployment. + === "Python" ```python - my_predictor = ms.create_predictor(transformer=my_transformer) - my_deployment = my_predictor.deploy() - - # or - my_deployment = ms.create_deployment(my_predictor, transformer=my_transformer) - my_deployment.save() - + my_model = mr.get_model("my_model", version=1) + my_deployment = my_model.deploy( + transformer=my_transformer + ) ``` ### API Reference [`Transformer`][hsml.transformer.Transformer] +## Transformer script + +A transformer script is a custom Python script to apply pre/post-processing on the model inputs and outputs. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must implement the `Transformer` class, as shown in [Step 2](#step-2-implement-transformer-script). + +!!! warning "Transformer scripts are not supported in vLLM deployments." + ## Resources Resources include the number of replicas for the deployment as well as the resources (i.e., memory, CPU, GPU) to be allocated per replica. + To learn about the different combinations available, see the [Resources Guide](resources.md). +## Autoscaling + +The transformer has independent autoscaling from the predictor. Deployments use Knative Pod Autoscaler (KPA) to automatically scale the number of replicas based on traffic, including scale-to-zero. + +To learn about the different autoscaling parameters, see the [Autoscaling Guide](autoscaling.md). + ## Environment variables A number of different environment variables is available in the transformer to ease its implementation. -??? info "Show environment variables" +!!! tip "Available environment variables" + + === "Deployment" + + These variables are available in all deployments. + + | Name | Description | + | --------------------- | -------------------------------- | + | `DEPLOYMENT_NAME` | Name of the current deployment | + | `DEPLOYMENT_VERSION` | Version of the deployment | + | `ARTIFACT_FILES_PATH` | Local path to the artifact files | + + === "Transformer" + + These variables are set for transformer components. + + | Name | Description | + | ------------------ | -------------------------------------------------- | + | `SCRIPT_PATH` | Full path to the transformer script | + | `SCRIPT_NAME` | Prefixed filename of the transformer script | + | `CONFIG_FILE_PATH` | Local path to the configuration file (if provided) | + | `IS_TRANSFORMER` | Set to `true` for transformer components | + + === "Model" + + | Name | Description | + | --------------- | ----------------------------------------------------------- | + | `MODEL_NAME` | Name of the model being served by the current deployment | + | `MODEL_VERSION` | Version of the model being served by the current deployment | + + === "Others" + + These variables are available in all deployments. + + | Name | Description | + | ------------------------ | -------------------------------------------------- | + | `REST_ENDPOINT` | Hopsworks REST API endpoint | + | `HOPSWORKS_PROJECT_ID` | ID of the project | + | `HOPSWORKS_PROJECT_NAME` | Name of the project | + | `HOPSWORKS_PUBLIC_HOST` | Hopsworks public hostname | + | `API_KEY` | API key for authenticating with Hopsworks services | + | `PROJECT_ID` | Project ID (for Feature Store access) | + | `PROJECT_NAME` | Project name (for Feature Store access) | + | `SECRETS_DIR` | Path to secrets directory (`/keys`) | + | `MATERIAL_DIRECTORY` | Path to TLS certificates (`/certs`) | + | `REQUESTS_VERIFY` | SSL verification setting | + + +## Python environments + +Transformer scripts always run on `*-inference-pipeline` Python environments. To create a new Python environment see [Python Environments](../../projects/python/python_env_overview.md). + +!!! note + For **Python model deployments**, the same Python environment is used for both predictor and transformer. + +!!! info "Supported Python environments" - | Name | Description | - | ------------------- | -------------------------------------------------------------------- | - | ARTIFACT_FILES_PATH | Local path to the model artifact files | - | DEPLOYMENT_NAME | Name of the current deployment | - | MODEL_NAME | Name of the model being served by the current deployment | - | MODEL_VERSION | Version of the model being served by the current deployment | - | ARTIFACT_VERSION | Version of the model artifact being served by the current deployment | + | Model server | Predictor | Transformer | + | -------------------- | -------------------------------- | -------------------------------- | + | Python | any `*-inference-pipeline` image | any `*-inference-pipeline` image | + | KServe sklearnserver | `sklearnserver` | any `*-inference-pipeline` image | + | TensorFlow Serving | `tensorflow/serving` | any `*-inference-pipeline` image | + | vLLM | `vllm-openai` | Not supported | diff --git a/docs/user_guides/mlops/serving/troubleshooting.md b/docs/user_guides/mlops/serving/troubleshooting.md index f02d942ab8..dab61cfa4d 100644 --- a/docs/user_guides/mlops/serving/troubleshooting.md +++ b/docs/user_guides/mlops/serving/troubleshooting.md @@ -9,9 +9,13 @@ description: Documentation on how to troubleshoot a model deployment In this guide, you will learn how to troubleshoot a deployment that is having issues to serve a trained model. But before that, it is important to understand how [deployment states](deployment-state.md) are defined and the possible transitions between conditions. +Before a deployment starts, it goes through a `CREATING` phase where deployment artifacts are prepared. When a deployment is starting, it follows an ordered sequence of [states](deployment-state.md#deployment-conditions) before becoming ready for serving predictions. Similarly, it follows an ordered sequence of states when being stopped, although with fewer steps. +!!! warning "`FAILED` is a terminal state" + If a deployment reaches the `FAILED` state, it cannot recover on its own. You must stop and restart the deployment to attempt recovery. + ## GUI ### Step 1: Inspect deployment status @@ -135,7 +139,6 @@ Once in the OpenSearch Dashboards, you can search for keywords, apply multiple f ```python deployment = ms.get_deployment("mydeployment") - ``` ### Step 3: Get current deployment's predictor state @@ -147,7 +150,6 @@ Once in the OpenSearch Dashboards, you can search for keywords, apply multiple f state.describe() - ``` ### Step 4: Explore transient logs @@ -157,7 +159,6 @@ Once in the OpenSearch Dashboards, you can search for keywords, apply multiple f ```python deployment.get_logs(component="predictor|transformer", tail=10) - ``` ### API Reference diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md new file mode 100644 index 0000000000..3c9cbe3fc5 --- /dev/null +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -0,0 +1,225 @@ +--- +description: Documentation on how to create Python deployments +--- + +# Python Deployment + +## Introduction + +Python deployments allow you to deploy a Python script as a service without requiring a model artifact in the Model Registry. +This is useful for custom inference pipelines, feature view deployments, or any Python-based program that needs to be served behind an HTTP endpoint. + +!!! warning "Incoming requests are directed to port 8080" + Python deployments run your script directly on port 8080. Therefore, make sure your implementation listens to 8080 port for handling incoming requests. + +!!! info "gRPC protocol not supported" + +!!! tip "Use your favourite HTTP server" + There are no constraints on the framework or library used — you can use Flask, FastAPI, or any other HTTP server. + +In each Python deployment, you can configure the following: + +!!! info "" + 1. [Python environments](#python-environments) + 2. [Resources](#resources) + 3. [Autoscaling](#autoscaling) + 4. [Scheduling](#scheduling) + +## GUI + +### Step 1: Create new deployment + +Navigate to the deployments page by clicking on the `Deployments` tab on the navigation menu on the left. + +

+

+ Deployments navigation tab +
Deployments navigation tab
+
+

+ +Then, click on `New Python deployment`. + +### Step 2: Configure the deployment + +Choose a name for your Python deployment. Then, provide the script for you Python program by clicking on `From project` or `Upload new file`. + +### Step 3 (Optional): Change Python environment + +Python deployments run the scripts in one of the [Python Environments](../../projects/python/python_env_overview.md) available in your project. This environment must have all the necessary dependencies for your Python program. + +Hopsworks provide a collection of built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. By default, the `pandas-inference-pipeline` Python environment is used in Python deployments. + +To create your own environment it is recommended to [clone](../../projects/python/python_env_clone.md) the `minimal-inference-pipeline` or `pandas-inference-pipeline` environment and install additional dependencies needed for your Python program. + +

+

+ Python script in the simplified deployment form +
Select an environment for the Python program
+
+

+ +### Step 4 (Optional): Advanced configuration + +Click on `Advanced options` to configure your Python deployment further, including: + +!!! info "" + 1. [Resources](#resources) + 2. [Autoscaling](#autoscaling) + 3. [Scheduling](#scheduling) + +Once you are done with the changes, click on `Create new Python deployment` at the bottom of the page to create the Python deployment. + +## Code + +### Step 1: Connect to Hopsworks + +=== "Python" + + ```python + import hopsworks + + project = hopsworks.login() + + # get Hopsworks Model Serving handle + ms = project.get_model_serving() + ``` + +### Step 2: Implement a Python script + +=== "Python" + + ```python + import uvicorn + from fastapi import FastAPI + + app = FastAPI() + + + @app.get("/ping") + async def ping(): + return {"status": "ready"} + + + @app.post("/echo") + async def echo(data: dict): + return data + + + if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8080) + ``` + +!!! info "Jupyter magic" + In a jupyter notebook, you can add `%%writefile python_server.py` at the top of the cell to save it as a local file. + +### Step 3: Upload the script to your project + +=== "Python" + + ```python + import os + + dataset_api = project.get_dataset_api() + + uploaded_file_path = dataset_api.upload("python_server.py", "Resources", overwrite=True) + script_path = os.path.join("/Projects", project.name, uploaded_file_path) + ``` + +### Step 4: Create a deployment + +=== "Python" + + ```python + py_server = ms.create_endpoint( + name="pyserver", + script_file=script_path + ) + py_deployment = py_server.deploy() + ``` + +### Step 5: Send requests + +=== "Python" + + ```python + import requests + + url = py_deployment.get_endpoint_url() + + response = requests.post(f"{url}/echo", json={"key": "value"}) + print(response.json()) + ``` + +## Environment variables + +A number of different environment variables is available in the Python deployment to ease its implementation. + +!!! tip "Available environment variables" + + === "Deployment" + + These variables are available in all deployments. + + | Name | Description | + | --------------------- | -------------------------------- | + | `DEPLOYMENT_NAME` | Name of the current deployment | + | `DEPLOYMENT_VERSION` | Version of the deployment | + | `ARTIFACT_FILES_PATH` | Local path to the artifact files | + + === "Python deployment" + + These variables are specific to Python deployments. + + | Name | Description | + | ------------------ | -------------------------------------------------- | + | `SCRIPT_PATH` | Full path to the Python script | + | `SCRIPT_NAME` | Prefixed filename of the Python script | + | `CONFIG_FILE_PATH` | Local path to the configuration file (if provided) | + + === "Others" + + These variables are available in all deployments. + + | Name | Description | + | ------------------------ | -------------------------------------------------- | + | `REST_ENDPOINT` | Hopsworks REST API endpoint | + | `HOPSWORKS_PROJECT_ID` | ID of the project | + | `HOPSWORKS_PROJECT_NAME` | Name of the project | + | `HOPSWORKS_PUBLIC_HOST` | Hopsworks public hostname | + | `API_KEY` | API key for authenticating with Hopsworks services | + | `PROJECT_ID` | Project ID (for Feature Store access) | + | `PROJECT_NAME` | Project name (for Feature Store access) | + | `SECRETS_DIR` | Path to secrets directory (`/keys`) | + | `MATERIAL_DIRECTORY` | Path to TLS certificates (`/certs`) | + | `REQUESTS_VERIFY` | SSL verification setting | + + +## Python environments + +Python deployments run in one of the `*-inference-pipeline` Python environments available in your project. +Hopsworks provides built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. By default, the `pandas-inference-pipeline` environment is used. + +To create your own environment, it is recommended to [clone](../../projects/python/python_env_clone.md) the `minimal-inference-pipeline` or `pandas-inference-pipeline` environment and install additional dependencies needed for your Python program. +To learn more about Python environments, see [Python Environments](../../projects/python/python_env_overview.md). + +## Resources + +Configure CPU, memory, and GPU allocation for your Python deployment. Each deployment component has separate request and limit values. + +For full details on resource configuration, see the [Resources Guide](../../mlops/serving/resources.md). + +## Autoscaling + +Deployments use **Knative Pod Autoscaler (KPA)** to automatically scale the number of replicas based on traffic. You can configure the minimum and maximum number of instances as well as the scale metric (requests per second or concurrency). + +For full details on autoscaling parameters, see the [Autoscaling Guide](../../mlops/serving/autoscaling.md). + +## Scheduling + +!!! info "Kueue is required" + This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + +If the cluster has Kueue enabled, you can select a queue for your deployment from the advanced configuration. Queues control resource allocation and scheduling priority across the cluster. + +For full details on scheduling configuration, see the [Scheduling Guide](../../mlops/serving/scheduling.md). diff --git a/docs/user_guides/projects/python-deployment/rest-api.md b/docs/user_guides/projects/python-deployment/rest-api.md new file mode 100644 index 0000000000..0fd40b8103 --- /dev/null +++ b/docs/user_guides/projects/python-deployment/rest-api.md @@ -0,0 +1,105 @@ +--- +description: Documentation on how to interact with a Python deployment via REST API +--- + +# Python Deployment REST API + +## Introduction + +Python deployments are accessible via REST API through the [Istio](https://istio.io/) ingress gateway. + +This document explains how to send requests to a Python deployment. + +!!! tip "Tutorials" + End-to-end examples are available in the [hopsworks-tutorials](https://github.com/logicalclocks/hopsworks-tutorials/tree/master) repository. + +## Sending Requests through Istio Ingress + +The full URL path is constructed by combining a base path with a resource path available in the Python server. See [URL Paths](#url-paths) for the complete URL format and examples. + +### Authentication + +All requests must include an API Key for authentication. +You can create an API key by following this [guide](../../projects/api_key/create_api_key.md). + +Include the key in the `Authorization` header: + +```text +Authorization: ApiKey +``` + +### Headers + +| Header | Description | Example Value | +| --------------- | --------------------------- | ----------------------- | +| `Authorization` | API key for authentication. | `ApiKey ` | +| `Content-Type` | Request payload type. | `application/json` | + +## URL Paths + +Python deployments are accessible through the ==Istio ingress gateway== using **path-based** routing. The full URL is constructed by combining the base URL with the paths defined in your Python server. + +!!! example "" + **`/`** + +Where `` depends entirely on the routes defined in your Python server implementation (e.g., `/echo`, `/predict`, `/health`). + +### Base URL + +The base URL is composed of the **Istio ingress gateway IP**, the **project name**, and the **deployment name**. + +!!! example "" + **`https:///v1//`** + +!!! warning "Host-based routing (legacy)" + Prior to path-based routing, requests were routed using a `Host` header matching the deployment hostname, and **`https://`** as base url. + + ``` + Host: .. + ``` + + Each deployment gets its own Knative-generated hostname, and routing depends on the `Host` header matching Istio ingress gateway rules. + + Path-based routing (described above) is the preferred method for external access. + +!!! tip "Hopsworks Python API" + + The endpoint URL can be retrieved using the `Deployment` class. + + ```python + # Returns: https:///v1// + endpoint_url = deployment.get_endpoint_url() + ``` + +## Request Format + +The request format depends entirely on your Python server implementation. There are no framework or protocol constraints — your server defines the expected HTTP methods, paths, and payload format. + +!!! example "REST API example" + === "Python" + + ```python + import requests + + url = deployment.get_endpoint_url() + + response = requests.post(f"{url}/echo", json={"key": "value"}) + print(response.json()) + ``` + + === "Curl" + + ```bash + curl -X POST "https:///v1/my_project/pyserver/echo" \ + -H "Authorization: ApiKey " \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' + ``` + +## CORS + +The Istio EnvoyFilter handles CORS preflight (`OPTIONS`) requests automatically. Allowed origins can be configured via `istio.envoyFilter.corsAllowedOrigins` in the Helm chart configuration. + +## Response + +The response format depends on your Python server implementation. diff --git a/docs/user_guides/projects/python-deployment/troubleshooting.md b/docs/user_guides/projects/python-deployment/troubleshooting.md new file mode 100644 index 0000000000..28a90c3807 --- /dev/null +++ b/docs/user_guides/projects/python-deployment/troubleshooting.md @@ -0,0 +1,164 @@ +--- +description: Documentation on how to troubleshoot a Python deployment +--- + +# How To Troubleshoot A Python Deployment + +## Introduction + +In this guide, you will learn how to troubleshoot a deployment that is having issues running. +But before that, it is important to understand how [deployment states](../../mlops/serving/deployment-state.md) are defined and the possible transitions between conditions. + +Before a deployment starts, it goes through a `CREATING` phase where deployment artifacts are prepared. +When a deployment is starting, it follows an ordered sequence of [states](../../mlops/serving/deployment-state.md#deployment-conditions) before becoming ready for handling requests. +Similarly, it follows an ordered sequence of states when being stopped, although with fewer steps. + +!!! warning "`FAILED` is a terminal state" + If a deployment reaches the `FAILED` state, it cannot recover on its own. You must stop and restart the deployment to attempt recovery. + +## GUI + +### Step 1: Inspect deployment status + +If you have at least one deployment already created, navigate to the deployments page by clicking on the `Deployments` tab on the navigation menu on the left. + +

+

+ Deployments navigation tab +
Deployments navigation tab
+
+

+ +Once in the deployments page, find the deployment you want to inspect. +Next to the actions buttons, you can find an indicator showing the current status of the deployment. +For a more descriptive representation, this indicator changes its color based on the status. + +To inspect the condition of the deployment, click on the name of the deployment to open the deployment overview page. + +### Step 2: Inspect condition + +At the top of page, you can find the same status indicator mentioned in the previous step. +Below it, a one-line message is shown with a more detailed description of the deployment status. +This message is built using the current status [condition](../../mlops/serving/deployment-state.md#deployment-conditions) of the deployment. + +Oftentimes, the status and the one-line description are enough to understand the current state of a deployment. +For instance, when the cluster lacks enough allocatable resources to meet the deployment requirements, a meaningful error message will be shown with the root cause. + +

+

+ Deployment failed to schedule condition +
Condition of a deployment that cannot be scheduled
+
+

+ +However, when the deployment fails to start further details might be needed depending on the source of failure. +For example, failures in the initialization or starting steps will show a less relevant message. +In those cases, you can explore the deployments logs in search of the cause of the problem. + +

+

+ Deployment failed to start condition +
Condition of a deployment that fails to start
+
+

+ +### Step 3: Explore transient logs + +Each deployment is composed of several components depending on its configuration. +Transient logs refer to component-specific logs that are directly retrieved from the component itself. +Therefore, these logs can only be retrieved as long as the deployment components are reachable. + +!!! info "" + Transient logs are informative and fast to retrieve, facilitating the troubleshooting of deployment components at a glance + +Transient logs are convenient when access to the most recent logs of a deployment is needed. + +!!! info + When a deployment is in idle state, there are no components running (i.e., scaled to zero) and, thus, no transient logs are available. + +!!! note + In the current version of Hopsworks, transient logs can only be accessed using the Hopsworks Machine Learning Python library. + See [an example](#step-4-explore-transient-logs). + +### Step 4: Explore historical logs + +Transient logs are continuously collected and stored in OpenSearch, where they become historical logs accessible using the integrated OpenSearch Dashboards. +Therefore, historical logs contain the same information than transient logs. +However, there might be cases where transient logs could not be collected in time for a specific component and, thus, not included in the historical logs. + +!!! info "" + Historical logs are persisted transient logs that can be queried, filtered and sorted using OpenSearch Dashboards, facilitating a more sophisticated exploration of past records. + +Historical logs are convenient when a deployment fails occasionally, either at runtime or without a clear reason. +In this case, narrowing the inspection of component-specific logs at a concrete point in time and searching for keywords can be helpful. + +To access the OpenSearch Dashboards, click on the `See logs` button at the top of the deployment overview page. + +

+

+ See logs button +
Access to historical logs of a deployment
+
+

+ +!!! note + In case you are not familiar with the interface, you may find the [official documentation](https://opensearch.org/docs/latest/dashboards/index/) useful. + +Once in the OpenSearch Dashboards, you can search for keywords, apply multiple filters and sort the records by timestamp. + +??? info "Show available filters" + + | Filter | Description | + | -------------- | -------------------------------------------------------------------------------------------------------- | + | component | Name of the deployment component | + | container_name | Name of the container within a component | + | serving_name | Name of the deployment | + | timestamp | Timestamp when the record was reported | + +## Code + +### Step 1: Connect to Hopsworks + +=== "Python" + + ```python + import hopsworks + + project = hopsworks.login() + + # get Hopsworks Model Serving handle + ms = project.get_model_serving() + ``` + +### Step 2: Retrieve an existing deployment + +=== "Python" + + ```python + deployment = ms.get_deployment("mydeployment") + + ``` + +### Step 3: Get current deployment state + +=== "Python" + + ```python + state = deployment.get_state() + + state.describe() + + ``` + +### Step 4: Explore transient logs + +=== "Python" + + ```python + deployment.get_logs(tail=10) + + ``` + +### API Reference + +[`Deployment`][hsml.deployment.Deployment] diff --git a/mkdocs.yml b/mkdocs.yml index 1367a588a6..26765d1eeb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -191,6 +191,10 @@ nav: - Create API Key: user_guides/projects/api_key/create_api_key.md - AWS IAM Roles: user_guides/projects/iam_role/iam_role_chaining.md - Query Engine: user_guides/projects/trino/query_engine.md + - Python Deployment: + - Deployment Creation: user_guides/projects/python-deployment/python-deployment.md + - REST API: user_guides/projects/python-deployment/rest-api.md + - Troubleshooting: user_guides/projects/python-deployment/troubleshooting.md - MLOps: - user_guides/mlops/index.md - Model Registry: @@ -206,15 +210,17 @@ nav: - Model Evaluation Images: user_guides/mlops/registry/model_evaluation_images.md - Model Serving: - user_guides/mlops/serving/index.md - - Deployment: - - Deployment creation: user_guides/mlops/serving/deployment.md - - Deployment state: user_guides/mlops/serving/deployment-state.md - - Predictor: user_guides/mlops/serving/predictor.md - - Transformer: user_guides/mlops/serving/transformer.md - - Resource Allocation: user_guides/mlops/serving/resources.md - - Inference Logger: user_guides/mlops/serving/inference-logger.md - - Inference Batcher: user_guides/mlops/serving/inference-batcher.md - - API Protocol: user_guides/mlops/serving/api-protocol.md + - Model Deployment: + - Deployment Creation: user_guides/mlops/serving/deployment.md + - Deployment State: user_guides/mlops/serving/deployment-state.md + - Predictor (KServe): user_guides/mlops/serving/predictor.md + - Transformer (KServe): user_guides/mlops/serving/transformer.md + - Inference Logger: user_guides/mlops/serving/inference-logger.md + - Inference Batcher: user_guides/mlops/serving/inference-batcher.md + - Resources: user_guides/mlops/serving/resources.md + - Autoscaling: user_guides/mlops/serving/autoscaling.md + - Scheduling: user_guides/mlops/serving/scheduling.md + - API Protocol: user_guides/mlops/serving/api-protocol.md - REST API: user_guides/mlops/serving/rest-api.md - Troubleshooting: user_guides/mlops/serving/troubleshooting.md - External Access: user_guides/mlops/serving/external-access.md From 373132db58022d6ab73b69c6daea3341f8bedd35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 5 Mar 2026 14:13:12 +0100 Subject: [PATCH 02/54] Fix lint --- docs/user_guides/mlops/serving/predictor.md | 7 ++++--- docs/user_guides/mlops/serving/rest-api.md | 5 ++--- docs/user_guides/mlops/serving/transformer.md | 1 - .../projects/python-deployment/python-deployment.md | 1 - 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/user_guides/mlops/serving/predictor.md b/docs/user_guides/mlops/serving/predictor.md index fdabbcbfe7..1ac6b1394b 100644 --- a/docs/user_guides/mlops/serving/predictor.md +++ b/docs/user_guides/mlops/serving/predictor.md @@ -216,6 +216,7 @@ For Python model deployments, you need implement a predictor script that loads a ``` ### Step 3: Pass predictor configuration to model deployment + You can customize the default predictor settings when creating a model deployment. === "Python" @@ -236,7 +237,7 @@ You can customize the default predictor settings when creating a model deploymen ## Model Server -Hopsworks Model Serving supports deploying models with a Python model server for python-based models (scikit-learn, XGBoost , pytorch...), TensorFlow Serving for TensorFlow / Keras models and vLLM for Large Language Models (LLMs). +Hopsworks Model Serving supports deploying models with a Python model server for python-based models (scikit-learn, XGBoost , pytorch...), TensorFlow Serving for TensorFlow / Keras models and vLLM for Large Language Models (LLMs). !!! info "Supported model servers" @@ -247,7 +248,7 @@ Hopsworks Model Serving supports deploying models with a Python model server for | TensorFlow Serving | TensorFlow Serving runtime | Keras, TensorFlow | | vLLM | vLLM openai-compatible server | vLLM-supported models (see [list](https://docs.vllm.ai/en/v0.10.2/models/supported_models.html)) | -Each model server has specific requirements and supports different types of model artifacts, file formats, and configuration options. When deploying a model, ensure that your model files and configuration align with the expectations of the selected server. +Each model server has specific requirements and supports different types of model artifacts, file formats, and configuration options. When deploying a model, ensure that your model files and configuration align with the expectations of the selected server. !!! info "Model artifact requirements" @@ -265,6 +266,7 @@ All deployments use [KServe](https://kserve.github.io/website/latest/) as the se For **Python model deployments** ==only==, you can provide a custom Python script—called a predictor script—to load your model and serve predictions. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must follow a specific template, as shown in [Step 2](#step-2-optional-implement-a-predictor-script). ## Server configuration file + For **Python model deployments**, you can provide a server configuration file to separate deployment-specific settings from the logic in your predictor or transformer scripts. This approach allows you to update configuration parameters without modifying the code. Within the deployment, the configuration file is accessible at the path specified by the `CONFIG_FILE_PATH` environment variable (see [environment variables](#environment-variables)). For **vLLM deployments**, the server configuration file is ==required== and is used to configure the vLLM server. For example, you can use this configuration file to specify the chat template or LoRA modules to be loaded by the vLLM server. See all available parameters in the [official documentation](https://docs.vllm.ai/en/v0.10.2/serving/openai_compatible_server.html). @@ -325,7 +327,6 @@ A number of different environment variables is available in the predictor to eas | `MATERIAL_DIRECTORY` | Path to TLS certificates (`/certs`) | | `REQUESTS_VERIFY` | SSL verification setting | - ## Python environments Based on the model server used in the model deployment, you can select the Python environment where the predictor and transformer scripts will run. diff --git a/docs/user_guides/mlops/serving/rest-api.md b/docs/user_guides/mlops/serving/rest-api.md index 2856d7c443..ef006da1af 100644 --- a/docs/user_guides/mlops/serving/rest-api.md +++ b/docs/user_guides/mlops/serving/rest-api.md @@ -33,7 +33,7 @@ Authorization: ApiKey ## URL Paths -Deployed models are accessible through the ==Istio ingress gateway== using **path-based** routing. The full URL is constructed by combining the base path with a model server-specific suffix. +Deployed models are accessible through the ==Istio ingress gateway== using **path-based** routing. The full URL is constructed by combining the base path with a model server-specific suffix. This URL is also provided on the model deployment page in the Hopsworks UI. !!! example "" @@ -48,7 +48,7 @@ The base URL is composed of the **Istio ingress gateway IP**, the **project name !!! example "" **`https:///v1//`** -!!! warning "Host-based routing (legacy)" +!!! warning "Host-based routing (legacy)" Prior to path-based routing, requests were routed using a `Host` header matching the model deployment hostname, and **`https://`** as base url. ``` @@ -181,4 +181,3 @@ The Istio EnvoyFilter handles CORS preflight (`OPTIONS`) requests automatically. The model returns predictions in a JSON object. The response depends on the model server implementation. - diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index 252845ba48..d4b5ac42b8 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -241,7 +241,6 @@ A number of different environment variables is available in the transformer to e | `MATERIAL_DIRECTORY` | Path to TLS certificates (`/certs`) | | `REQUESTS_VERIFY` | SSL verification setting | - ## Python environments Transformer scripts always run on `*-inference-pipeline` Python environments. To create a new Python environment see [Python Environments](../../projects/python/python_env_overview.md). diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index 3c9cbe3fc5..5f88807c46 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -194,7 +194,6 @@ A number of different environment variables is available in the Python deploymen | `MATERIAL_DIRECTORY` | Path to TLS certificates (`/certs`) | | `REQUESTS_VERIFY` | SSL verification setting | - ## Python environments Python deployments run in one of the `*-inference-pipeline` Python environments available in your project. From 2601ae08adc40296f7ebae0b688bcf66d751398d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 5 Mar 2026 15:37:48 +0100 Subject: [PATCH 03/54] Fix lint --- docs/user_guides/mlops/serving/predictor.md | 6 +++--- docs/user_guides/mlops/serving/transformer.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user_guides/mlops/serving/predictor.md b/docs/user_guides/mlops/serving/predictor.md index 1ac6b1394b..99616c8284 100644 --- a/docs/user_guides/mlops/serving/predictor.md +++ b/docs/user_guides/mlops/serving/predictor.md @@ -76,7 +76,7 @@ Otherwise, click on `Create new deployment` to create the deployment for your mo ### Step 3 (Optional): Select a predictor script -For python models, to select a [predictor script](#step-2-optional-implement-a-predictor-script) click on `From project` and navigate through the file system to find it, or click on `Upload new file` to upload a predictor script now. +For python models, to select a [predictor script](#predictor-script) click on `From project` and navigate through the file system to find it, or click on `Upload new file` to upload a predictor script now.

@@ -131,7 +131,7 @@ To access the advanced deployment configuration, click on `Advanced options`. Here, you can further change the default values of the predictor: !!! info "Predictor configuration" - 1. [Transformer](#transformer) + 1. [Transformer](#transformer-script) 2. [Inference logger](#inference-logger) 3. [Inference batcher](#inference-batcher) 4. [Resources](#resources) @@ -263,7 +263,7 @@ All deployments use [KServe](https://kserve.github.io/website/latest/) as the se ## Predictor script -For **Python model deployments** ==only==, you can provide a custom Python script—called a predictor script—to load your model and serve predictions. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must follow a specific template, as shown in [Step 2](#step-2-optional-implement-a-predictor-script). +For **Python model deployments** ==only==, you can provide a custom Python script—called a predictor script—to load your model and serve predictions. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must follow a specific template, as shown in [Step 2](#step-21-optional-implement-a-predictor-script). ## Server configuration file diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index d4b5ac42b8..57a3c4e702 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -67,7 +67,7 @@ Otherwise, you can click on `Upload new file` to upload the transformer script n

-After selecting the transformer script, you can optionally configure resources and autoscaling for your transformer (see [Step 4](#step-4-optional-configure-resources)). +After selecting the transformer script, you can optionally configure resources and autoscaling for your transformer (see [Step 4](#step-4-optional-other-advanced-options)). Otherwise, click on `Create new deployment` to create the deployment for your model. ### Step 4 (Optional): Other advanced options From 68637d0e0ba8862085da045e03b64ecc46c89c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 5 Mar 2026 15:41:23 +0100 Subject: [PATCH 04/54] Fix lint --- docs/user_guides/mlops/serving/autoscaling.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index 55bcf3d1f6..d609f806fd 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -77,10 +77,7 @@ Once you are done with the changes, click on `Create new deployment` at the bott from hsml.scaling_config import PredictorScalingConfig predictor_scaling = PredictorScalingConfig( - min_instances=1, - max_instances=5, - scale_metric="RPS", - target=100 + min_instances=1, max_instances=5, scale_metric="RPS", target=100 ) ``` @@ -92,10 +89,7 @@ Once you are done with the changes, click on `Create new deployment` at the bott from hsml.scaling_config import TransformerScalingConfig transformer_scaling = TransformerScalingConfig( - min_instances=1, - max_instances=3, - scale_metric="CONCURRENCY", - target=50 + min_instances=1, max_instances=3, scale_metric="CONCURRENCY", target=50 ) my_transformer = ms.create_transformer( From 8b363c637e1875094a2b82017de39de4c4d90467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Mon, 9 Mar 2026 14:59:56 +0100 Subject: [PATCH 05/54] Add info about init params and feature logging --- docs/user_guides/mlops/serving/predictor.md | 105 ++++++++++++++---- docs/user_guides/mlops/serving/transformer.md | 21 ++++ 2 files changed, 105 insertions(+), 21 deletions(-) diff --git a/docs/user_guides/mlops/serving/predictor.md b/docs/user_guides/mlops/serving/predictor.md index 99616c8284..95118e9d34 100644 --- a/docs/user_guides/mlops/serving/predictor.md +++ b/docs/user_guides/mlops/serving/predictor.md @@ -167,35 +167,98 @@ For Python model deployments, you need implement a predictor script that loads a ``` python class Predictor: - def __init__(self): - """Initialization code goes here""" - # Model files can be found at os.environ["MODEL_FILES_PATH"] - # self.model = ... # load your model - - def predict(self, inputs): - """Serve predictions using the trained model""" - # Use the model to make predictions - # return self.model.predict(inputs) + def __init__(self): + """Initialization code goes here""" + # Optional __init__ params: project, deployment, model, async_logger + # Model files can be found at os.environ["MODEL_FILES_PATH"] + # self.model = ... # load your model + + def predict(self, inputs): + """Serve predictions using the trained model""" + # Use the model to make predictions + # return self.model.predict(inputs) + ``` + +=== "Predictor with Feature Logging" + + ``` python + class Predictor: + def __init__(self, async_logger, model, project): + """Initializes the serving state, reads a trained model""" + # Get feature view attached to model + ## self.model = model + ## self.feature_view = model.get_feature_view() + + # Initialize feature view with async feature logger + ## self.feature_view.init_feature_logger(feature_logger=async_logger) + + def predict(self, inputs): + """Serves a prediction request usign a trained model""" + # Extract serving keys and request parameters from inputs + ## serving_keys = ... + ## request_parameters = ... + + # Fetch feature vector with logging metadata + ## vector = self.feature_view.get_feature_vector(serving_keys, + ## request_parameters=request_parameters, + ## logging_data=True) + + # Make predictions + ## predictions = model.predict(vector) + + # Log Predictions + ## self.feature_view.log(vector, + ## predictions=predictions, + ## model = self.model) + + # Predictions + ## return predictions ``` === "Async Predictor" ``` python class Predictor: - def __init__(self): - """Initialization code goes here""" - # Model files can be found at os.environ["MODEL_FILES_PATH"] - # self.model = ... # load your model - - async def predict(self, inputs): - """Asynchronously serve predictions using the trained model""" - # Perform async operations that required - # result = await some_async_preprocessing(inputs) - - # Use the model to make predictions - # return self.model.predict(result) + def __init__(self): + """Initialization code goes here""" + # Optional __init__ params: project, deployment, model, async_logger + # Model files can be found at os.environ["MODEL_FILES_PATH"] + # self.model = ... # load your model + + async def predict(self, inputs): + """Asynchronously serve predictions using the trained model""" + # Perform async operations that required + # result = await some_async_preprocessing(inputs) + + # Use the model to make predictions + # return self.model.predict(result) ``` +!!! tip "Optional `__init__` parameters" + The `__init__` method supports optional parameters that are automatically injected at runtime: + + | Parameter | Class | Description | + | -------------- | -------------------- | ------------------------------------------------------ | + | `project` | `Project` | Hopsworks project handle | + | `deployment` | `Deployment` | Current model deployment handle | + | `model` | `Model` | Model handle | + | `async_logger` | `AsyncFeatureLogger` | Async feature logger for logging features to Hopsworks | + + You can add any combination of these parameters to your `__init__` method: + + ```python + class Predictor: + def __init__(self, project, model): + # Access the project and model directly + self.project = project + self.model = model + ``` + +!!! tip "Feature logging" + The `async_logger` parameter enables asynchronous logging of features and predictions from your predictor script via the Feature View API. This is useful for debugging, monitoring, and auditing the data your models use in production. Logged features are periodically materialized to the offline feature store, and can be retrieved, filtered, and managed through the feature view. + + See the [Feature and Prediction Logging](../../fs/feature_view/feature_logging.md) guide for details on enabling logging, retrieving logs, and managing the log lifecycle. + !!! info "Jupyter magic" In a jupyter notebook, you can add `%%writefile my_predictor.py` at the top of the cell to save it as a local file. diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index 57a3c4e702..9adce45801 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -109,6 +109,7 @@ Once you are done with the changes, click on `Create new deployment` at the bott class Transformer: def __init__(self): """Initialization code goes here""" + # Optional __init__ params: project, deployment, model, async_logger pass def preprocess(self, inputs): @@ -120,6 +121,26 @@ Once you are done with the changes, click on `Create new deployment` at the bott return outputs ``` +!!! tip "Optional `__init__` parameters" + The `__init__` method supports optional parameters that are automatically injected at runtime: + + | Parameter | Class | Description | + | -------------- | -------------------- | ------------------------------------------------------ | + | `project` | `Project` | Hopsworks project handle | + | `deployment` | `Deployment` | Current model deployment handle | + | `model` | `Model` | Model handle | + | `async_logger` | `AsyncFeatureLogger` | Async feature logger for logging features to Hopsworks | + + You can add any combination of these parameters to your `__init__` method: + + ```python + class Transformer: + def __init__(self, project, model): + # Access the project and model directly + self.project = project + self.model_metadata = model + ``` + !!! info "Jupyter magic" In a jupyter notebook, you can add `%%writefile my_transformer.py` at the top of the cell to save it as a local file. From 503a3e8d2109bd52f330b683f4aa818a2901ae58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 14:32:14 +0100 Subject: [PATCH 06/54] Update docs/concepts/mlops/serving.md Co-authored-by: Aleksey Veresov --- docs/concepts/mlops/serving.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/mlops/serving.md b/docs/concepts/mlops/serving.md index 8bf197c313..39875c53e1 100644 --- a/docs/concepts/mlops/serving.md +++ b/docs/concepts/mlops/serving.md @@ -1,5 +1,5 @@ In Hopsworks, you can easily deploy models from the model registry using [KServe](https://kserve.github.io/website/latest/), the standard open-source framework for model serving on Kubernetes. -You can deploy models programmatically using the HSML library or via the UI. +You can deploy models programmatically using [`Model.deploy`][hsml.model.Model.deploy] or via the UI. A KServe model deployment can include the following components: **`Predictor (KServe component)`** From 5712ae5e177afa01b952f869dadb83e142f4db95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 14:35:20 +0100 Subject: [PATCH 07/54] Update docs/concepts/mlops/serving.md Co-authored-by: Aleksey Veresov --- docs/concepts/mlops/serving.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/concepts/mlops/serving.md b/docs/concepts/mlops/serving.md index 39875c53e1..660a3f2367 100644 --- a/docs/concepts/mlops/serving.md +++ b/docs/concepts/mlops/serving.md @@ -8,7 +8,8 @@ A KServe model deployment can include the following components: **`Transformer (KServe component)`** -: A ^^pre-processing^^ and ^^post-processing^^ component that can transform model inputs before predictions are made, and predictions before these are delivered back to the client. Not available for vLLM deployments. +: A ^^pre-processing^^ and ^^post-processing^^ component that can transform model inputs before predictions are made, and predictions before these are delivered back to the client. + Not available for vLLM deployments. **`Inference Logger`** From d81e4e45630b7e71ccea204aaedc1e6f0a49f53e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 14:35:29 +0100 Subject: [PATCH 08/54] Update docs/concepts/mlops/serving.md Co-authored-by: Aleksey Veresov --- docs/concepts/mlops/serving.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/concepts/mlops/serving.md b/docs/concepts/mlops/serving.md index 660a3f2367..81aefda019 100644 --- a/docs/concepts/mlops/serving.md +++ b/docs/concepts/mlops/serving.md @@ -13,7 +13,8 @@ A KServe model deployment can include the following components: **`Inference Logger`** -: Hopsworks logs inputs and outputs of transformers and predictors to a ^^Kafka topic^^ that is part of the same project as the model. Not available for vLLM deployments. +: Hopsworks logs inputs and outputs of transformers and predictors to a ^^Kafka topic^^ that is part of the same project as the model. + Not available for vLLM deployments. **`Inference Batcher`** From 8a354de90b31892c9b5ff6e440e7306083b70858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 14:35:39 +0100 Subject: [PATCH 09/54] Update docs/concepts/mlops/serving.md Co-authored-by: Aleksey Veresov --- docs/concepts/mlops/serving.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/concepts/mlops/serving.md b/docs/concepts/mlops/serving.md index 81aefda019..6c3989ccfd 100644 --- a/docs/concepts/mlops/serving.md +++ b/docs/concepts/mlops/serving.md @@ -26,7 +26,8 @@ A KServe model deployment can include the following components: API keys have scopes to ensure the principle of least privilege access control to resources managed by Hopsworks. !!! warning "Host-based routing" - The Istio Model Endpoint supports host-based routing for inference requests; however, this approach is considered legacy. Path-based routing is recommended for new deployments. + The Istio Model Endpoint supports host-based routing for inference requests; however, this approach is considered legacy. + Path-based routing is recommended for new deployments. Models deployed on KServe in Hopsworks can be easily integrated with the Hopsworks Feature Store using either a Transformer or Predictor Python script, that builds the predictor's input feature vector using the application input and pre-computed features from the Feature Store. From debf029ba8d631e97b799d5b7d1c6b7e6f671744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 14:41:38 +0100 Subject: [PATCH 10/54] Update docs/user_guides/mlops/serving/autoscaling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/autoscaling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index d609f806fd..f1afad582c 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -6,7 +6,8 @@ description: Documentation on how to configure autoscaling for a deployment ## Introduction -Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available options. +Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. +See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available options. ## GUI From ec289c397c66a433870951c0141b2e5186556e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 14:45:30 +0100 Subject: [PATCH 11/54] Update docs/user_guides/mlops/serving/deployment.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/deployment.md b/docs/user_guides/mlops/serving/deployment.md index 634f42bb3d..768143be95 100644 --- a/docs/user_guides/mlops/serving/deployment.md +++ b/docs/user_guides/mlops/serving/deployment.md @@ -8,7 +8,7 @@ description: Documentation on how to deployment Machine Learning (ML) models and In this guide, you will learn how to create a new deployment for a trained model. -!!! note +!!! info This guide covers model deployments, which require a model saved in the Model Registry. To learn how to create a model in the Model Registry, see [Model Registry Guide](../registry/index.md#exporting-a-model). For Python deployments (running a Python script without a model artifact), see [Python Deployments](../../projects/python-deployment/python-deployment.md). From 207cb7dc560a07b71b5daa898f40bd3f94c90090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:03:04 +0100 Subject: [PATCH 12/54] Update docs/user_guides/mlops/serving/deployment.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/deployment.md b/docs/user_guides/mlops/serving/deployment.md index 768143be95..1eeac6a14e 100644 --- a/docs/user_guides/mlops/serving/deployment.md +++ b/docs/user_guides/mlops/serving/deployment.md @@ -70,7 +70,8 @@ After selecting the model, select a model version and give your model deployment For Python models, you must select a custom [predictor script](#predictor) that loads and runs the trained model by clicking on `From project` or `Upload new file`, to choose an existing script in the project file system or upload a new script, respectively. !!! info "Server configuration file for vLLM" - For vLLM deployments, a server configuration file is required. See the [Predictor Guide](predictor.md#server-configuration-file) for more details. + For vLLM deployments, a server configuration file is required. + See the [Predictor Guide](predictor.md#server-configuration-file) for more details. Lastly, click on `Create new deployment` to create the deployment for your model. From 773abf1d12fe7a4ce723d6e8eb3bdec04a8e4573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:03:28 +0100 Subject: [PATCH 13/54] Update docs/user_guides/mlops/serving/deployment.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/deployment.md b/docs/user_guides/mlops/serving/deployment.md index 1eeac6a14e..33e1b132a0 100644 --- a/docs/user_guides/mlops/serving/deployment.md +++ b/docs/user_guides/mlops/serving/deployment.md @@ -85,7 +85,8 @@ Optionally, you can access and adjust other parameters of the deployment configu
Advanced options. Go to advanced deployment creation form

-You will be redirected to a full-page deployment creation form, where you can review all default configuration values and customize them to fit your requirements. In addition to the basic settings, this form allows you to further configure the [Predictor](#predictor) and [Transformer](#transformer) KServe components of your model deployment. +You will be redirected to a full-page deployment creation form, where you can review all default configuration values and customize them to fit your requirements. +In addition to the basic settings, this form allows you to further configure the [Predictor](#predictor) and [Transformer](#transformer) KServe components of your model deployment. Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. From 8c2856ec9624eb422834d032d7eb4891ce71d180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:03:48 +0100 Subject: [PATCH 14/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index 5f88807c46..d06fd8624f 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -10,7 +10,8 @@ Python deployments allow you to deploy a Python script as a service without requ This is useful for custom inference pipelines, feature view deployments, or any Python-based program that needs to be served behind an HTTP endpoint. !!! warning "Incoming requests are directed to port 8080" - Python deployments run your script directly on port 8080. Therefore, make sure your implementation listens to 8080 port for handling incoming requests. + Python deployments run your script directly on port 8080. + Therefore, make sure your implementation listens to 8080 port for handling incoming requests. !!! info "gRPC protocol not supported" From a9638dc037bf8bfe09ad8da7eb0ccf3d61db6008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:04:04 +0100 Subject: [PATCH 15/54] Update docs/user_guides/mlops/serving/troubleshooting.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/troubleshooting.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/troubleshooting.md b/docs/user_guides/mlops/serving/troubleshooting.md index dab61cfa4d..6c921bf08e 100644 --- a/docs/user_guides/mlops/serving/troubleshooting.md +++ b/docs/user_guides/mlops/serving/troubleshooting.md @@ -14,7 +14,8 @@ When a deployment is starting, it follows an ordered sequence of [states](deploy Similarly, it follows an ordered sequence of states when being stopped, although with fewer steps. !!! warning "`FAILED` is a terminal state" - If a deployment reaches the `FAILED` state, it cannot recover on its own. You must stop and restart the deployment to attempt recovery. + If a deployment reaches the `FAILED` state, it cannot recover on its own. + You must stop and restart the deployment to attempt recovery. ## GUI From 9d9cbf605b7c1ff5eff176d36470956795f0e436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:16:03 +0100 Subject: [PATCH 16/54] Update docs/user_guides/mlops/serving/scheduling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/scheduling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index 0cda93a60a..13daecf329 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -6,7 +6,8 @@ description: Documentation on how to configure scheduling options for a model de ## Introduction -Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. Hopsworks supports Kubernetes scheduler abstractions such as **node affinity**, **anti-affinity**, and **priority classes**, as well as advanced scheduling with **Kueue queues and topologies**. +Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. +Hopsworks supports Kubernetes scheduler abstractions such as **node affinity**, **anti-affinity**, and **priority classes**, as well as advanced scheduling with **Kueue queues and topologies**. !!! tip "Scheduling available for all workloads" In addition to model deployments, all scheduling options are also available for jobs, Jupyter notebooks, and Python deployments. From 0fe80c0929956f35a725bfed335f00ec760c1090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:28:50 +0100 Subject: [PATCH 17/54] Update docs/user_guides/mlops/serving/resources.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/resources.md b/docs/user_guides/mlops/serving/resources.md index e053825aef..991fa40dd8 100644 --- a/docs/user_guides/mlops/serving/resources.md +++ b/docs/user_guides/mlops/serving/resources.md @@ -8,7 +8,7 @@ description: Documentation on how to allocate resources to a model deployment Resource allocation can be configured ==per component== (predictor and transformer) in a deployment, allowing you to specify how many CPUs, GPUs, and memory are allocated. For each component, you can set minimum (requests) and maximum (limits) resources, as well as the number of instances. -??? info "Show resource defaults" +??? info "Resource defaults" | Field | Default Request | Default Limit | Validation | | ------------------ | --------------- | -------------- | -------------------------------------------------- | From 90fa7f14119d75de6332d38c02cc7a423911cf57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 16:33:22 +0100 Subject: [PATCH 18/54] Update docs/user_guides/mlops/serving/deployment.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/deployment.md b/docs/user_guides/mlops/serving/deployment.md index 33e1b132a0..3b26e77755 100644 --- a/docs/user_guides/mlops/serving/deployment.md +++ b/docs/user_guides/mlops/serving/deployment.md @@ -150,7 +150,8 @@ Retrieve the trained model you want to deploy using the Model Registry handle. ### Step 3: Deploy your trained model -Create a deployment for your model by calling `.deploy()` on the model metadata object. This will create a deployment for your model with default values. +Create a deployment for your model by calling `.deploy()` on the model metadata object. +This will create a deployment for your model with default values. === "Python" From 60a556216af83a79d3907565581385f0b50fdca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Tue, 10 Mar 2026 17:27:18 +0100 Subject: [PATCH 19/54] Address comments --- docs/concepts/mlops/serving.md | 4 +-- .../user_guides/mlops/serving/api-protocol.md | 2 +- docs/user_guides/mlops/serving/autoscaling.md | 31 +++++++++++-------- .../mlops/serving/deployment-state.md | 28 ++++++++--------- docs/user_guides/mlops/serving/deployment.md | 4 +-- .../mlops/serving/external-access.md | 6 ++-- .../mlops/serving/inference-batcher.md | 2 +- .../mlops/serving/inference-logger.md | 2 +- docs/user_guides/mlops/serving/predictor.md | 2 +- docs/user_guides/mlops/serving/resources.md | 2 +- docs/user_guides/mlops/serving/rest-api.md | 20 ++++++------ docs/user_guides/mlops/serving/scheduling.md | 26 ++++++++-------- docs/user_guides/mlops/serving/transformer.md | 8 ++--- .../mlops/serving/troubleshooting.md | 4 +-- .../projects/project/create_project.md | 2 +- .../python-deployment/python-deployment.md | 2 +- .../projects/python-deployment/rest-api.md | 12 +++---- .../python-deployment/troubleshooting.md | 16 +++++----- 18 files changed, 89 insertions(+), 84 deletions(-) diff --git a/docs/concepts/mlops/serving.md b/docs/concepts/mlops/serving.md index 6c3989ccfd..5eae308492 100644 --- a/docs/concepts/mlops/serving.md +++ b/docs/concepts/mlops/serving.md @@ -22,8 +22,8 @@ A KServe model deployment can include the following components: **`Istio Model Endpoint`** -: You can publish a model over ^^REST(HTTP)^^ or ^^gRPC^^ using a Hopsworks API key, accessible via path-based routing through Istio. - API keys have scopes to ensure the principle of least privilege access control to resources managed by Hopsworks. +: You can publish a model over REST(HTTP) or gRPC using a Hopsworks API key, accessible via **path-based routing** through Istio. + API keys have scopes to ensure the principle of least privilege access control to resources managed by Hopsworks. For more details on path-based routing of requests through Istio, see [REST API Guide](../../user_guides/mlops/serving/rest-api.md). !!! warning "Host-based routing" The Istio Model Endpoint supports host-based routing for inference requests; however, this approach is considered legacy. diff --git a/docs/user_guides/mlops/serving/api-protocol.md b/docs/user_guides/mlops/serving/api-protocol.md index be90ebbe97..cb42e5b848 100644 --- a/docs/user_guides/mlops/serving/api-protocol.md +++ b/docs/user_guides/mlops/serving/api-protocol.md @@ -5,7 +5,7 @@ Hopsworks supports both REST and gRPC as API protocols for sending inference requests to model deployments. While REST API protocol is supported in all types of model deployments, gRPC is currently supported for **Python model deployments** only. -## GUI +## Web UI ### Step 1: Create a new deployment diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index f1afad582c..7104db55c6 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -1,15 +1,14 @@ ---- -description: Documentation on how to configure autoscaling for a deployment ---- - # How To Configure Scaling For A Deployment ## Introduction -Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. -See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available options. +This guide explains how to set up **autoscaling** for model deployments using either the [web UI](#web-ui) or the [Python API](#code). + +Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. Autoscaling enables the deployment to use resources more efficiently, by growing and shrinking the allocated resources according to its actual, real-time usage. -## GUI +See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available scaling options. + +## Web UI ### Step 1: Create new deployment @@ -72,6 +71,8 @@ Once you are done with the changes, click on `Create new deployment` at the bott ### Step 2: Define the predictor scaling configuration +You can use the [`PredictorScalingConfig`][hsml.scaling_config.PredictorScalingConfig] class to configure the scaling options according to your preferences. Default values for scaling metrics and parameters are listed in the [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) sections above. + === "Python" ```python @@ -84,6 +85,8 @@ Once you are done with the changes, click on `Create new deployment` at the bott ### Step 3 (Optional): Define the transformer scaling configuration +If a transformer script is also provided, you can use the [`TransformerScalingConfig`][hsml.scaling_config.TransformerScalingConfig] class to configure the scaling options according to your preferences. Default values for scaling metrics and parameters are listed in the [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) sections above. + === "Python" ```python @@ -92,11 +95,6 @@ Once you are done with the changes, click on `Create new deployment` at the bott transformer_scaling = TransformerScalingConfig( min_instances=1, max_instances=3, scale_metric="CONCURRENCY", target=50 ) - - my_transformer = ms.create_transformer( - script_file="Resources/my_transformer.py", - scaling_configuration=transformer_scaling - ) ``` ### Step 4: Create a deployment with the scaling configuration @@ -106,9 +104,16 @@ Once you are done with the changes, click on `Create new deployment` at the bott ```python my_model = mr.get_model("my_model", version=1) + # optional + my_transformer = ms.create_transformer( + script_file="Resources/my_transformer.py", + scaling_configuration=transformer_scaling + ) + my_deployment = my_model.deploy( scaling_configuration=predictor_scaling, - # transformer=my_transformer + # optional: + transformer=my_transformer ) ``` diff --git a/docs/user_guides/mlops/serving/deployment-state.md b/docs/user_guides/mlops/serving/deployment-state.md index 3ef8ac5f85..022bfec415 100644 --- a/docs/user_guides/mlops/serving/deployment-state.md +++ b/docs/user_guides/mlops/serving/deployment-state.md @@ -17,7 +17,7 @@ The following is the state transition diagram for deployments. States are composed of a [status](#deployment-status) and a [condition](#deployment-conditions). While a status represents a high-level view of the state, conditions contain more detailed information closely related to infrastructure terms. -## GUI +## Web UI ### Step 1: Inspect deployment status @@ -122,19 +122,19 @@ Additionally, you can find the nº of instances currently running by scrolling d The status of a deployment is a high-level description of its current state. -??? info "Show deployment status" +??? info "Deployment statuses" - | Status | Description | - | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | - | CREATING | Deployment artifacts are being prepared | - | CREATED | Deployment has never been started | - | STARTING | Deployment is starting | - | RUNNING | Deployment is ready and running. Predictions are served without additional latencies. | - | IDLE | Deployment is ready but scaled to zero or has no active replicas. Higher latencies (cold-start) are expected on the first inference request. | - | FAILED | Terminal state. The deployment has encountered an unrecoverable error. More details can be found in the status condition. | - | UPDATING | Deployment is applying updates to the running instances | - | STOPPING | Deployment is stopping | - | STOPPED | Deployment has been stopped | + | Status | Description | + | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | + | CREATING | Deployment artifacts are being prepared | + | CREATED | Deployment has never been started | + | STARTING | Deployment is starting | + | RUNNING | Deployment is ready and running. Predictions are served without additional latencies. | + | IDLE | Deployment is ready but scaled to zero or has no active replicas. Higher latencies (cold-start) are expected on the first inference request. | + | FAILED | Terminal state. The deployment has encountered an unrecoverable error. More details can be found in the status condition. | + | UPDATING | Deployment is applying updates to the running instances | + | STOPPING | Deployment is stopping | + | STOPPED | Deployment has been stopped | ## How States Are Determined @@ -151,7 +151,7 @@ Status conditions contain three pieces of information: type, status and reason. While the type describes the purpose of the condition, the status represents its progress. Additionally, a reason field is provided with a more descriptive message of the status. -??? info "Show deployment conditions" +??? info "Deployment conditions" | Type | Status | Description | | ----------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/docs/user_guides/mlops/serving/deployment.md b/docs/user_guides/mlops/serving/deployment.md index 3b26e77755..de0a5b1819 100644 --- a/docs/user_guides/mlops/serving/deployment.md +++ b/docs/user_guides/mlops/serving/deployment.md @@ -22,7 +22,7 @@ For each model deployment, there are four concepts to understand: 3. [Predictor](#predictor) 4. [Transformer](#transformer) -## GUI +## Web UI ### Step 1: Create a deployment @@ -63,7 +63,7 @@ Then, select the model you want to deploy from the list of available models unde After selecting the model, select a model version and give your model deployment a name. -!!! notice "Deployment name validation rules" +!!! info "Deployment name validation rules" A valid deployment name can only contain characters a-z, A-Z and 0-9. !!! info "Predictor script for Python models" diff --git a/docs/user_guides/mlops/serving/external-access.md b/docs/user_guides/mlops/serving/external-access.md index d97c31cd9b..c3322745ff 100644 --- a/docs/user_guides/mlops/serving/external-access.md +++ b/docs/user_guides/mlops/serving/external-access.md @@ -15,7 +15,7 @@ For these cases, Hopsworks supports fine-grained access control to model deploym Hopsworks can be configured to use different types of authentication methods including OAuth2, LDAP and Kerberos. See the [Authentication Methods Guide](../../../setup_installation/admin/auth.md) for more information. -## GUI (for Hopsworks users) +## Web UI (for Hopsworks users) ### Step 1: Navigate to a model deployment @@ -64,7 +64,7 @@ After that, click on the `save` button to persist the changes.

-## GUI (for external users) +## Web UI (for external users) ### Step 1: Login with the external identity provider @@ -105,7 +105,7 @@ Inference requests to model deployments are authenticated and authorized based o You can create API keys to authenticate your inference requests by clicking on the `Create API Key` button. !!! info "Authorization header" - API keys are set in the `Authorization` header following the format `ApiKey ` + API keys are set in the `authorization` header following the format `ApiKey `

diff --git a/docs/user_guides/mlops/serving/inference-batcher.md b/docs/user_guides/mlops/serving/inference-batcher.md index d2fb12c1e7..298137ed08 100644 --- a/docs/user_guides/mlops/serving/inference-batcher.md +++ b/docs/user_guides/mlops/serving/inference-batcher.md @@ -7,7 +7,7 @@ The configuration of the inference batcher depends on the model server used in t !!! warning "Inference batching is not supported for vLLM deployments." -## GUI +## Web UI ### Step 1: Create new deployment diff --git a/docs/user_guides/mlops/serving/inference-logger.md b/docs/user_guides/mlops/serving/inference-logger.md index abf54ba7d3..091f6ff10d 100644 --- a/docs/user_guides/mlops/serving/inference-logger.md +++ b/docs/user_guides/mlops/serving/inference-logger.md @@ -20,7 +20,7 @@ Hopsworks supports logging both inference requests and predictions as events to !!! note "Kafka topic requirements" The Kafka topic must use the `inferenceschema` subject. Schema v4+ is required for KServe topics. -## GUI +## Web UI ### Step 1: Create new deployment diff --git a/docs/user_guides/mlops/serving/predictor.md b/docs/user_guides/mlops/serving/predictor.md index 95118e9d34..bb13b9c171 100644 --- a/docs/user_guides/mlops/serving/predictor.md +++ b/docs/user_guides/mlops/serving/predictor.md @@ -30,7 +30,7 @@ In each predictor, you can decide the following configuration: 10. [Scheduling](#scheduling) 11. [API protocol](#api-protocol) -## GUI +## Web UI ### Step 1: Create new deployment diff --git a/docs/user_guides/mlops/serving/resources.md b/docs/user_guides/mlops/serving/resources.md index 991fa40dd8..06c0f44074 100644 --- a/docs/user_guides/mlops/serving/resources.md +++ b/docs/user_guides/mlops/serving/resources.md @@ -20,7 +20,7 @@ Resource allocation can be configured ==per component== (predictor and transform !!! tip "Automatic downscale of inactive instances" Setting the number of instances to **0** for a component (predictor or transformer) enables **scale-to-zero**. This means that all instances of the component will automatically scale down to zero after a default period of inactivity of 30 seconds. -## GUI +## Web UI ### Step 1: Create new deployment diff --git a/docs/user_guides/mlops/serving/rest-api.md b/docs/user_guides/mlops/serving/rest-api.md index ef006da1af..66b13cd26c 100644 --- a/docs/user_guides/mlops/serving/rest-api.md +++ b/docs/user_guides/mlops/serving/rest-api.md @@ -18,18 +18,18 @@ The full inference URL is constructed by combining a base path with a model serv All requests must include an API Key for authentication. You can create an API key by following this [guide](../../projects/api_key/create_api_key.md). -Include the key in the `Authorization` header: +Include the key in the `authorization` header: ```text -Authorization: ApiKey +authorization: ApiKey ``` ### Headers | Header | Description | Example Value | | --------------- | ----------------------------------- | ----------------------- | -| `Authorization` | API key for authentication. | `ApiKey ` | -| `Content-Type` | Request payload type (always JSON). | `application/json` | +| `authorization` | API key for authentication. | `ApiKey ` | +| `content-type` | Request payload type (always JSON). | `application/json` | ## URL Paths @@ -113,7 +113,7 @@ See [more information on the request format](https://kserve.github.io/website/do data = {"inputs": [[4641025220953719, 4920355418495856]]} - headers = {"Authorization": "ApiKey ", "Content-Type": "application/json"} + headers = {"authorization": "ApiKey ", "content-type": "application/json"} response = requests.post( "https:///v1/my_project/fraud/v1/models/fraud:predict", @@ -127,8 +127,8 @@ See [more information on the request format](https://kserve.github.io/website/do ```bash curl -X POST "https:///v1/my_project/fraud/v1/models/fraud:predict" \ - -H "Authorization: ApiKey " \ - -H "Content-Type: application/json" \ + -H "authorization: ApiKey " \ + -H "content-type: application/json" \ -d '{ "inputs": [ [4641025220953719, 4920355418495856] @@ -149,7 +149,7 @@ For generative inference (vLLM), the request follows the [OpenAI specification]( "messages": [{"role": "user", "content": "Hello, how are you?"}], } - headers = {"Authorization": "ApiKey ", "Content-Type": "application/json"} + headers = {"authorization": "ApiKey ", "content-type": "application/json"} response = requests.post( "https:///v1/my_project/my-llm/v1/chat/completions", @@ -163,8 +163,8 @@ For generative inference (vLLM), the request follows the [OpenAI specification]( ```bash curl -X POST "https:///v1/my_project/my-llm/v1/chat/completions" \ - -H "Authorization: ApiKey " \ - -H "Content-Type: application/json" \ + -H "authorization: ApiKey " \ + -H "content-type: application/json" \ -d '{ "model": "my-llm", "messages": [ diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index 13daecf329..5e15eb419f 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -6,13 +6,13 @@ description: Documentation on how to configure scheduling options for a model de ## Introduction -Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. -Hopsworks supports Kubernetes scheduler abstractions such as **node affinity**, **anti-affinity**, and **priority classes**, as well as advanced scheduling with **Kueue queues and topologies**. +Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. +Hopsworks supports Kubernetes scheduler abstractions such as [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity), [anti-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity), and [priority classes](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), as well as advanced scheduling with [Kueue queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) and [topologies](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/). !!! tip "Scheduling available for all workloads" In addition to model deployments, all scheduling options are also available for jobs, Jupyter notebooks, and Python deployments. -## GUI +## Web UI ### Step 1: Create new deployment @@ -70,23 +70,23 @@ If Kueue is ==enabled==, you can also select a [queue and topology](#queues-and- Once you are done with the changes, click on `Create new deployment` at the bottom of the page to create the deployment for your model. -## Queues and Topologies - -!!! warning "Kueue is required" - This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. - -If the cluster has Kueue enabled, you can select a queue for your deployment. **Queues** control resource allocation and scheduling priority across the cluster. Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. - -You can also select a **topology** unit to control how deployment pods are co-located. For example, you can require all pods to run on the same host to minimize network latency. - ## Affinity, Anti-Affinity, and Priority Classes -You can configure node affinity, anti-affinity, and priority classes to control pod placement and scheduling priority for your deployment. +You can configure [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity), [anti-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity), and [priority classes](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/) to control pod placement and scheduling priority for your deployment. - **Affinity**: Constrains which nodes the deployment pods can run on based on node labels (e.g., GPU nodes, specific zones). - **Anti-Affinity**: Prevents pods from running on nodes with specific labels. - **Priority Class**: Determines the scheduling and eviction priority of pods. Higher priority pods are scheduled first and can preempt lower priority pods. +## Queues and Topologies + +!!! warning "Kueue is required" + This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + +If the cluster has Kueue enabled, you can select a queue for your deployment. [Queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) control resource allocation and scheduling priority across the cluster. Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. + +You can also select a [topology](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/) unit to control how deployment pods are co-located. For example, you can require all pods to run on the same host to minimize network latency. + ## Learn more For detailed documentation on scheduling abstractions and cluster-level configuration, see the following guides: diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index 9adce45801..bdd77affd9 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -10,9 +10,9 @@ In this guide, you will learn how to configure a transformer script in a model d Transformer scripts are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. They are user-provided Python scripts (`.py` or `.ipynb`) implementing the [Transformer class](#step-2-implement-transformer-script). -!!! warning "Transformer scripts are not supported in vLLM deployments." +!!! info "Transformer scripts are not supported in vLLM deployments." -!!! info "Independent scaling" +!!! tip "Independent scaling" The transformer has independent resources and autoscaling configuration from the predictor. This allows you to scale the pre/post-processing separately from the model inference. A transformer has the following configurable components: @@ -26,7 +26,7 @@ A transformer has the following configurable components: See examples of transformer scripts in the serving [example notebooks](https://github.com/logicalclocks/hops-examples/blob/master/notebooks/ml/serving). -## GUI +## Web UI ### Step 1: Create new deployment @@ -197,7 +197,7 @@ Use the `transformer` parameter to set the transformer configuration when creati A transformer script is a custom Python script to apply pre/post-processing on the model inputs and outputs. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must implement the `Transformer` class, as shown in [Step 2](#step-2-implement-transformer-script). -!!! warning "Transformer scripts are not supported in vLLM deployments." +!!! info "Transformer scripts are not supported in vLLM deployments." ## Resources diff --git a/docs/user_guides/mlops/serving/troubleshooting.md b/docs/user_guides/mlops/serving/troubleshooting.md index 6c921bf08e..53d92de23d 100644 --- a/docs/user_guides/mlops/serving/troubleshooting.md +++ b/docs/user_guides/mlops/serving/troubleshooting.md @@ -17,7 +17,7 @@ Similarly, it follows an ordered sequence of states when being stopped, although If a deployment reaches the `FAILED` state, it cannot recover on its own. You must stop and restart the deployment to attempt recovery. -## GUI +## Web UI ### Step 1: Inspect deployment status @@ -107,7 +107,7 @@ To access the OpenSearch Dashboards, click on the `See logs` button at the top o Once in the OpenSearch Dashboards, you can search for keywords, apply multiple filters and sort the records by timestamp. -??? info "Show available filters" +??? info "Available filters" | Filter | Description | | -------------- | -------------------------------------------------------------------------------------------------------- | diff --git a/docs/user_guides/projects/project/create_project.md b/docs/user_guides/projects/project/create_project.md index 6e92994372..d218effddf 100644 --- a/docs/user_guides/projects/project/create_project.md +++ b/docs/user_guides/projects/project/create_project.md @@ -8,7 +8,7 @@ In this guide, you will learn how to create a new project. A valid project name can only contain characters a-z, A-Z, 0-9 and special characters ‘_’ and ‘.’ but not ‘__’ (double underscore). There is also a number of [reserved project names](#reserved-project-names) that can not be used. -## GUI +## Web UI ### Step 1: Create a project diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index d06fd8624f..cc73c213b5 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -26,7 +26,7 @@ In each Python deployment, you can configure the following: 3. [Autoscaling](#autoscaling) 4. [Scheduling](#scheduling) -## GUI +## Web UI ### Step 1: Create new deployment diff --git a/docs/user_guides/projects/python-deployment/rest-api.md b/docs/user_guides/projects/python-deployment/rest-api.md index 0fd40b8103..4804cc6749 100644 --- a/docs/user_guides/projects/python-deployment/rest-api.md +++ b/docs/user_guides/projects/python-deployment/rest-api.md @@ -22,18 +22,18 @@ The full URL path is constructed by combining a base path with a resource path a All requests must include an API Key for authentication. You can create an API key by following this [guide](../../projects/api_key/create_api_key.md). -Include the key in the `Authorization` header: +Include the key in the `authorization` header: ```text -Authorization: ApiKey +authorization: ApiKey ``` ### Headers | Header | Description | Example Value | | --------------- | --------------------------- | ----------------------- | -| `Authorization` | API key for authentication. | `ApiKey ` | -| `Content-Type` | Request payload type. | `application/json` | +| `authorization` | API key for authentication. | `ApiKey ` | +| `content-type` | Request payload type. | `application/json` | ## URL Paths @@ -91,8 +91,8 @@ The request format depends entirely on your Python server implementation. There ```bash curl -X POST "https:///v1/my_project/pyserver/echo" \ - -H "Authorization: ApiKey " \ - -H "Content-Type: application/json" \ + -H "authorization: ApiKey " \ + -H "content-type: application/json" \ -d '{"key": "value"}' ``` diff --git a/docs/user_guides/projects/python-deployment/troubleshooting.md b/docs/user_guides/projects/python-deployment/troubleshooting.md index 28a90c3807..cf962a1b0c 100644 --- a/docs/user_guides/projects/python-deployment/troubleshooting.md +++ b/docs/user_guides/projects/python-deployment/troubleshooting.md @@ -16,7 +16,7 @@ Similarly, it follows an ordered sequence of states when being stopped, although !!! warning "`FAILED` is a terminal state" If a deployment reaches the `FAILED` state, it cannot recover on its own. You must stop and restart the deployment to attempt recovery. -## GUI +## Web UI ### Step 1: Inspect deployment status @@ -106,14 +106,14 @@ To access the OpenSearch Dashboards, click on the `See logs` button at the top o Once in the OpenSearch Dashboards, you can search for keywords, apply multiple filters and sort the records by timestamp. -??? info "Show available filters" +??? info "Available filters" - | Filter | Description | - | -------------- | -------------------------------------------------------------------------------------------------------- | - | component | Name of the deployment component | - | container_name | Name of the container within a component | - | serving_name | Name of the deployment | - | timestamp | Timestamp when the record was reported | + | Filter | Description | + | -------------- | ---------------------------------------- | + | component | Name of the deployment component | + | container_name | Name of the container within a component | + | serving_name | Name of the deployment | + | timestamp | Timestamp when the record was reported | ## Code From ecd0d7312d8a0928e6eccf68e44099444487fb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Wed, 11 Mar 2026 17:00:56 +0100 Subject: [PATCH 20/54] Fix trailing space --- docs/user_guides/mlops/serving/autoscaling.md | 2 +- docs/user_guides/mlops/serving/scheduling.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index 7104db55c6..3d3ec59356 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -4,7 +4,7 @@ This guide explains how to set up **autoscaling** for model deployments using either the [web UI](#web-ui) or the [Python API](#code). -Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. Autoscaling enables the deployment to use resources more efficiently, by growing and shrinking the allocated resources according to its actual, real-time usage. +Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. Autoscaling enables the deployment to use resources more efficiently, by growing and shrinking the allocated resources according to its actual, real-time usage. See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available scaling options. diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index 5e15eb419f..4f88ce3823 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -6,7 +6,7 @@ description: Documentation on how to configure scheduling options for a model de ## Introduction -Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. +Scheduling configuration determines how and where your model deployment pods are placed in the Kubernetes cluster. Hopsworks supports Kubernetes scheduler abstractions such as [node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity), [anti-affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity), and [priority classes](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), as well as advanced scheduling with [Kueue queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) and [topologies](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/). !!! tip "Scheduling available for all workloads" From 10bfd8d72ea7e3d13f4109ee21e49e8533ae68bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:48:38 +0100 Subject: [PATCH 21/54] Update docs/concepts/mlops/serving.md Co-authored-by: Aleksey Veresov --- docs/concepts/mlops/serving.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/concepts/mlops/serving.md b/docs/concepts/mlops/serving.md index 5eae308492..be8168c033 100644 --- a/docs/concepts/mlops/serving.md +++ b/docs/concepts/mlops/serving.md @@ -23,7 +23,8 @@ A KServe model deployment can include the following components: **`Istio Model Endpoint`** : You can publish a model over REST(HTTP) or gRPC using a Hopsworks API key, accessible via **path-based routing** through Istio. - API keys have scopes to ensure the principle of least privilege access control to resources managed by Hopsworks. For more details on path-based routing of requests through Istio, see [REST API Guide](../../user_guides/mlops/serving/rest-api.md). + API keys have scopes to ensure the principle of least privilege access control to resources managed by Hopsworks. + For more details on path-based routing of requests through Istio, see [REST API Guide](../../user_guides/mlops/serving/rest-api.md). !!! warning "Host-based routing" The Istio Model Endpoint supports host-based routing for inference requests; however, this approach is considered legacy. From 5d72a72248c9ce9a5f21feab5ca165aca058335f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:48:49 +0100 Subject: [PATCH 22/54] Update docs/user_guides/mlops/serving/external-access.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/external-access.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/external-access.md b/docs/user_guides/mlops/serving/external-access.md index c3322745ff..3de74a3941 100644 --- a/docs/user_guides/mlops/serving/external-access.md +++ b/docs/user_guides/mlops/serving/external-access.md @@ -116,7 +116,9 @@ You can create API keys to authenticate your inference requests by clicking on t ### Step 4: Send inference requests -The URI path for sending inference requests depends on the type of model deployment. For example, LLM deployments typically use `/chat/completions`, while traditional model deployments use `/predict`. You can find the exact URI path for each deployment on its model deployment card. +The URI path for sending inference requests depends on the type of model deployment. +For example, LLM deployments typically use `/chat/completions`, while traditional model deployments use `/predict`. +You can find the exact URI path for each deployment on its model deployment card. For detailed instructions on constructing requests and handling authentication, refer to the [REST API Guide](rest-api.md). From c8fb64e0e8006e977d53e5261fcc0b957c6b6ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:49:03 +0100 Subject: [PATCH 23/54] Update docs/user_guides/mlops/serving/resources.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/resources.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/resources.md b/docs/user_guides/mlops/serving/resources.md index 06c0f44074..76fe452a52 100644 --- a/docs/user_guides/mlops/serving/resources.md +++ b/docs/user_guides/mlops/serving/resources.md @@ -18,7 +18,8 @@ Resource allocation can be configured ==per component== (predictor and transform | Shared Memory (MB) | 128 | — | — | !!! tip "Automatic downscale of inactive instances" - Setting the number of instances to **0** for a component (predictor or transformer) enables **scale-to-zero**. This means that all instances of the component will automatically scale down to zero after a default period of inactivity of 30 seconds. + Setting the number of instances to **0** for a component (predictor or transformer) enables **scale-to-zero**. + This means that all instances of the component will automatically scale down to zero after a default period of inactivity of 30 seconds. ## Web UI From 3a1176dc9e2903f573ea5bfd979e3435082bb242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:49:13 +0100 Subject: [PATCH 24/54] Update docs/user_guides/mlops/serving/resources.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/resources.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/resources.md b/docs/user_guides/mlops/serving/resources.md index 76fe452a52..2be10d59eb 100644 --- a/docs/user_guides/mlops/serving/resources.md +++ b/docs/user_guides/mlops/serving/resources.md @@ -6,7 +6,8 @@ description: Documentation on how to allocate resources to a model deployment ## Introduction -Resource allocation can be configured ==per component== (predictor and transformer) in a deployment, allowing you to specify how many CPUs, GPUs, and memory are allocated. For each component, you can set minimum (requests) and maximum (limits) resources, as well as the number of instances. +Resource allocation can be configured ==per component== (predictor and transformer) in a deployment, allowing you to specify how many CPUs, GPUs, and memory are allocated. +For each component, you can set minimum (requests) and maximum (limits) resources, as well as the number of instances. ??? info "Resource defaults" From 281a6abe3021900a113d313af5521e939095b89c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:49:22 +0100 Subject: [PATCH 25/54] Update docs/user_guides/mlops/serving/scheduling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/scheduling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index 4f88ce3823..c1b62d2d56 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -43,7 +43,8 @@ To navigate to the advanced creation form, click on `Advanced options`. ### Step 3: Configure scheduling -In the advanced creation form, go to the **Scheduler** section to set up scheduling options for your deployment. Here, you can specify [affinity, anti-affinity, and priority classes](#affinity-anti-affinity-and-priority-classes) to control how your deployment pods are scheduled within the cluster. +In the advanced creation form, go to the **Scheduler** section to set up scheduling options for your deployment. +Here, you can specify [affinity, anti-affinity, and priority classes](#affinity-anti-affinity-and-priority-classes) to control how your deployment pods are scheduled within the cluster.

From 666ec3e977fe5824c23d1379e91a60b5c2537750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:49:30 +0100 Subject: [PATCH 26/54] Update docs/user_guides/mlops/serving/scheduling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/scheduling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index c1b62d2d56..004c41a019 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -77,7 +77,8 @@ You can configure [node affinity](https://kubernetes.io/docs/concepts/scheduling - **Affinity**: Constrains which nodes the deployment pods can run on based on node labels (e.g., GPU nodes, specific zones). - **Anti-Affinity**: Prevents pods from running on nodes with specific labels. -- **Priority Class**: Determines the scheduling and eviction priority of pods. Higher priority pods are scheduled first and can preempt lower priority pods. +- **Priority Class**: Determines the scheduling and eviction priority of pods. + Higher priority pods are scheduled first and can preempt lower priority pods. ## Queues and Topologies From bd3644503d688e219d3d20a316872c2189641fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:49:39 +0100 Subject: [PATCH 27/54] Update docs/user_guides/mlops/serving/transformer.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/transformer.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index bdd77affd9..1cc78fe1d9 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -13,7 +13,8 @@ Transformer scripts are used to apply transformations on the model inputs before !!! info "Transformer scripts are not supported in vLLM deployments." !!! tip "Independent scaling" - The transformer has independent resources and autoscaling configuration from the predictor. This allows you to scale the pre/post-processing separately from the model inference. + The transformer has independent resources and autoscaling configuration from the predictor. + This allows you to scale the pre/post-processing separately from the model inference. A transformer has the following configurable components: From 019c2fe2ebc6667a419c78e98a8507afc6cded4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:50:57 +0100 Subject: [PATCH 28/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index cc73c213b5..5df7b59872 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -49,7 +49,8 @@ Choose a name for your Python deployment. Then, provide the script for you Pytho Python deployments run the scripts in one of the [Python Environments](../../projects/python/python_env_overview.md) available in your project. This environment must have all the necessary dependencies for your Python program. -Hopsworks provide a collection of built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. By default, the `pandas-inference-pipeline` Python environment is used in Python deployments. +Hopsworks provide a collection of built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. +By default, the `pandas-inference-pipeline` Python environment is used in Python deployments. To create your own environment it is recommended to [clone](../../projects/python/python_env_clone.md) the `minimal-inference-pipeline` or `pandas-inference-pipeline` environment and install additional dependencies needed for your Python program. From e5e0e41a18e199bb6ef3a480cddde2670ed2b45d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:51:06 +0100 Subject: [PATCH 29/54] Update docs/user_guides/mlops/serving/scheduling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/scheduling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index 004c41a019..4458a485ba 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -87,7 +87,8 @@ You can configure [node affinity](https://kubernetes.io/docs/concepts/scheduling If the cluster has Kueue enabled, you can select a queue for your deployment. [Queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) control resource allocation and scheduling priority across the cluster. Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. -You can also select a [topology](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/) unit to control how deployment pods are co-located. For example, you can require all pods to run on the same host to minimize network latency. +You can also select a [topology](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/) unit to control how deployment pods are co-located. +For example, you can require all pods to run on the same host to minimize network latency. ## Learn more From 6fd88e954dc18604316ad51021c7120aa68be87d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:51:15 +0100 Subject: [PATCH 30/54] Update docs/user_guides/mlops/serving/transformer.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/transformer.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index 1cc78fe1d9..f1936f51e6 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -8,7 +8,8 @@ description: Documentation on how to configure a KServe transformer for a model In this guide, you will learn how to configure a transformer script in a model deployment. -Transformer scripts are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. They are user-provided Python scripts (`.py` or `.ipynb`) implementing the [Transformer class](#step-2-implement-transformer-script). +Transformer scripts are used to apply transformations on the model inputs before sending them to the predictor for making predictions using the model. +They are user-provided Python scripts (`.py` or `.ipynb`) implementing the [Transformer class](#step-2-implement-transformer-script). !!! info "Transformer scripts are not supported in vLLM deployments." From b70649310b512faf7a8c2feaf7322191b25a9d6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:51:23 +0100 Subject: [PATCH 31/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index 5df7b59872..902ad8a2ba 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -199,7 +199,8 @@ A number of different environment variables is available in the Python deploymen ## Python environments Python deployments run in one of the `*-inference-pipeline` Python environments available in your project. -Hopsworks provides built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. By default, the `pandas-inference-pipeline` environment is used. +Hopsworks provides built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. +By default, the `pandas-inference-pipeline` environment is used. To create your own environment, it is recommended to [clone](../../projects/python/python_env_clone.md) the `minimal-inference-pipeline` or `pandas-inference-pipeline` environment and install additional dependencies needed for your Python program. To learn more about Python environments, see [Python Environments](../../projects/python/python_env_overview.md). From b4e126280a12bd49aee51d971ac91f977b5a73e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:51:34 +0100 Subject: [PATCH 32/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index 902ad8a2ba..c6ee13aa88 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -213,7 +213,8 @@ For full details on resource configuration, see the [Resources Guide](../../mlop ## Autoscaling -Deployments use **Knative Pod Autoscaler (KPA)** to automatically scale the number of replicas based on traffic. You can configure the minimum and maximum number of instances as well as the scale metric (requests per second or concurrency). +Deployments use **Knative Pod Autoscaler (KPA)** to automatically scale the number of replicas based on traffic. +You can configure the minimum and maximum number of instances as well as the scale metric (requests per second or concurrency). For full details on autoscaling parameters, see the [Autoscaling Guide](../../mlops/serving/autoscaling.md). From c6b2c63c0539e93787a874014c501521f20da5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:51:43 +0100 Subject: [PATCH 33/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index c6ee13aa88..c582504ec2 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -221,7 +221,8 @@ For full details on autoscaling parameters, see the [Autoscaling Guide](../../ml ## Scheduling !!! info "Kueue is required" - This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + This feature requires Kueue to be enabled in your cluster. + If Kueue is not available, queue and topology options will not be accessible. If the cluster has Kueue enabled, you can select a queue for your deployment from the advanced configuration. Queues control resource allocation and scheduling priority across the cluster. From 2e35129d133657a5a15ba017a4a9a6ca3e9fa5c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:51:50 +0100 Subject: [PATCH 34/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index c582504ec2..d7770c20be 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -207,7 +207,8 @@ To learn more about Python environments, see [Python Environments](../../project ## Resources -Configure CPU, memory, and GPU allocation for your Python deployment. Each deployment component has separate request and limit values. +Configure CPU, memory, and GPU allocation for your Python deployment. +Each deployment component has separate request and limit values. For full details on resource configuration, see the [Resources Guide](../../mlops/serving/resources.md). From b2a6499cd36afd29b841c97ef4e9a8d7cb5c906b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:52:05 +0100 Subject: [PATCH 35/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index d7770c20be..cc8d73e6ad 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -47,7 +47,8 @@ Choose a name for your Python deployment. Then, provide the script for you Pytho ### Step 3 (Optional): Change Python environment -Python deployments run the scripts in one of the [Python Environments](../../projects/python/python_env_overview.md) available in your project. This environment must have all the necessary dependencies for your Python program. +Python deployments run the scripts in one of the [Python Environments](../../projects/python/python_env_overview.md) available in your project. +This environment must have all the necessary dependencies for your Python program. Hopsworks provide a collection of built-in environments like `minimal-inference-pipeline`, `pandas-inference-pipeline` or `torch-inference-pipeline` with different sets of libraries pre-installed. By default, the `pandas-inference-pipeline` Python environment is used in Python deployments. From 6d5fd683661f2f933bca458b70302df02ce50b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:52:12 +0100 Subject: [PATCH 36/54] Update docs/user_guides/projects/python-deployment/rest-api.md Co-authored-by: Aleksey Veresov --- docs/user_guides/projects/python-deployment/rest-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/rest-api.md b/docs/user_guides/projects/python-deployment/rest-api.md index 4804cc6749..e28b35cdb6 100644 --- a/docs/user_guides/projects/python-deployment/rest-api.md +++ b/docs/user_guides/projects/python-deployment/rest-api.md @@ -15,7 +15,8 @@ This document explains how to send requests to a Python deployment. ## Sending Requests through Istio Ingress -The full URL path is constructed by combining a base path with a resource path available in the Python server. See [URL Paths](#url-paths) for the complete URL format and examples. +The full URL path is constructed by combining a base path with a resource path available in the Python server. +See [URL Paths](#url-paths) for the complete URL format and examples. ### Authentication From 26de22cadf9e1560264f03d05d093b93ffba9161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:52:24 +0100 Subject: [PATCH 37/54] Update docs/user_guides/projects/python-deployment/rest-api.md Co-authored-by: Aleksey Veresov --- docs/user_guides/projects/python-deployment/rest-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/rest-api.md b/docs/user_guides/projects/python-deployment/rest-api.md index e28b35cdb6..bd579ca5a7 100644 --- a/docs/user_guides/projects/python-deployment/rest-api.md +++ b/docs/user_guides/projects/python-deployment/rest-api.md @@ -74,7 +74,8 @@ The base URL is composed of the **Istio ingress gateway IP**, the **project name ## Request Format -The request format depends entirely on your Python server implementation. There are no framework or protocol constraints — your server defines the expected HTTP methods, paths, and payload format. +The request format depends entirely on your Python server implementation. +There are no framework or protocol constraints — your server defines the expected HTTP methods, paths, and payload format. !!! example "REST API example" === "Python" From 0c567b1c2a0e645440cf7922bbc52d1e870caf57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:52:32 +0100 Subject: [PATCH 38/54] Update docs/user_guides/projects/python-deployment/troubleshooting.md Co-authored-by: Aleksey Veresov --- docs/user_guides/projects/python-deployment/troubleshooting.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/troubleshooting.md b/docs/user_guides/projects/python-deployment/troubleshooting.md index cf962a1b0c..06af2c46b4 100644 --- a/docs/user_guides/projects/python-deployment/troubleshooting.md +++ b/docs/user_guides/projects/python-deployment/troubleshooting.md @@ -14,7 +14,8 @@ When a deployment is starting, it follows an ordered sequence of [states](../../ Similarly, it follows an ordered sequence of states when being stopped, although with fewer steps. !!! warning "`FAILED` is a terminal state" - If a deployment reaches the `FAILED` state, it cannot recover on its own. You must stop and restart the deployment to attempt recovery. + If a deployment reaches the `FAILED` state, it cannot recover on its own. + You must stop and restart the deployment to attempt recovery. ## Web UI From 50f9b68aae18a122631f6d1b107e70d4c4a77ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:52:40 +0100 Subject: [PATCH 39/54] Update docs/user_guides/projects/python-deployment/rest-api.md Co-authored-by: Aleksey Veresov --- docs/user_guides/projects/python-deployment/rest-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/rest-api.md b/docs/user_guides/projects/python-deployment/rest-api.md index bd579ca5a7..89e8487f79 100644 --- a/docs/user_guides/projects/python-deployment/rest-api.md +++ b/docs/user_guides/projects/python-deployment/rest-api.md @@ -38,7 +38,8 @@ authorization: ApiKey ## URL Paths -Python deployments are accessible through the ==Istio ingress gateway== using **path-based** routing. The full URL is constructed by combining the base URL with the paths defined in your Python server. +Python deployments are accessible through the ==Istio ingress gateway== using **path-based** routing. +The full URL is constructed by combining the base URL with the paths defined in your Python server. !!! example "" **`/`** From 29e95ccd9e88af1c90837e07454911b75819242e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:52:49 +0100 Subject: [PATCH 40/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index cc8d73e6ad..f21c6eb604 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -226,6 +226,7 @@ For full details on autoscaling parameters, see the [Autoscaling Guide](../../ml This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. -If the cluster has Kueue enabled, you can select a queue for your deployment from the advanced configuration. Queues control resource allocation and scheduling priority across the cluster. +If the cluster has Kueue enabled, you can select a queue for your deployment from the advanced configuration. +Queues control resource allocation and scheduling priority across the cluster. For full details on scheduling configuration, see the [Scheduling Guide](../../mlops/serving/scheduling.md). From 769c89dfc4dc341f92f733f3e07fc9949eee4091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:53:16 +0100 Subject: [PATCH 41/54] Update docs/user_guides/projects/python-deployment/rest-api.md Co-authored-by: Aleksey Veresov --- docs/user_guides/projects/python-deployment/rest-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/rest-api.md b/docs/user_guides/projects/python-deployment/rest-api.md index 89e8487f79..9ab0d004b4 100644 --- a/docs/user_guides/projects/python-deployment/rest-api.md +++ b/docs/user_guides/projects/python-deployment/rest-api.md @@ -101,7 +101,8 @@ There are no framework or protocol constraints — your server defines the expec ## CORS -The Istio EnvoyFilter handles CORS preflight (`OPTIONS`) requests automatically. Allowed origins can be configured via `istio.envoyFilter.corsAllowedOrigins` in the Helm chart configuration. +The Istio EnvoyFilter handles CORS preflight (`OPTIONS`) requests automatically. +Allowed origins can be configured via `istio.envoyFilter.corsAllowedOrigins` in the Helm chart configuration. ## Response From 81439d9ce6f5549e157b74acfe7e30a861ab558e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:53:49 +0100 Subject: [PATCH 42/54] Update docs/user_guides/mlops/serving/autoscaling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/autoscaling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index 3d3ec59356..f1f9f9764a 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -4,7 +4,8 @@ This guide explains how to set up **autoscaling** for model deployments using either the [web UI](#web-ui) or the [Python API](#code). -Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. Autoscaling enables the deployment to use resources more efficiently, by growing and shrinking the allocated resources according to its actual, real-time usage. +Deployments use [Knative Pod Autoscaler (KPA)](https://knative.dev/docs/serving/autoscaling/) to automatically scale the number of replicas based on traffic. +Autoscaling enables the deployment to use resources more efficiently, by growing and shrinking the allocated resources according to its actual, real-time usage. See [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) for details on the available scaling options. From f9083a0b7ccbe6e05bba8582d67433562977f90f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:54:03 +0100 Subject: [PATCH 43/54] Update docs/user_guides/mlops/serving/autoscaling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/autoscaling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index f1f9f9764a..a1e24b853e 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -72,7 +72,8 @@ Once you are done with the changes, click on `Create new deployment` at the bott ### Step 2: Define the predictor scaling configuration -You can use the [`PredictorScalingConfig`][hsml.scaling_config.PredictorScalingConfig] class to configure the scaling options according to your preferences. Default values for scaling metrics and parameters are listed in the [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) sections above. +You can use the [`PredictorScalingConfig`][hsml.scaling_config.PredictorScalingConfig] class to configure the scaling options according to your preferences. +Default values for scaling metrics and parameters are listed in the [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) sections above. === "Python" From b35c0a43b43c93f0d55bfd5742cad5c82bd60d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:54:15 +0100 Subject: [PATCH 44/54] Update docs/user_guides/mlops/serving/autoscaling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/autoscaling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index a1e24b853e..9a4a5f12cb 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -87,7 +87,8 @@ Default values for scaling metrics and parameters are listed in the [Scale metri ### Step 3 (Optional): Define the transformer scaling configuration -If a transformer script is also provided, you can use the [`TransformerScalingConfig`][hsml.scaling_config.TransformerScalingConfig] class to configure the scaling options according to your preferences. Default values for scaling metrics and parameters are listed in the [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) sections above. +If a transformer script is also provided, you can use the [`TransformerScalingConfig`][hsml.scaling_config.TransformerScalingConfig] class to configure the scaling options according to your preferences. +Default values for scaling metrics and parameters are listed in the [Scale metrics](#scale-metrics) and [Scaling parameters](#scaling-parameters) sections above. === "Python" From 048aac6e004d3a8967926fcb06fce922616f4d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:54:29 +0100 Subject: [PATCH 45/54] Update docs/user_guides/mlops/serving/autoscaling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/autoscaling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index 9a4a5f12cb..b4670a69f9 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -137,7 +137,8 @@ The autoscaler supports two metrics to determine when to scale. See [Knative aut ## Scaling parameters -The following parameters can be used to fine-tune the autoscaling behavior. See [scale bounds](https://knative.dev/docs/serving/autoscaling/scale-bounds/), [autoscaling concepts](https://knative.dev/docs/serving/autoscaling/autoscaling-concepts/) and [scale-to-zero](https://knative.dev/docs/serving/autoscaling/scale-to-zero/) in the Knative documentation for more details. +The following parameters can be used to fine-tune the autoscaling behavior. +See [scale bounds](https://knative.dev/docs/serving/autoscaling/scale-bounds/), [autoscaling concepts](https://knative.dev/docs/serving/autoscaling/autoscaling-concepts/) and [scale-to-zero](https://knative.dev/docs/serving/autoscaling/scale-to-zero/) in the Knative documentation for more details. | Parameter | Default | Range | Description | | ----------------------------- | ------- | ------ | ------------------------------------------- | From 6011e45be4e2cbab8f88b374905649e8e9e0c606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:54:40 +0100 Subject: [PATCH 46/54] Update docs/user_guides/mlops/serving/autoscaling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/autoscaling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/autoscaling.md b/docs/user_guides/mlops/serving/autoscaling.md index b4670a69f9..28cad9b653 100644 --- a/docs/user_guides/mlops/serving/autoscaling.md +++ b/docs/user_guides/mlops/serving/autoscaling.md @@ -128,7 +128,8 @@ Default values for scaling metrics and parameters are listed in the [Scale metri ## Scale metrics -The autoscaler supports two metrics to determine when to scale. See [Knative autoscaling metrics](https://knative.dev/docs/serving/autoscaling/autoscaling-metrics/) for more details. +The autoscaler supports two metrics to determine when to scale. +See [Knative autoscaling metrics](https://knative.dev/docs/serving/autoscaling/autoscaling-metrics/) for more details. | Scale Metric | Default Target | Description | | ------------ | -------------- | ------------------------------- | From 550f50c3552bdb443191cda0041c2e720b6385da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:54:54 +0100 Subject: [PATCH 47/54] Update docs/user_guides/mlops/serving/rest-api.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/rest-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/rest-api.md b/docs/user_guides/mlops/serving/rest-api.md index 66b13cd26c..a02376b9d8 100644 --- a/docs/user_guides/mlops/serving/rest-api.md +++ b/docs/user_guides/mlops/serving/rest-api.md @@ -11,7 +11,8 @@ This document explains how to interact with a model deployment via REST API. ## Sending Inference Requests through Istio Ingress -The full inference URL is constructed by combining a base path with a model server-specific suffix. See [URL Paths](#url-paths) for the complete URL format and examples. +The full inference URL is constructed by combining a base path with a model server-specific suffix. +See [URL Paths](#url-paths) for the complete URL format and examples. ### Authentication From 1b5dc342cd70a10213f02ce7fbf034474896f791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:55:05 +0100 Subject: [PATCH 48/54] Update docs/user_guides/mlops/serving/rest-api.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/rest-api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/rest-api.md b/docs/user_guides/mlops/serving/rest-api.md index a02376b9d8..bc3726add2 100644 --- a/docs/user_guides/mlops/serving/rest-api.md +++ b/docs/user_guides/mlops/serving/rest-api.md @@ -34,7 +34,8 @@ authorization: ApiKey ## URL Paths -Deployed models are accessible through the ==Istio ingress gateway== using **path-based** routing. The full URL is constructed by combining the base path with a model server-specific suffix. +Deployed models are accessible through the ==Istio ingress gateway== using **path-based** routing. +The full URL is constructed by combining the base path with a model server-specific suffix. This URL is also provided on the model deployment page in the Hopsworks UI. !!! example "" From 8aebbeb66a12f2e4b14f06a7789d495ffa39a539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:55:17 +0100 Subject: [PATCH 49/54] Update docs/user_guides/mlops/serving/scheduling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/scheduling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index 4458a485ba..cfe0d9a88d 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -83,7 +83,8 @@ You can configure [node affinity](https://kubernetes.io/docs/concepts/scheduling ## Queues and Topologies !!! warning "Kueue is required" - This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. + This feature requires Kueue to be enabled in your cluster. + If Kueue is not available, queue and topology options will not be accessible. If the cluster has Kueue enabled, you can select a queue for your deployment. [Queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) control resource allocation and scheduling priority across the cluster. Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. From 9a03246068870da5df39d06b824160d557369df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:55:32 +0100 Subject: [PATCH 50/54] Update docs/user_guides/mlops/serving/scheduling.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/scheduling.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/scheduling.md b/docs/user_guides/mlops/serving/scheduling.md index cfe0d9a88d..074a1e6148 100644 --- a/docs/user_guides/mlops/serving/scheduling.md +++ b/docs/user_guides/mlops/serving/scheduling.md @@ -86,7 +86,9 @@ You can configure [node affinity](https://kubernetes.io/docs/concepts/scheduling This feature requires Kueue to be enabled in your cluster. If Kueue is not available, queue and topology options will not be accessible. -If the cluster has Kueue enabled, you can select a queue for your deployment. [Queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) control resource allocation and scheduling priority across the cluster. Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. +If the cluster has Kueue enabled, you can select a queue for your deployment. +[Queues](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) control resource allocation and scheduling priority across the cluster. +Administrators define quotas on how many resources a queue can use, and queues can be grouped in cohorts to borrow resources from each other. You can also select a [topology](https://kueue.sigs.k8s.io/docs/concepts/topology_aware_scheduling/) unit to control how deployment pods are co-located. For example, you can require all pods to run on the same host to minimize network latency. From 1f0ed83fa55168664328b1d2609eadad1adc8f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:56:18 +0100 Subject: [PATCH 51/54] Update docs/user_guides/projects/python-deployment/python-deployment.md Co-authored-by: Aleksey Veresov --- .../projects/python-deployment/python-deployment.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/projects/python-deployment/python-deployment.md b/docs/user_guides/projects/python-deployment/python-deployment.md index f21c6eb604..f6b23a2d7d 100644 --- a/docs/user_guides/projects/python-deployment/python-deployment.md +++ b/docs/user_guides/projects/python-deployment/python-deployment.md @@ -43,7 +43,8 @@ Then, click on `New Python deployment`. ### Step 2: Configure the deployment -Choose a name for your Python deployment. Then, provide the script for you Python program by clicking on `From project` or `Upload new file`. +Choose a name for your Python deployment. +Then, provide the script for you Python program by clicking on `From project` or `Upload new file`. ### Step 3 (Optional): Change Python environment From d3cccd04e57961514d3ea55a87bb5d960c0d5118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:56:52 +0100 Subject: [PATCH 52/54] Update docs/user_guides/mlops/serving/transformer.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/transformer.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index f1936f51e6..a0ab411269 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -197,7 +197,9 @@ Use the `transformer` parameter to set the transformer configuration when creati ## Transformer script -A transformer script is a custom Python script to apply pre/post-processing on the model inputs and outputs. This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. The script must implement the `Transformer` class, as shown in [Step 2](#step-2-implement-transformer-script). +A transformer script is a custom Python script to apply pre/post-processing on the model inputs and outputs. +This script is included in the [artifact files](../serving/deployment.md#artifact-files) of the deployment. +The script must implement the `Transformer` class, as shown in [Step 2](#step-2-implement-transformer-script). !!! info "Transformer scripts are not supported in vLLM deployments." From 92613f4ccab927ffc6ca07dc81e2eceedfabaebb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:57:06 +0100 Subject: [PATCH 53/54] Update docs/user_guides/mlops/serving/transformer.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/transformer.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index a0ab411269..90f9e8a0b7 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -211,7 +211,8 @@ To learn about the different combinations available, see the [Resources Guide](r ## Autoscaling -The transformer has independent autoscaling from the predictor. Deployments use Knative Pod Autoscaler (KPA) to automatically scale the number of replicas based on traffic, including scale-to-zero. +The transformer has independent autoscaling from the predictor. +Deployments use Knative Pod Autoscaler (KPA) to automatically scale the number of replicas based on traffic, including scale-to-zero. To learn about the different autoscaling parameters, see the [Autoscaling Guide](autoscaling.md). From 60fa9dc903c6fd4b66ea4c5459a78e7c170af300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20de=20la=20R=C3=BAa=20Mart=C3=ADnez?= Date: Thu, 12 Mar 2026 10:57:39 +0100 Subject: [PATCH 54/54] Update docs/user_guides/mlops/serving/transformer.md Co-authored-by: Aleksey Veresov --- docs/user_guides/mlops/serving/transformer.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user_guides/mlops/serving/transformer.md b/docs/user_guides/mlops/serving/transformer.md index 90f9e8a0b7..463880a5c5 100644 --- a/docs/user_guides/mlops/serving/transformer.md +++ b/docs/user_guides/mlops/serving/transformer.md @@ -269,7 +269,8 @@ A number of different environment variables is available in the transformer to e ## Python environments -Transformer scripts always run on `*-inference-pipeline` Python environments. To create a new Python environment see [Python Environments](../../projects/python/python_env_overview.md). +Transformer scripts always run on `*-inference-pipeline` Python environments. +To create a new Python environment see [Python Environments](../../projects/python/python_env_overview.md). !!! note For **Python model deployments**, the same Python environment is used for both predictor and transformer.