From 2f145d8590ef9651ce6de48a672201048e715bad Mon Sep 17 00:00:00 2001 From: Sanskriti Date: Thu, 13 Jun 2024 09:35:57 +0000 Subject: [PATCH 1/6] updated docs --- docs/book/stacks/aws.md | 2 +- docs/book/stacks/gcp.md | 2 +- docs/book/stacks/k3d.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/book/stacks/aws.md b/docs/book/stacks/aws.md index 8088527d..999dd614 100644 --- a/docs/book/stacks/aws.md +++ b/docs/book/stacks/aws.md @@ -16,7 +16,7 @@ as can a list of components that are coming soon. | Experiment Tracker | mlflow | | Orchestrator | kubeflow, kubernetes, sagemaker, skypilot, tekton | | MLOps Platform | zenml | -| Model Deployer | seldon | +| Model Deployer | seldon, huggingface | | Step Operator | sagemaker | ## Coming Soon! diff --git a/docs/book/stacks/gcp.md b/docs/book/stacks/gcp.md index 396032e6..4b6d7269 100644 --- a/docs/book/stacks/gcp.md +++ b/docs/book/stacks/gcp.md @@ -22,7 +22,7 @@ and cannot be created without one. | Experiment Tracker | mlflow | | Orchestrator | kubeflow, kubernetes, skypilot, tekton, vertex | | MLOps Platform | zenml | -| Model Deployer | seldon | +| Model Deployer | seldon, huggingface | | Step Operator | vertex | ## Coming Soon! diff --git a/docs/book/stacks/k3d.md b/docs/book/stacks/k3d.md index e05032d5..d2753baa 100644 --- a/docs/book/stacks/k3d.md +++ b/docs/book/stacks/k3d.md @@ -16,7 +16,7 @@ as can a list of components that are coming soon. | Experiment Tracker | mlflow | | Orchestrator | kubeflow, kubernetes, sagemaker, tekton | | MLOps Platform | zenml | -| Model Deployer | seldon | +| Model Deployer | seldon, huggingface | ## Coming Soon! From 77acb2047f3c26545e43b664961cc9856351db27 Mon Sep 17 00:00:00 2001 From: Sanskriti Date: Thu, 13 Jun 2024 09:39:55 +0000 Subject: [PATCH 2/6] defined interfaces --- src/mlstacks/constants.py | 2 +- src/mlstacks/enums.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mlstacks/constants.py b/src/mlstacks/constants.py index 3b88745b..093f981b 100644 --- a/src/mlstacks/constants.py +++ b/src/mlstacks/constants.py @@ -38,7 +38,7 @@ "vertex", ], "mlops_platform": ["zenml"], - "model_deployer": ["seldon"], + "model_deployer": ["seldon","huggingface"], "step_operator": ["sagemaker", "vertex"], } ALLOWED_COMPONENT_TYPES: Dict[str, Dict[str, List[str]]] = { diff --git a/src/mlstacks/enums.py b/src/mlstacks/enums.py index 122e2806..1458956a 100644 --- a/src/mlstacks/enums.py +++ b/src/mlstacks/enums.py @@ -31,6 +31,7 @@ class ComponentTypeEnum(str, Enum): FEATURE_STORE = "feature_store" ANNOTATOR = "annotator" IMAGE_BUILDER = "image_builder" + class ComponentFlavorEnum(str, Enum): @@ -50,6 +51,7 @@ class ComponentFlavorEnum(str, Enum): VERTEX = "vertex" ZENML = "zenml" DEFAULT = "default" + HUGGINGFACE = "huggingface" class DeploymentMethodEnum(str, Enum): From 1eca04143d78e3002e04659b27a04b3d5ca7e62a Mon Sep 17 00:00:00 2001 From: Sanskriti Date: Thu, 13 Jun 2024 11:01:50 +0000 Subject: [PATCH 3/6] updated aws-modular recipe for huggingface deployment --- src/mlstacks/terraform/aws-modular/eks.tf | 2 +- src/mlstacks/terraform/aws-modular/istio.tf | 2 +- src/mlstacks/terraform/aws-modular/locals.tf | 8 +++++++ .../terraform/aws-modular/output_file.tf | 7 ++++++ src/mlstacks/terraform/aws-modular/outputs.tf | 22 ++++++++++++++++--- .../terraform/aws-modular/variables.tf | 4 ++++ 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/mlstacks/terraform/aws-modular/eks.tf b/src/mlstacks/terraform/aws-modular/eks.tf index e1d4f79f..ad23b147 100644 --- a/src/mlstacks/terraform/aws-modular/eks.tf +++ b/src/mlstacks/terraform/aws-modular/eks.tf @@ -1,7 +1,7 @@ # eks module to create a cluster # newer versions of it had some error so going with v17.23.0 for now locals { - enable_eks = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + enable_eks = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || var.enable_model_deployer_seldon || var.enable_model_deployer_huggingface || var.enable_experiment_tracker_mlflow || var.enable_zenml) } diff --git a/src/mlstacks/terraform/aws-modular/istio.tf b/src/mlstacks/terraform/aws-modular/istio.tf index ca4f68e2..b4ff4d76 100644 --- a/src/mlstacks/terraform/aws-modular/istio.tf +++ b/src/mlstacks/terraform/aws-modular/istio.tf @@ -1,7 +1,7 @@ module "istio" { source = "../modules/istio-module" - count = (var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? 1 : 0 depends_on = [ aws_eks_cluster.cluster, diff --git a/src/mlstacks/terraform/aws-modular/locals.tf b/src/mlstacks/terraform/aws-modular/locals.tf index fffb02a9..53680d70 100644 --- a/src/mlstacks/terraform/aws-modular/locals.tf +++ b/src/mlstacks/terraform/aws-modular/locals.tf @@ -64,6 +64,14 @@ locals { namespace = "seldon-system" workloads_namespace = "zenml-workloads-seldon" service_account_name = "seldon" + } + + huggingface = { + version = "4.41.3" + name = "huggingface" + namespace = "huggingface-system" + workloads_namespace = "zenml-workloads-huggingface" + service_account_name = "huggingface" } zenml = { diff --git a/src/mlstacks/terraform/aws-modular/output_file.tf b/src/mlstacks/terraform/aws-modular/output_file.tf index 3106ef00..c123ec07 100644 --- a/src/mlstacks/terraform/aws-modular/output_file.tf +++ b/src/mlstacks/terraform/aws-modular/output_file.tf @@ -76,6 +76,13 @@ resource "local_file" "stack_file" { flavor: seldon name: eks_seldon_model_deployer configuration: {"kubernetes_context": "${aws_eks_cluster.cluster[0].arn}", "kubernetes_namespace": "${local.seldon.workloads_namespace}", "base_url": "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}"}} +%{endif} +%{if var.enable_model_deployer_huggingface} + model_deployer: + id: ${uuid()} + flavor: huggingface + name: eks_huggingface_model_deployer + configuration: {"kubernetes_context": "${aws_eks_cluster.cluster[0].arn}", "kubernetes_namespace": "${local.huggingface.workloads_namespace}", "base_url": "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}"}} %{endif} ADD filename = "./aws_modular_stack_${replace(substr(timestamp(), 0, 16), ":", "_")}.yaml" diff --git a/src/mlstacks/terraform/aws-modular/outputs.tf b/src/mlstacks/terraform/aws-modular/outputs.tf index b2771fb9..1758418e 100644 --- a/src/mlstacks/terraform/aws-modular/outputs.tf +++ b/src/mlstacks/terraform/aws-modular/outputs.tf @@ -84,18 +84,24 @@ output "experiment_tracker_configuration" { }) : "" } +# if huggingface is enabled, set the model deployer outputs to the huggingface values # if seldon is enabled, set the model deployer outputs to the seldon values # otherwise, set the model deployer outputs to empty strings output "model_deployer_id" { - value = var.enable_model_deployer_seldon ? uuid() : "" + value = var.enable_model_deployer_huggingface ? uuid() : var.enable_model_deployer_seldon ? uuid() : "" } output "model_deployer_flavor" { - value = var.enable_model_deployer_seldon ? "seldon" : "" + value = var.enable_model_deployer_huggingface ? "huggingface" : var.enable_model_deployer_seldon ? "seldon" : "" } output "model_deployer_name" { - value = var.enable_model_deployer_seldon ? "eks_seldon_model_deployer_${random_string.unique.result}" : "" + value = var.enable_model_deployer_huggingface ? "eks_huggingface_model_deployer_${random_string.unique.result}" : var.enable_model_deployer_seldon ? "eks_seldon_model_deployer_${random_string.unique.result}" : "" } output "model_deployer_configuration" { + value = var.enable_model_deployer_huggingface ? jsonencode({ + kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" + kubernetes_namespace = local.huggingface.workloads_namespace + base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" + }) : value = var.enable_model_deployer_seldon ? jsonencode({ kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" kubernetes_namespace = local.seldon.workloads_namespace @@ -162,6 +168,16 @@ output "seldon-base-url" { value = var.enable_model_deployer_seldon ? "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" : null } +# output for huggingface model deployer +output "huggingface-workload-namespace" { + value = var.enable_model_deployer_huggingface ? local.huggingface.workloads_namespace : null + description = "The namespace created for hosting your Huggingface workloads" +} + +output "huggingface-base-url" { + value = var.enable_model_deployer_huggingface ? "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" : null +} + # output the name of the stack YAML file created output "stack-yaml-path" { value = local_file.stack_file.filename diff --git a/src/mlstacks/terraform/aws-modular/variables.tf b/src/mlstacks/terraform/aws-modular/variables.tf index 0bcf927f..0a228872 100644 --- a/src/mlstacks/terraform/aws-modular/variables.tf +++ b/src/mlstacks/terraform/aws-modular/variables.tf @@ -35,6 +35,10 @@ variable "enable_model_deployer_seldon" { description = "Enable Seldon deployment" default = false } +variable "enable_model_deployer_huggingface" { + description = "Enable Huggingface deployment" + default = false +} variable "enable_step_operator_sagemaker" { description = "Enable SageMaker as step operator" default = false From 3f7cac883e5f2011beef44b9c5c7fd5ad7887367 Mon Sep 17 00:00:00 2001 From: Sanskriti Date: Wed, 19 Jun 2024 10:04:23 +0000 Subject: [PATCH 4/6] updated all recipes --- src/mlstacks/terraform/aws-modular/outputs.tf | 2 +- src/mlstacks/terraform/gcp-modular/gke.tf | 16 ++++---- src/mlstacks/terraform/gcp-modular/istio.tf | 2 +- .../terraform/gcp-modular/kubernetes.tf | 6 +-- src/mlstacks/terraform/gcp-modular/locals.tf | 8 ++++ .../terraform/gcp-modular/output_file.tf | 7 ++++ src/mlstacks/terraform/gcp-modular/outputs.tf | 14 +++++-- .../terraform/gcp-modular/variables.tf | 4 ++ src/mlstacks/terraform/gcp-modular/vpc.tf | 2 +- src/mlstacks/terraform/k3d-modular/helm.tf | 8 ++-- src/mlstacks/terraform/k3d-modular/istio.tf | 2 +- src/mlstacks/terraform/k3d-modular/k3d.tf | 4 +- .../terraform/k3d-modular/kubeflow.tf | 4 +- .../terraform/k3d-modular/kubernetes.tf | 16 ++++---- src/mlstacks/terraform/k3d-modular/locals.tf | 8 ++++ src/mlstacks/terraform/k3d-modular/minio.tf | 6 +-- src/mlstacks/terraform/k3d-modular/mlflow.tf | 4 +- .../terraform/k3d-modular/nginx_ingress.tf | 2 +- .../terraform/k3d-modular/output_stack.tf | 2 +- .../k3d-modular/output_test_harness_cfg.tf | 41 +++++++++++++++++++ src/mlstacks/terraform/k3d-modular/outputs.tf | 30 ++++++++++---- src/mlstacks/terraform/k3d-modular/tekton.tf | 4 +- .../terraform/k3d-modular/variables.tf | 10 +++++ 23 files changed, 150 insertions(+), 52 deletions(-) diff --git a/src/mlstacks/terraform/aws-modular/outputs.tf b/src/mlstacks/terraform/aws-modular/outputs.tf index 1758418e..175bf5b9 100644 --- a/src/mlstacks/terraform/aws-modular/outputs.tf +++ b/src/mlstacks/terraform/aws-modular/outputs.tf @@ -102,7 +102,7 @@ output "model_deployer_configuration" { kubernetes_namespace = local.huggingface.workloads_namespace base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" }) : - value = var.enable_model_deployer_seldon ? jsonencode({ + var.enable_model_deployer_seldon ? jsonencode({ kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" kubernetes_namespace = local.seldon.workloads_namespace base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" diff --git a/src/mlstacks/terraform/gcp-modular/gke.tf b/src/mlstacks/terraform/gcp-modular/gke.tf index 64380b13..bac06868 100644 --- a/src/mlstacks/terraform/gcp-modular/gke.tf +++ b/src/mlstacks/terraform/gcp-modular/gke.tf @@ -2,7 +2,7 @@ data "google_client_config" "default" {} # module "gke" { # count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton # || var.enable_orchestrator_kubernetes || -# var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || +# var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || # var.enable_zenml)? 1: 0 # depends_on = [ @@ -64,7 +64,7 @@ data "google_client_config" "default" {} # } locals { enable_gke = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) } @@ -79,7 +79,7 @@ data "external" "get_cluster" { resource "google_container_cluster" "gke" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 name = "${local.prefix}-${local.gke.cluster_name}" @@ -117,7 +117,7 @@ resource "google_container_cluster" "gke" { # service account for GKE nodes resource "google_service_account" "gke-service-account" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 account_id = "${local.prefix}-${local.gke.service_account_name}" project = var.project_id @@ -136,7 +136,7 @@ resource "google_project_iam_binding" "container-registry" { resource "google_project_iam_binding" "secret-manager" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/secretmanager.admin" @@ -148,7 +148,7 @@ resource "google_project_iam_binding" "secret-manager" { resource "google_project_iam_binding" "cloudsql" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/cloudsql.admin" @@ -160,7 +160,7 @@ resource "google_project_iam_binding" "cloudsql" { resource "google_project_iam_binding" "storageadmin" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/storage.admin" @@ -172,7 +172,7 @@ resource "google_project_iam_binding" "storageadmin" { resource "google_project_iam_binding" "vertex-ai-user" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/aiplatform.user" diff --git a/src/mlstacks/terraform/gcp-modular/istio.tf b/src/mlstacks/terraform/gcp-modular/istio.tf index e287721f..dae6c0fb 100644 --- a/src/mlstacks/terraform/gcp-modular/istio.tf +++ b/src/mlstacks/terraform/gcp-modular/istio.tf @@ -1,7 +1,7 @@ module "istio" { source = "../modules/istio-module" - count = (var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? 1 : 0 depends_on = [ google_container_cluster.gke, diff --git a/src/mlstacks/terraform/gcp-modular/kubernetes.tf b/src/mlstacks/terraform/gcp-modular/kubernetes.tf index e0b68f21..2b46fe08 100644 --- a/src/mlstacks/terraform/gcp-modular/kubernetes.tf +++ b/src/mlstacks/terraform/gcp-modular/kubernetes.tf @@ -15,7 +15,7 @@ provider "kubectl" { # the namespace where zenml will run kubernetes orchestrator workloads resource "kubernetes_namespace" "k8s-workloads" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 metadata { name = local.gke.workloads_namespace @@ -28,7 +28,7 @@ resource "kubernetes_namespace" "k8s-workloads" { # tie the kubernetes workloads SA to the GKE service account resource "null_resource" "k8s-sa-workload-access" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 provisioner "local-exec" { command = "kubectl -n ${kubernetes_namespace.k8s-workloads[0].metadata[0].name} annotate serviceaccount default iam.gke.io/gcp-service-account=${google_service_account.gke-service-account[0].email} --overwrite=true" @@ -44,7 +44,7 @@ resource "null_resource" "k8s-sa-workload-access" { # Vertex AI resources, which are needed for ZenML pipelines resource "google_service_account_iam_member" "k8s-workload-access" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 service_account_id = google_service_account.gke-service-account[0].name role = "roles/iam.workloadIdentityUser" diff --git a/src/mlstacks/terraform/gcp-modular/locals.tf b/src/mlstacks/terraform/gcp-modular/locals.tf index 49bc362f..9af0a905 100644 --- a/src/mlstacks/terraform/gcp-modular/locals.tf +++ b/src/mlstacks/terraform/gcp-modular/locals.tf @@ -76,6 +76,14 @@ locals { service_account_name = "seldon" } + huggingface = { + version = "4.41.3" + name = "huggingface" + namespace = "huggingface-system" + workloads_namespace = "zenml-workloads-huggingface" + service_account_name = "huggingface" + } + zenml = { version = "" database_ssl_ca = "" diff --git a/src/mlstacks/terraform/gcp-modular/output_file.tf b/src/mlstacks/terraform/gcp-modular/output_file.tf index 3dd4256a..7ca13196 100644 --- a/src/mlstacks/terraform/gcp-modular/output_file.tf +++ b/src/mlstacks/terraform/gcp-modular/output_file.tf @@ -91,6 +91,13 @@ resource "local_file" "stack_file" { flavor: seldon name: gke_seldon configuration: {"kubernetes_context": "gke_${local.prefix}-${local.gke.cluster_name}", "kubernetes_namespace": "${local.seldon.workloads_namespace}", "base_url": "http://${module.istio[0].ingress-ip-address}:${module.istio[0].ingress-port}"} +%{endif} +%{if var.enable_model_deployer_huggingface} + model_deployer: + id: ${uuid()} + flavor: huggingface + name: eks_huggingface_model_deployer + configuration: {"kubernetes_context": "${aws_eks_cluster.cluster[0].arn}", "kubernetes_namespace": "${local.huggingface.workloads_namespace}", "base_url": "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}"}} %{endif} ADD filename = "./gcp_modular_stack_${replace(substr(timestamp(), 0, 16), ":", "_")}.yaml" diff --git a/src/mlstacks/terraform/gcp-modular/outputs.tf b/src/mlstacks/terraform/gcp-modular/outputs.tf index 70403d17..3855826c 100644 --- a/src/mlstacks/terraform/gcp-modular/outputs.tf +++ b/src/mlstacks/terraform/gcp-modular/outputs.tf @@ -100,19 +100,25 @@ output "experiment_tracker_configuration" { }) : "" } +# if huggingface is enabled, set the model deployer outputs to the huggingface values # if seldon is enabled, set the model deployer outputs to the seldon values # otherwise, set the model deployer outputs to empty strings output "model_deployer_id" { - value = var.enable_model_deployer_seldon ? uuid() : "" + value = var.enable_model_deployer_huggingface ? uuid() : var.enable_model_deployer_seldon ? uuid() : "" } output "model_deployer_flavor" { - value = var.enable_model_deployer_seldon ? "seldon" : "" + value = var.enable_model_deployer_huggingface ? "huggingface" : var.enable_model_deployer_seldon ? "seldon" : "" } output "model_deployer_name" { - value = var.enable_model_deployer_seldon ? "gke_seldon_model_deployer_${random_string.unique.result}" : "" + value = var.enable_model_deployer_huggingface ? "eks_huggingface_model_deployer_${random_string.unique.result}" : var.enable_model_deployer_seldon ? "gke_seldon_model_deployer_${random_string.unique.result}" : "" } output "model_deployer_configuration" { - value = var.enable_model_deployer_seldon ? jsonencode({ + value = var.enable_model_deployer_huggingface ? jsonencode({ + kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" + kubernetes_namespace = local.huggingface.workloads_namespace + base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" + }) : + var.enable_model_deployer_seldon ? jsonencode({ kubernetes_context = "gke_${var.project_id}_${var.region}_${local.prefix}-${local.gke.cluster_name}" kubernetes_namespace = local.seldon.workloads_namespace base_url = "http://${module.istio[0].ingress-ip-address}:${module.istio[0].ingress-port}" diff --git a/src/mlstacks/terraform/gcp-modular/variables.tf b/src/mlstacks/terraform/gcp-modular/variables.tf index 74d14e6f..27df61e6 100644 --- a/src/mlstacks/terraform/gcp-modular/variables.tf +++ b/src/mlstacks/terraform/gcp-modular/variables.tf @@ -31,6 +31,10 @@ variable "enable_model_deployer_seldon" { description = "Enable Seldon deployment" default = false } +variable "enable_model_deployer_huggingface" { + description = "Enable Huggingface deployment" + default = false +} variable "enable_step_operator_vertex" { description = "Enable VertexAI Step Operator" default = false diff --git a/src/mlstacks/terraform/gcp-modular/vpc.tf b/src/mlstacks/terraform/gcp-modular/vpc.tf index 28eecc93..0a9e760f 100644 --- a/src/mlstacks/terraform/gcp-modular/vpc.tf +++ b/src/mlstacks/terraform/gcp-modular/vpc.tf @@ -1,6 +1,6 @@ module "vpc" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 source = "terraform-google-modules/network/google" version = "~> 4.0" diff --git a/src/mlstacks/terraform/k3d-modular/helm.tf b/src/mlstacks/terraform/k3d-modular/helm.tf index 5109a922..14e7a78b 100644 --- a/src/mlstacks/terraform/k3d-modular/helm.tf +++ b/src/mlstacks/terraform/k3d-modular/helm.tf @@ -3,15 +3,15 @@ provider "helm" { kubernetes { host = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" client_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" client_key = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" cluster_ca_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" } } diff --git a/src/mlstacks/terraform/k3d-modular/istio.tf b/src/mlstacks/terraform/k3d-modular/istio.tf index 5283beda..7a616ae6 100644 --- a/src/mlstacks/terraform/k3d-modular/istio.tf +++ b/src/mlstacks/terraform/k3d-modular/istio.tf @@ -1,7 +1,7 @@ module "istio" { source = "../modules/istio-module" - count = (var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? 1 : 0 depends_on = [ k3d_cluster.zenml-cluster, diff --git a/src/mlstacks/terraform/k3d-modular/k3d.tf b/src/mlstacks/terraform/k3d-modular/k3d.tf index b5e99b1e..77eb08fa 100644 --- a/src/mlstacks/terraform/k3d-modular/k3d.tf +++ b/src/mlstacks/terraform/k3d-modular/k3d.tf @@ -17,7 +17,7 @@ resource "k3d_registry" "zenml-registry" { image = "docker.io/registry:2" count = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 port { host_port = local.k3d_registry.port @@ -53,7 +53,7 @@ resource "k3d_cluster" "zenml-cluster" { agents = 2 count = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 kube_api { host = local.k3d_kube_api.host diff --git a/src/mlstacks/terraform/k3d-modular/kubeflow.tf b/src/mlstacks/terraform/k3d-modular/kubeflow.tf index 5add4799..6edd0fd4 100644 --- a/src/mlstacks/terraform/k3d-modular/kubeflow.tf +++ b/src/mlstacks/terraform/k3d-modular/kubeflow.tf @@ -13,7 +13,7 @@ module "kubeflow-pipelines" { ] pipeline_version = local.kubeflow.version - ingress_host = (var.enable_model_deployer_seldon) ? "${local.kubeflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.kubeflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.kubeflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.kubeflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false } diff --git a/src/mlstacks/terraform/k3d-modular/kubernetes.tf b/src/mlstacks/terraform/k3d-modular/kubernetes.tf index 060ae5ed..e2951016 100644 --- a/src/mlstacks/terraform/k3d-modular/kubernetes.tf +++ b/src/mlstacks/terraform/k3d-modular/kubernetes.tf @@ -2,31 +2,31 @@ provider "kubernetes" { host = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" client_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" client_key = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" cluster_ca_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" } provider "kubectl" { host = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" client_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" client_key = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" cluster_ca_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" } # the namespace where zenml will run kubernetes orchestrator workloads diff --git a/src/mlstacks/terraform/k3d-modular/locals.tf b/src/mlstacks/terraform/k3d-modular/locals.tf index 20929900..79d0deda 100644 --- a/src/mlstacks/terraform/k3d-modular/locals.tf +++ b/src/mlstacks/terraform/k3d-modular/locals.tf @@ -62,6 +62,14 @@ locals { service_account_name = "seldon" } + huggingface = { + version = "4.41.3" + name = "huggingface" + namespace = "huggingface-system" + workloads_namespace = "zenml-workloads-huggingface" + service_account_name = "huggingface" + } + common_tags = { "managedBy" = "terraform" "environment" = "dev" diff --git a/src/mlstacks/terraform/k3d-modular/minio.tf b/src/mlstacks/terraform/k3d-modular/minio.tf index a6b17138..716c4453 100644 --- a/src/mlstacks/terraform/k3d-modular/minio.tf +++ b/src/mlstacks/terraform/k3d-modular/minio.tf @@ -16,10 +16,10 @@ module "minio_server" { minio_storage_size = local.minio.storage_size minio_access_key = var.zenml-minio-store-access-key minio_secret_key = var.zenml-minio-store-secret-key - ingress_host = (var.enable_model_deployer_seldon) ? "${local.minio.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" - ingress_console_host = (var.enable_model_deployer_seldon) ? "${local.minio.ingress_console_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_console_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.minio.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_console_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.minio.ingress_console_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_console_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false } provider "minio" { diff --git a/src/mlstacks/terraform/k3d-modular/mlflow.tf b/src/mlstacks/terraform/k3d-modular/mlflow.tf index 489f240d..ef6230b9 100644 --- a/src/mlstacks/terraform/k3d-modular/mlflow.tf +++ b/src/mlstacks/terraform/k3d-modular/mlflow.tf @@ -14,9 +14,9 @@ module "mlflow" { # details about the mlflow deployment chart_version = local.mlflow.version - ingress_host = (var.enable_model_deployer_seldon) ? "${local.mlflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.mlflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.mlflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.mlflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false htpasswd = "${var.mlflow-username}:${htpasswd_password.hash.apr1}" artifact_Proxied_Access = local.mlflow.artifact_Proxied_Access artifact_S3 = "true" diff --git a/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf b/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf index 5f6399f4..10bb7dc0 100644 --- a/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf +++ b/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf @@ -2,7 +2,7 @@ module "nginx-ingress" { source = "../modules/nginx-ingress-module" - count = (var.enable_experiment_tracker_mlflow || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_artifact_store) && (!var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_experiment_tracker_mlflow || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_artifact_store) && (!var.enable_model_deployer_seldon && !var.enable_model_deployer_huggingface) ? 1 : 0 # run only after the gke cluster is set up depends_on = [ diff --git a/src/mlstacks/terraform/k3d-modular/output_stack.tf b/src/mlstacks/terraform/k3d-modular/output_stack.tf index edb48405..5a45e0dd 100644 --- a/src/mlstacks/terraform/k3d-modular/output_stack.tf +++ b/src/mlstacks/terraform/k3d-modular/output_stack.tf @@ -77,7 +77,7 @@ resource "local_file" "stack_file" { tracking_username: "${var.mlflow-username}" tracking_password: "${var.mlflow-password}" %{endif} -%{if var.enable_model_deployer_seldon} +%{if var.enable_model_deployer_seldon && !var.enable_model_deployer_huggingface} model_deployer: id: ${uuid()} flavor: seldon diff --git a/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf b/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf index 429ca77f..e17b79fe 100644 --- a/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf +++ b/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf @@ -127,6 +127,23 @@ requirements: %{endif} +%{if var.enable_model_deployer_huggingface} + - name: k3d-huggingface-${random_string.cluster_id.result} + description: >- + Huggingface deployed in a local K3D cluster. + system_tools: + - kubectl + stacks: + - name: k3d-seldon-${random_string.cluster_id.result} + type: model_deployer + flavor: huggingface + configuration: + kubernetes_context: "k3d-${k3d_cluster.zenml-cluster[0].name}" + kubernetes_namespace: "${local.huggingface.workloads_namespace}" + base_url: "http://${var.enable_model_deployer_huggingface ? module.istio[0].ingress-ip-address : ""}" + kubernetes_secret_name: "${var.seldon-secret-name}" +%{endif} + environments: - name: default-k3d-local-orchestrator @@ -144,6 +161,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} mandatory_requirements: %{if var.enable_artifact_store || var.enable_experiment_tracker_mlflow} @@ -168,6 +188,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -194,6 +217,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -221,6 +247,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -250,6 +279,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} mandatory_requirements: %{if var.enable_artifact_store || var.enable_experiment_tracker_mlflow} @@ -279,6 +311,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -309,6 +344,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -339,6 +377,9 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} +%{endif} +%{if var.enable_model_deployer_huggingface} + - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: diff --git a/src/mlstacks/terraform/k3d-modular/outputs.tf b/src/mlstacks/terraform/k3d-modular/outputs.tf index 6c36527c..187343f8 100644 --- a/src/mlstacks/terraform/k3d-modular/outputs.tf +++ b/src/mlstacks/terraform/k3d-modular/outputs.tf @@ -23,22 +23,22 @@ output "artifact_store_configuration" { output "container_registry_id" { value = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? uuid() : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? uuid() : "" } output "container_registry_flavor" { value = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? "default" : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? "default" : "" } output "container_registry_name" { value = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? "k3d-${local.k3d_registry.name}-${random_string.cluster_id.result}" : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? "k3d-${local.k3d_registry.name}-${random_string.cluster_id.result}" : "" } output "container_registry_configuration" { value = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? jsonencode({ + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? jsonencode({ uri = "k3d-${local.k3d_registry.name}-${random_string.cluster_id.result}.localhost:${local.k3d_registry.port}" }) : "" } @@ -92,22 +92,28 @@ output "experiment_tracker_configuration" { }) : "" } +# if huggingface is enabled, set the model deployer outputs to the huggingface values # if seldon is enabled, set the model_deployer outputs to the seldon values # otherwise, set the model_deployer outputs to empty strings output "model_deployer_id" { - value = var.enable_model_deployer_seldon ? uuid() : "" + value = var.enable_model_deployer_seldon || var.enable_model_deployer_huggingface ? uuid() : "" } output "model_deployer_flavor" { - value = var.enable_model_deployer_seldon ? "seldon" : "" + value = var.enable_model_deployer_seldon ? "seldon" : var.enable_model_deployer_huggingface ? "huggingface" :"" } output "model_deployer_name" { - value = var.enable_model_deployer_seldon ? "k3d-seldon-${random_string.cluster_id.result}" : "" + value = var.enable_model_deployer_seldon ? "k3d-seldon-${random_string.cluster_id.result}" : var.enable_model_deployer_huggingface ? "k3d-huggingface-${random_string.cluster_id.result}" :"" } output "model_deployer_configuration" { value = var.enable_model_deployer_seldon ? jsonencode({ kubernetes_context = "k3d-${k3d_cluster.zenml-cluster[0].name}" kubernetes_namespace = local.seldon.workloads_namespace base_url = "http://${module.istio[0].ingress-ip-address}:${module.istio[0].ingress-port}" + }) : + var.enable_model_deployer_huggingface ? jsonencode({ + kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" + kubernetes_namespace = local.huggingface.workloads_namespace + base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" }) : "" } @@ -115,7 +121,7 @@ output "model_deployer_configuration" { output "k3d-cluster-name" { value = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].name : "" + var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].name : "" } # output for container registry @@ -165,6 +171,14 @@ output "seldon-base-url" { value = var.enable_model_deployer_seldon ? module.istio[0].ingress-ip-address : null } +output "huggingface-workload-namespace" { + value = var.enable_model_deployer_huggingface ? local.huggingface.workloads_namespace : null + description = "The namespace created for hosting your Huggingface workloads" +} +output "huggingface-base-url" { + value = var.enable_model_deployer_huggingface ? module.istio[0].ingress-ip-address : null +} + # output the name of the stack YAML file created output "stack-yaml-path" { value = local_file.stack_file.filename diff --git a/src/mlstacks/terraform/k3d-modular/tekton.tf b/src/mlstacks/terraform/k3d-modular/tekton.tf index f470d58d..69e160eb 100644 --- a/src/mlstacks/terraform/k3d-modular/tekton.tf +++ b/src/mlstacks/terraform/k3d-modular/tekton.tf @@ -12,9 +12,9 @@ module "tekton-pipelines" { pipeline_version = local.tekton.version dashboard_version = local.tekton.dashboard_version - ingress_host = (var.enable_model_deployer_seldon) ? "${local.tekton.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.tekton.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.tekton.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.tekton.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false } # the namespace where zenml will run tekton pipelines diff --git a/src/mlstacks/terraform/k3d-modular/variables.tf b/src/mlstacks/terraform/k3d-modular/variables.tf index cc6a39ba..6909aece 100644 --- a/src/mlstacks/terraform/k3d-modular/variables.tf +++ b/src/mlstacks/terraform/k3d-modular/variables.tf @@ -27,6 +27,10 @@ variable "enable_model_deployer_seldon" { description = "Enable Seldon deployment" default = false } +variable "enable_model_deployer_huggingface" { + description = "Enable Huggingface deployment" + default = false +} variable "enable_zenml" { description = "Enable ZenML deployment" default = false @@ -65,6 +69,12 @@ variable "seldon-secret-name" { type = string } +variable "huggingface-secret-name" { + description = "The Huggingface Model Deployer Secret name" + default = "zenml-huggingface-secret" + type = string +} + # variables for creating a ZenML stack configuration file variable "zenml-version" { description = "The version of ZenML being used" From 3fedc3904c2885ec9c8923fafe1a50d18194d7a8 Mon Sep 17 00:00:00 2001 From: Sanskriti Date: Sat, 22 Jun 2024 10:59:41 +0000 Subject: [PATCH 5/6] removed unnecessary changes and added huggingface token and namespace variables --- src/mlstacks/terraform/aws-modular/eks.tf | 4 +- src/mlstacks/terraform/aws-modular/istio.tf | 4 +- .../terraform/aws-modular/variables.tf | 11 +++++ src/mlstacks/terraform/gcp-modular/gke.tf | 18 ++++---- src/mlstacks/terraform/gcp-modular/istio.tf | 4 +- .../terraform/gcp-modular/kubernetes.tf | 8 ++-- .../terraform/gcp-modular/variables.tf | 10 +++++ src/mlstacks/terraform/gcp-modular/vpc.tf | 4 +- src/mlstacks/terraform/k3d-modular/helm.tf | 10 ++--- src/mlstacks/terraform/k3d-modular/istio.tf | 4 +- src/mlstacks/terraform/k3d-modular/k3d.tf | 6 +-- .../terraform/k3d-modular/kubeflow.tf | 6 +-- .../terraform/k3d-modular/kubernetes.tf | 18 ++++---- src/mlstacks/terraform/k3d-modular/minio.tf | 8 ++-- src/mlstacks/terraform/k3d-modular/mlflow.tf | 6 +-- .../terraform/k3d-modular/nginx_ingress.tf | 4 +- .../terraform/k3d-modular/output_stack.tf | 4 +- .../k3d-modular/output_test_harness_cfg.tf | 43 +------------------ src/mlstacks/terraform/k3d-modular/tekton.tf | 6 +-- .../terraform/k3d-modular/variables.tf | 11 +++++ 20 files changed, 90 insertions(+), 99 deletions(-) diff --git a/src/mlstacks/terraform/aws-modular/eks.tf b/src/mlstacks/terraform/aws-modular/eks.tf index ad23b147..7be43342 100644 --- a/src/mlstacks/terraform/aws-modular/eks.tf +++ b/src/mlstacks/terraform/aws-modular/eks.tf @@ -1,7 +1,7 @@ # eks module to create a cluster # newer versions of it had some error so going with v17.23.0 for now locals { - enable_eks = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || var.enable_model_deployer_seldon || var.enable_model_deployer_huggingface || var.enable_experiment_tracker_mlflow || + enable_eks = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) } @@ -266,4 +266,4 @@ data "external" "get_cluster_auth" { depends_on = [ aws_eks_cluster.cluster ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/aws-modular/istio.tf b/src/mlstacks/terraform/aws-modular/istio.tf index b4ff4d76..7e30f9fd 100644 --- a/src/mlstacks/terraform/aws-modular/istio.tf +++ b/src/mlstacks/terraform/aws-modular/istio.tf @@ -1,7 +1,7 @@ module "istio" { source = "../modules/istio-module" - count = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_model_deployer_seldon) ? 1 : 0 depends_on = [ aws_eks_cluster.cluster, @@ -9,4 +9,4 @@ module "istio" { ] chart_version = local.istio.version -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/aws-modular/variables.tf b/src/mlstacks/terraform/aws-modular/variables.tf index 0a228872..6f45afb1 100644 --- a/src/mlstacks/terraform/aws-modular/variables.tf +++ b/src/mlstacks/terraform/aws-modular/variables.tf @@ -61,6 +61,17 @@ variable "region" { default = "eu-west-1" } +# variables for huggingface model model deployer +variable "huggingface_token"{ + description = "The Hugging Face authentication token." + default = "huggingfaceauthenticationtoken" +} + +variable "huggingface_namespace" { + description = "The namespace where the Inference Endpoint will be created." + default = "huggingfacenamespace" +} cb cb + # variables for the MLflow tracking server variable "mlflow-artifact-S3-access-key" { description = "Your AWS access key for using S3 as MLflow artifact store" diff --git a/src/mlstacks/terraform/gcp-modular/gke.tf b/src/mlstacks/terraform/gcp-modular/gke.tf index bac06868..530eb552 100644 --- a/src/mlstacks/terraform/gcp-modular/gke.tf +++ b/src/mlstacks/terraform/gcp-modular/gke.tf @@ -2,7 +2,7 @@ data "google_client_config" "default" {} # module "gke" { # count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton # || var.enable_orchestrator_kubernetes || -# var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || +# var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || # var.enable_zenml)? 1: 0 # depends_on = [ @@ -64,7 +64,7 @@ data "google_client_config" "default" {} # } locals { enable_gke = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) } @@ -79,7 +79,7 @@ data "external" "get_cluster" { resource "google_container_cluster" "gke" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 name = "${local.prefix}-${local.gke.cluster_name}" @@ -117,7 +117,7 @@ resource "google_container_cluster" "gke" { # service account for GKE nodes resource "google_service_account" "gke-service-account" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 account_id = "${local.prefix}-${local.gke.service_account_name}" project = var.project_id @@ -136,7 +136,7 @@ resource "google_project_iam_binding" "container-registry" { resource "google_project_iam_binding" "secret-manager" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/secretmanager.admin" @@ -148,7 +148,7 @@ resource "google_project_iam_binding" "secret-manager" { resource "google_project_iam_binding" "cloudsql" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/cloudsql.admin" @@ -160,7 +160,7 @@ resource "google_project_iam_binding" "cloudsql" { resource "google_project_iam_binding" "storageadmin" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/storage.admin" @@ -172,7 +172,7 @@ resource "google_project_iam_binding" "storageadmin" { resource "google_project_iam_binding" "vertex-ai-user" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 project = var.project_id role = "roles/aiplatform.user" @@ -180,4 +180,4 @@ resource "google_project_iam_binding" "vertex-ai-user" { members = [ "serviceAccount:${google_service_account.gke-service-account[0].email}", ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/gcp-modular/istio.tf b/src/mlstacks/terraform/gcp-modular/istio.tf index dae6c0fb..62f13b2a 100644 --- a/src/mlstacks/terraform/gcp-modular/istio.tf +++ b/src/mlstacks/terraform/gcp-modular/istio.tf @@ -1,7 +1,7 @@ module "istio" { source = "../modules/istio-module" - count = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_model_deployer_seldon) ? 1 : 0 depends_on = [ google_container_cluster.gke, @@ -9,4 +9,4 @@ module "istio" { ] chart_version = local.istio.version -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/gcp-modular/kubernetes.tf b/src/mlstacks/terraform/gcp-modular/kubernetes.tf index 2b46fe08..e914e820 100644 --- a/src/mlstacks/terraform/gcp-modular/kubernetes.tf +++ b/src/mlstacks/terraform/gcp-modular/kubernetes.tf @@ -15,7 +15,7 @@ provider "kubectl" { # the namespace where zenml will run kubernetes orchestrator workloads resource "kubernetes_namespace" "k8s-workloads" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 metadata { name = local.gke.workloads_namespace @@ -28,7 +28,7 @@ resource "kubernetes_namespace" "k8s-workloads" { # tie the kubernetes workloads SA to the GKE service account resource "null_resource" "k8s-sa-workload-access" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 provisioner "local-exec" { command = "kubectl -n ${kubernetes_namespace.k8s-workloads[0].metadata[0].name} annotate serviceaccount default iam.gke.io/gcp-service-account=${google_service_account.gke-service-account[0].email} --overwrite=true" @@ -44,7 +44,7 @@ resource "null_resource" "k8s-sa-workload-access" { # Vertex AI resources, which are needed for ZenML pipelines resource "google_service_account_iam_member" "k8s-workload-access" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 service_account_id = google_service_account.gke-service-account[0].name role = "roles/iam.workloadIdentityUser" @@ -52,4 +52,4 @@ resource "google_service_account_iam_member" "k8s-workload-access" { depends_on = [ kubernetes_namespace.k8s-workloads, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/gcp-modular/variables.tf b/src/mlstacks/terraform/gcp-modular/variables.tf index 27df61e6..7474cd7e 100644 --- a/src/mlstacks/terraform/gcp-modular/variables.tf +++ b/src/mlstacks/terraform/gcp-modular/variables.tf @@ -61,6 +61,16 @@ variable "project_id" { default = "" } +# variables for huggingface model model deployer +variable "huggingface_token"{ + description = "The Hugging Face authentication token." + default = "huggingfaceauthenticationtoken" +} + +variable "huggingface_namespace" { + description = "The namespace where the Inference Endpoint will be created." + default = "huggingfacenamespace" +} # variables for the MLflow tracking server variable "mlflow_bucket" { diff --git a/src/mlstacks/terraform/gcp-modular/vpc.tf b/src/mlstacks/terraform/gcp-modular/vpc.tf index 0a9e760f..15c7338d 100644 --- a/src/mlstacks/terraform/gcp-modular/vpc.tf +++ b/src/mlstacks/terraform/gcp-modular/vpc.tf @@ -1,6 +1,6 @@ module "vpc" { count = (var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_zenml) ? 1 : 0 source = "terraform-google-modules/network/google" version = "~> 4.0" @@ -54,4 +54,4 @@ module "vpc" { next_hop_internet = "true" }, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/helm.tf b/src/mlstacks/terraform/k3d-modular/helm.tf index 14e7a78b..7b689bba 100644 --- a/src/mlstacks/terraform/k3d-modular/helm.tf +++ b/src/mlstacks/terraform/k3d-modular/helm.tf @@ -3,15 +3,15 @@ provider "helm" { kubernetes { host = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" client_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" client_key = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" cluster_ca_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" } -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/istio.tf b/src/mlstacks/terraform/k3d-modular/istio.tf index 7a616ae6..b3f0458d 100644 --- a/src/mlstacks/terraform/k3d-modular/istio.tf +++ b/src/mlstacks/terraform/k3d-modular/istio.tf @@ -1,11 +1,11 @@ module "istio" { source = "../modules/istio-module" - count = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? 1 : 0 + count = (var.enable_model_deployer_seldon) ? 1 : 0 depends_on = [ k3d_cluster.zenml-cluster, ] chart_version = local.istio.version -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/k3d.tf b/src/mlstacks/terraform/k3d-modular/k3d.tf index 77eb08fa..f2f64c76 100644 --- a/src/mlstacks/terraform/k3d-modular/k3d.tf +++ b/src/mlstacks/terraform/k3d-modular/k3d.tf @@ -17,7 +17,7 @@ resource "k3d_registry" "zenml-registry" { image = "docker.io/registry:2" count = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 port { host_port = local.k3d_registry.port @@ -53,7 +53,7 @@ resource "k3d_cluster" "zenml-cluster" { agents = 2 count = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? 1 : 0 kube_api { host = local.k3d_kube_api.host @@ -100,4 +100,4 @@ resource "k3d_cluster" "zenml-cluster" { depends_on = [ k3d_registry.zenml-registry, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/kubeflow.tf b/src/mlstacks/terraform/k3d-modular/kubeflow.tf index 6edd0fd4..05dc4217 100644 --- a/src/mlstacks/terraform/k3d-modular/kubeflow.tf +++ b/src/mlstacks/terraform/k3d-modular/kubeflow.tf @@ -13,7 +13,7 @@ module "kubeflow-pipelines" { ] pipeline_version = local.kubeflow.version - ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.kubeflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.kubeflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_seldon) ? "${local.kubeflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.kubeflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false -} + istio_enabled = (var.enable_model_deployer_seldon) ? true : false +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/kubernetes.tf b/src/mlstacks/terraform/k3d-modular/kubernetes.tf index e2951016..552afef0 100644 --- a/src/mlstacks/terraform/k3d-modular/kubernetes.tf +++ b/src/mlstacks/terraform/k3d-modular/kubernetes.tf @@ -2,31 +2,31 @@ provider "kubernetes" { host = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" client_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" client_key = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" cluster_ca_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" } provider "kubectl" { host = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.host : "" client_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_certificate : "" client_key = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.client_key : "" cluster_ca_certificate = (var.enable_container_registry || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_orchestrator_kubernetes || - var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" + var.enable_model_deployer_seldon || var.enable_experiment_tracker_mlflow || var.enable_artifact_store || var.enable_zenml) ? k3d_cluster.zenml-cluster[0].credentials.0.cluster_ca_certificate : "" } # the namespace where zenml will run kubernetes orchestrator workloads @@ -37,4 +37,4 @@ resource "kubernetes_namespace" "k8s-workloads" { depends_on = [ k3d_cluster.zenml-cluster, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/minio.tf b/src/mlstacks/terraform/k3d-modular/minio.tf index 716c4453..3530b11d 100644 --- a/src/mlstacks/terraform/k3d-modular/minio.tf +++ b/src/mlstacks/terraform/k3d-modular/minio.tf @@ -16,10 +16,10 @@ module "minio_server" { minio_storage_size = local.minio.storage_size minio_access_key = var.zenml-minio-store-access-key minio_secret_key = var.zenml-minio-store-secret-key - ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.minio.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" - ingress_console_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.minio.ingress_console_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_console_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_seldon) ? "${local.minio.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_console_host = (var.enable_model_deployer_seldon) ? "${local.minio.ingress_console_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.minio.ingress_console_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_seldon) ? true : false } provider "minio" { @@ -47,4 +47,4 @@ resource "minio_s3_bucket" "zenml_bucket" { module.nginx-ingress, module.istio, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/mlflow.tf b/src/mlstacks/terraform/k3d-modular/mlflow.tf index ef6230b9..feb1fb0b 100644 --- a/src/mlstacks/terraform/k3d-modular/mlflow.tf +++ b/src/mlstacks/terraform/k3d-modular/mlflow.tf @@ -14,9 +14,9 @@ module "mlflow" { # details about the mlflow deployment chart_version = local.mlflow.version - ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.mlflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.mlflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_seldon) ? "${local.mlflow.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.mlflow.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_seldon) ? true : false htpasswd = "${var.mlflow-username}:${htpasswd_password.hash.apr1}" artifact_Proxied_Access = local.mlflow.artifact_Proxied_Access artifact_S3 = "true" @@ -48,4 +48,4 @@ resource "minio_s3_bucket" "mlflow_bucket" { module.nginx-ingress, module.istio, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf b/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf index 10bb7dc0..a9397409 100644 --- a/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf +++ b/src/mlstacks/terraform/k3d-modular/nginx_ingress.tf @@ -2,7 +2,7 @@ module "nginx-ingress" { source = "../modules/nginx-ingress-module" - count = (var.enable_experiment_tracker_mlflow || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_artifact_store) && (!var.enable_model_deployer_seldon && !var.enable_model_deployer_huggingface) ? 1 : 0 + count = (var.enable_experiment_tracker_mlflow || var.enable_orchestrator_kubeflow || var.enable_orchestrator_tekton || var.enable_artifact_store) && (!var.enable_model_deployer_seldon) ? 1 : 0 # run only after the gke cluster is set up depends_on = [ @@ -10,4 +10,4 @@ module "nginx-ingress" { ] chart_version = local.nginx_ingress.version -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/output_stack.tf b/src/mlstacks/terraform/k3d-modular/output_stack.tf index 5a45e0dd..5dbde1a6 100644 --- a/src/mlstacks/terraform/k3d-modular/output_stack.tf +++ b/src/mlstacks/terraform/k3d-modular/output_stack.tf @@ -77,7 +77,7 @@ resource "local_file" "stack_file" { tracking_username: "${var.mlflow-username}" tracking_password: "${var.mlflow-password}" %{endif} -%{if var.enable_model_deployer_seldon && !var.enable_model_deployer_huggingface} +%{if var.enable_model_deployer_seldon} model_deployer: id: ${uuid()} flavor: seldon @@ -90,4 +90,4 @@ resource "local_file" "stack_file" { %{endif} ADD filename = "./k3d_stack_${replace(substr(timestamp(), 0, 16), ":", "_")}.yaml" -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf b/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf index e17b79fe..e84adfa1 100644 --- a/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf +++ b/src/mlstacks/terraform/k3d-modular/output_test_harness_cfg.tf @@ -127,23 +127,6 @@ requirements: %{endif} -%{if var.enable_model_deployer_huggingface} - - name: k3d-huggingface-${random_string.cluster_id.result} - description: >- - Huggingface deployed in a local K3D cluster. - system_tools: - - kubectl - stacks: - - name: k3d-seldon-${random_string.cluster_id.result} - type: model_deployer - flavor: huggingface - configuration: - kubernetes_context: "k3d-${k3d_cluster.zenml-cluster[0].name}" - kubernetes_namespace: "${local.huggingface.workloads_namespace}" - base_url: "http://${var.enable_model_deployer_huggingface ? module.istio[0].ingress-ip-address : ""}" - kubernetes_secret_name: "${var.seldon-secret-name}" -%{endif} - environments: - name: default-k3d-local-orchestrator @@ -161,9 +144,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} mandatory_requirements: %{if var.enable_artifact_store || var.enable_experiment_tracker_mlflow} @@ -188,9 +168,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -217,9 +194,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -247,9 +221,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -279,9 +250,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} mandatory_requirements: %{if var.enable_artifact_store || var.enable_experiment_tracker_mlflow} @@ -311,9 +279,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -344,9 +309,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -377,9 +339,6 @@ environments: %{endif} %{if var.enable_model_deployer_seldon} - k3d-seldon-${random_string.cluster_id.result} -%{endif} -%{if var.enable_model_deployer_huggingface} - - k3d-huggingface-${random_string.cluster_id.result} %{endif} - local-secrets-manager mandatory_requirements: @@ -391,4 +350,4 @@ environments: %{endif} ADD filename = "./k3d_test_framework_cfg.yaml" -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/tekton.tf b/src/mlstacks/terraform/k3d-modular/tekton.tf index 69e160eb..2d34b361 100644 --- a/src/mlstacks/terraform/k3d-modular/tekton.tf +++ b/src/mlstacks/terraform/k3d-modular/tekton.tf @@ -12,9 +12,9 @@ module "tekton-pipelines" { pipeline_version = local.tekton.version dashboard_version = local.tekton.dashboard_version - ingress_host = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? "${local.tekton.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.tekton.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" + ingress_host = (var.enable_model_deployer_seldon) ? "${local.tekton.ingress_host_prefix}.${module.istio[0].ingress-ip-address}.nip.io" : "${local.tekton.ingress_host_prefix}.${module.nginx-ingress[0].ingress-ip-address}.nip.io" tls_enabled = false - istio_enabled = (var.enable_model_deployer_huggingface || var.enable_model_deployer_seldon) ? true : false + istio_enabled = (var.enable_model_deployer_seldon) ? true : false } # the namespace where zenml will run tekton pipelines @@ -29,4 +29,4 @@ resource "kubernetes_namespace" "tekton-workloads" { depends_on = [ module.tekton-pipelines, ] -} +} \ No newline at end of file diff --git a/src/mlstacks/terraform/k3d-modular/variables.tf b/src/mlstacks/terraform/k3d-modular/variables.tf index 6909aece..249d1ee4 100644 --- a/src/mlstacks/terraform/k3d-modular/variables.tf +++ b/src/mlstacks/terraform/k3d-modular/variables.tf @@ -36,6 +36,17 @@ variable "enable_zenml" { default = false } +# variables for huggingface model model deployer +variable "huggingface_token"{ + description = "The Hugging Face authentication token." + default = "huggingfaceauthenticationtoken" +} + +variable "huggingface_namespace" { + description = "The namespace where the Inference Endpoint will be created." + default = "huggingfacenamespace" +} + # variables for the MLflow tracking server and Minio S3 bucket variable "zenml-minio-store-access-key" { From 21a6120ccb05519a9273b9908443295327e3941f Mon Sep 17 00:00:00 2001 From: Sanskriti Date: Fri, 12 Jul 2024 08:49:04 +0000 Subject: [PATCH 6/6] removed unnecessary changes --- src/mlstacks/constants.py | 2 +- src/mlstacks/enums.py | 3 +-- src/mlstacks/terraform/aws-modular/locals.tf | 8 ------ src/mlstacks/terraform/aws-modular/outputs.tf | 24 ------------------ src/mlstacks/terraform/gcp-modular/locals.tf | 8 ------ src/mlstacks/terraform/gcp-modular/outputs.tf | 25 ------------------- src/mlstacks/terraform/k3d-modular/locals.tf | 8 ------ src/mlstacks/terraform/k3d-modular/outputs.tf | 25 ------------------- 8 files changed, 2 insertions(+), 101 deletions(-) diff --git a/src/mlstacks/constants.py b/src/mlstacks/constants.py index 093f981b..ea97da03 100644 --- a/src/mlstacks/constants.py +++ b/src/mlstacks/constants.py @@ -38,7 +38,7 @@ "vertex", ], "mlops_platform": ["zenml"], - "model_deployer": ["seldon","huggingface"], + "model_deployer": ["seldon", "huggingface"], "step_operator": ["sagemaker", "vertex"], } ALLOWED_COMPONENT_TYPES: Dict[str, Dict[str, List[str]]] = { diff --git a/src/mlstacks/enums.py b/src/mlstacks/enums.py index 1458956a..feb32b12 100644 --- a/src/mlstacks/enums.py +++ b/src/mlstacks/enums.py @@ -31,7 +31,6 @@ class ComponentTypeEnum(str, Enum): FEATURE_STORE = "feature_store" ANNOTATOR = "annotator" IMAGE_BUILDER = "image_builder" - class ComponentFlavorEnum(str, Enum): @@ -39,6 +38,7 @@ class ComponentFlavorEnum(str, Enum): AWS = "aws" GCP = "gcp" + HUGGINGFACE = "huggingface" KUBEFLOW = "kubeflow" KUBERNETES = "kubernetes" MINIO = "minio" @@ -51,7 +51,6 @@ class ComponentFlavorEnum(str, Enum): VERTEX = "vertex" ZENML = "zenml" DEFAULT = "default" - HUGGINGFACE = "huggingface" class DeploymentMethodEnum(str, Enum): diff --git a/src/mlstacks/terraform/aws-modular/locals.tf b/src/mlstacks/terraform/aws-modular/locals.tf index 53680d70..4273001a 100644 --- a/src/mlstacks/terraform/aws-modular/locals.tf +++ b/src/mlstacks/terraform/aws-modular/locals.tf @@ -66,14 +66,6 @@ locals { service_account_name = "seldon" } - huggingface = { - version = "4.41.3" - name = "huggingface" - namespace = "huggingface-system" - workloads_namespace = "zenml-workloads-huggingface" - service_account_name = "huggingface" - } - zenml = { version = "" database_ssl_ca = "" diff --git a/src/mlstacks/terraform/aws-modular/outputs.tf b/src/mlstacks/terraform/aws-modular/outputs.tf index 175bf5b9..60871a58 100644 --- a/src/mlstacks/terraform/aws-modular/outputs.tf +++ b/src/mlstacks/terraform/aws-modular/outputs.tf @@ -84,30 +84,6 @@ output "experiment_tracker_configuration" { }) : "" } -# if huggingface is enabled, set the model deployer outputs to the huggingface values -# if seldon is enabled, set the model deployer outputs to the seldon values -# otherwise, set the model deployer outputs to empty strings -output "model_deployer_id" { - value = var.enable_model_deployer_huggingface ? uuid() : var.enable_model_deployer_seldon ? uuid() : "" -} -output "model_deployer_flavor" { - value = var.enable_model_deployer_huggingface ? "huggingface" : var.enable_model_deployer_seldon ? "seldon" : "" -} -output "model_deployer_name" { - value = var.enable_model_deployer_huggingface ? "eks_huggingface_model_deployer_${random_string.unique.result}" : var.enable_model_deployer_seldon ? "eks_seldon_model_deployer_${random_string.unique.result}" : "" -} -output "model_deployer_configuration" { - value = var.enable_model_deployer_huggingface ? jsonencode({ - kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" - kubernetes_namespace = local.huggingface.workloads_namespace - base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" - }) : - var.enable_model_deployer_seldon ? jsonencode({ - kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" - kubernetes_namespace = local.seldon.workloads_namespace - base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" - }) : "" -} # if sagemaker is enabled as step operator, set the step operator outputs to the sagemaker values # otherwise, set the step operator outputs to empty strings diff --git a/src/mlstacks/terraform/gcp-modular/locals.tf b/src/mlstacks/terraform/gcp-modular/locals.tf index 9af0a905..3de40f8b 100644 --- a/src/mlstacks/terraform/gcp-modular/locals.tf +++ b/src/mlstacks/terraform/gcp-modular/locals.tf @@ -75,14 +75,6 @@ locals { workloads_namespace = "zenml-workloads-seldon" service_account_name = "seldon" } - - huggingface = { - version = "4.41.3" - name = "huggingface" - namespace = "huggingface-system" - workloads_namespace = "zenml-workloads-huggingface" - service_account_name = "huggingface" - } zenml = { version = "" diff --git a/src/mlstacks/terraform/gcp-modular/outputs.tf b/src/mlstacks/terraform/gcp-modular/outputs.tf index 3855826c..49c639f6 100644 --- a/src/mlstacks/terraform/gcp-modular/outputs.tf +++ b/src/mlstacks/terraform/gcp-modular/outputs.tf @@ -100,31 +100,6 @@ output "experiment_tracker_configuration" { }) : "" } -# if huggingface is enabled, set the model deployer outputs to the huggingface values -# if seldon is enabled, set the model deployer outputs to the seldon values -# otherwise, set the model deployer outputs to empty strings -output "model_deployer_id" { - value = var.enable_model_deployer_huggingface ? uuid() : var.enable_model_deployer_seldon ? uuid() : "" -} -output "model_deployer_flavor" { - value = var.enable_model_deployer_huggingface ? "huggingface" : var.enable_model_deployer_seldon ? "seldon" : "" -} -output "model_deployer_name" { - value = var.enable_model_deployer_huggingface ? "eks_huggingface_model_deployer_${random_string.unique.result}" : var.enable_model_deployer_seldon ? "gke_seldon_model_deployer_${random_string.unique.result}" : "" -} -output "model_deployer_configuration" { - value = var.enable_model_deployer_huggingface ? jsonencode({ - kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" - kubernetes_namespace = local.huggingface.workloads_namespace - base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" - }) : - var.enable_model_deployer_seldon ? jsonencode({ - kubernetes_context = "gke_${var.project_id}_${var.region}_${local.prefix}-${local.gke.cluster_name}" - kubernetes_namespace = local.seldon.workloads_namespace - base_url = "http://${module.istio[0].ingress-ip-address}:${module.istio[0].ingress-port}" - }) : "" -} - # project id output "project-id" { value = var.project_id diff --git a/src/mlstacks/terraform/k3d-modular/locals.tf b/src/mlstacks/terraform/k3d-modular/locals.tf index 79d0deda..c76d686f 100644 --- a/src/mlstacks/terraform/k3d-modular/locals.tf +++ b/src/mlstacks/terraform/k3d-modular/locals.tf @@ -61,14 +61,6 @@ locals { workloads_namespace = "zenml-workloads-seldon" service_account_name = "seldon" } - - huggingface = { - version = "4.41.3" - name = "huggingface" - namespace = "huggingface-system" - workloads_namespace = "zenml-workloads-huggingface" - service_account_name = "huggingface" - } common_tags = { "managedBy" = "terraform" diff --git a/src/mlstacks/terraform/k3d-modular/outputs.tf b/src/mlstacks/terraform/k3d-modular/outputs.tf index 187343f8..9ccbf5a5 100644 --- a/src/mlstacks/terraform/k3d-modular/outputs.tf +++ b/src/mlstacks/terraform/k3d-modular/outputs.tf @@ -92,31 +92,6 @@ output "experiment_tracker_configuration" { }) : "" } -# if huggingface is enabled, set the model deployer outputs to the huggingface values -# if seldon is enabled, set the model_deployer outputs to the seldon values -# otherwise, set the model_deployer outputs to empty strings -output "model_deployer_id" { - value = var.enable_model_deployer_seldon || var.enable_model_deployer_huggingface ? uuid() : "" -} -output "model_deployer_flavor" { - value = var.enable_model_deployer_seldon ? "seldon" : var.enable_model_deployer_huggingface ? "huggingface" :"" -} -output "model_deployer_name" { - value = var.enable_model_deployer_seldon ? "k3d-seldon-${random_string.cluster_id.result}" : var.enable_model_deployer_huggingface ? "k3d-huggingface-${random_string.cluster_id.result}" :"" -} -output "model_deployer_configuration" { - value = var.enable_model_deployer_seldon ? jsonencode({ - kubernetes_context = "k3d-${k3d_cluster.zenml-cluster[0].name}" - kubernetes_namespace = local.seldon.workloads_namespace - base_url = "http://${module.istio[0].ingress-ip-address}:${module.istio[0].ingress-port}" - }) : - var.enable_model_deployer_huggingface ? jsonencode({ - kubernetes_context = "${aws_eks_cluster.cluster[0].arn}" - kubernetes_namespace = local.huggingface.workloads_namespace - base_url = "http://${module.istio[0].ingress-hostname}:${module.istio[0].ingress-port}" - }) : "" -} - # output for the k3d cluster output "k3d-cluster-name" { value = (var.enable_container_registry || var.enable_orchestrator_kubeflow ||