From fd63981f0c8b4abe7c6d6080322034c4f7e9238e Mon Sep 17 00:00:00 2001 From: Elamaran Shanmugam Date: Thu, 6 Feb 2025 19:57:36 +0000 Subject: [PATCH 1/5] Ray Integration to Stacks Signed-off-by: Elamaran Shanmugam --- ray-integration/README.md | 31 ++++ .../backstage-templates/catalog-info.yaml | 17 ++ .../ray-serve/sample/pytorch-sample.py | 154 ++++++++++++++++++ .../ray-serve/skeleton/catalog-info.yaml | 18 ++ .../skeleton/manifests/ray-serve.yaml | 95 +++++++++++ .../ray-serve/template-ray-serve.yaml | 62 +++++++ ray-integration/ray-operator-crds.yaml | 23 +++ ray-integration/ray-operator.yaml | 26 +++ 8 files changed, 426 insertions(+) create mode 100644 ray-integration/README.md create mode 100644 ray-integration/backstage-templates/catalog-info.yaml create mode 100644 ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py create mode 100644 ray-integration/backstage-templates/ray-serve/skeleton/catalog-info.yaml create mode 100644 ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml create mode 100644 ray-integration/backstage-templates/ray-serve/template-ray-serve.yaml create mode 100644 ray-integration/ray-operator-crds.yaml create mode 100644 ray-integration/ray-operator.yaml diff --git a/ray-integration/README.md b/ray-integration/README.md new file mode 100644 index 0000000..1f9e66e --- /dev/null +++ b/ray-integration/README.md @@ -0,0 +1,31 @@ +# Ray Integrations + +`idpBuilder` is extensible to install Ray Operator for Serving machine learning (ML) models at scale. This integration will help us Ray Kubernetes Operator integrated into our platform which simplifies and accelerates the serving of ML models. + +Please use the following command to deploy ray using `idpbuilder`: + +```bash +idpbuilder create \ + --use-path-routing \ + --p https://github.com/cnoe-io/stacks//ray-integration +``` + +Notice that you can add Ray to the reference implementation: + +```bash +idpbuilder create \ + --use-path-routing \ + --p https://github.com/cnoe-io/stacks//ref-implementation + --p https://github.com/cnoe-io/stacks//ray-integration +``` + +## What is installed? + +1. Ray Operator CRDs +2. Ray Operator + +Once installed, you will have Ray Operator and Ray Serve components to serve the ML model and LLMs. + +For more information, check our module [here](https://catalog.us-east-1.prod.workshops.aws/modernengg/en-US/60-aimldelivery/63-section4-ml-model-use-case) for a step by step instructions on Serving ML Models via Internal Developer Platforms with an example. + + diff --git a/ray-integration/backstage-templates/catalog-info.yaml b/ray-integration/backstage-templates/catalog-info.yaml new file mode 100644 index 0000000..64eb925 --- /dev/null +++ b/ray-integration/backstage-templates/catalog-info.yaml @@ -0,0 +1,17 @@ +apiVersion: backstage.io/v1alpha1 +kind: Location +metadata: + name: basic-example-templates + description: A collection of example templates +spec: + targets: + - ./ray-serve/template-ray-serve.yaml +--- +apiVersion: backstage.io/v1alpha1 +kind: Location +metadata: + name: basic-organization + description: Basic organization data +spec: + targets: + - ./organization/guests.yaml diff --git a/ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py b/ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py new file mode 100644 index 0000000..4efee1f --- /dev/null +++ b/ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py @@ -0,0 +1,154 @@ +import os +from typing import Dict + +import torch +from filelock import FileLock +from torch import nn +from torch.utils.data import DataLoader +from torchvision import datasets, transforms +from torchvision.transforms import Normalize, ToTensor +from tqdm import tqdm + +import ray.train +from ray.train import ScalingConfig +from ray.train.torch import TorchTrainer +import ray + + +def get_dataloaders(batch_size): + # Transform to normalize the input images + transform = transforms.Compose([ToTensor(), Normalize((0.5,), (0.5,))]) + + with FileLock(os.path.expanduser("~/data.lock")): + # Download training data from open datasets + training_data = datasets.FashionMNIST( + root="~/data", + train=True, + download=True, + transform=transform, + ) + + # Download test data from open datasets + test_data = datasets.FashionMNIST( + root="~/data", + train=False, + download=True, + transform=transform, + ) + + # Create data loaders + train_dataloader = DataLoader(training_data, batch_size=batch_size, shuffle=True) + test_dataloader = DataLoader(test_data, batch_size=batch_size) + + return train_dataloader, test_dataloader + + +# Model Definition +class NeuralNetwork(nn.Module): + def __init__(self): + super(NeuralNetwork, self).__init__() + self.flatten = nn.Flatten() + self.linear_relu_stack = nn.Sequential( + nn.Linear(28 * 28, 512), + nn.ReLU(), + nn.Dropout(0.25), + nn.Linear(512, 512), + nn.ReLU(), + nn.Dropout(0.25), + nn.Linear(512, 10), + nn.ReLU(), + ) + + def forward(self, x): + x = self.flatten(x) + logits = self.linear_relu_stack(x) + return logits + + +def train_func_per_worker(config: Dict): + lr = config["lr"] + epochs = config["epochs"] + batch_size = config["batch_size_per_worker"] + + # Get dataloaders inside the worker training function + train_dataloader, test_dataloader = get_dataloaders(batch_size=batch_size) + + # [1] Prepare Dataloader for distributed training + # Shard the datasets among workers and move batches to the correct device + # ======================================================================= + train_dataloader = ray.train.torch.prepare_data_loader(train_dataloader) + test_dataloader = ray.train.torch.prepare_data_loader(test_dataloader) + + model = NeuralNetwork() + + # [2] Prepare and wrap your model with DistributedDataParallel + # Move the model to the correct GPU/CPU device + # ============================================================ + model = ray.train.torch.prepare_model(model) + + loss_fn = nn.CrossEntropyLoss() + optimizer = torch.optim.SGD(model.parameters(), lr=lr, momentum=0.9) + + # Model training loop + for epoch in range(epochs): + if ray.train.get_context().get_world_size() > 1: + # Required for the distributed sampler to shuffle properly across epochs. + train_dataloader.sampler.set_epoch(epoch) + + model.train() + for X, y in tqdm(train_dataloader, desc=f"Train Epoch {epoch}"): + pred = model(X) + loss = loss_fn(pred, y) + + optimizer.zero_grad() + loss.backward() + optimizer.step() + + model.eval() + test_loss, num_correct, num_total = 0, 0, 0 + with torch.no_grad(): + for X, y in tqdm(test_dataloader, desc=f"Test Epoch {epoch}"): + pred = model(X) + loss = loss_fn(pred, y) + + test_loss += loss.item() + num_total += y.shape[0] + num_correct += (pred.argmax(1) == y).sum().item() + + test_loss /= len(test_dataloader) + accuracy = num_correct / num_total + + # [3] Report metrics to Ray Train + # =============================== + ray.train.report(metrics={"loss": test_loss, "accuracy": accuracy}) + + +def train_fashion_mnist(num_workers=5, use_gpu=False): + global_batch_size = 32 + + train_config = { + "lr": 1e-3, + "epochs": 1, # artifically set low to finish quickly + "batch_size_per_worker": global_batch_size // num_workers, + } + + # Configure computation resources + scaling_config = ScalingConfig(num_workers=num_workers, use_gpu=use_gpu) + + # Initialize a Ray TorchTrainer + trainer = TorchTrainer( + train_loop_per_worker=train_func_per_worker, + train_loop_config=train_config, + scaling_config=scaling_config, + ) + + # [4] Start distributed training + # Run `train_func_per_worker` on all workers + # ============================================= + result = trainer.fit() + print(f"Training result: {result}") + + +if __name__ == "__main__": + ray.init("auto") + train_fashion_mnist(num_workers=10, use_gpu=False) \ No newline at end of file diff --git a/ray-integration/backstage-templates/ray-serve/skeleton/catalog-info.yaml b/ray-integration/backstage-templates/ray-serve/skeleton/catalog-info.yaml new file mode 100644 index 0000000..c3e5646 --- /dev/null +++ b/ray-integration/backstage-templates/ray-serve/skeleton/catalog-info.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: ${{values.name | dump}} + description: This is for Ray Serve + annotations: + backstage.io/kubernetes-label-selector: 'entity-id=${{values.name}}' + backstage.io/kubernetes-namespace: argo + argocd/app-name: ${{values.name | dump}} + argo-workflows.cnoe.io/label-selector: env=dev,entity-id=${{values.name}} + argo-workflows.cnoe.io/cluster-name: local + apache-ray.cnoe.io/label-selector: env=dev,entity-id=${{values.name}} + apache-ray.cnoe.io/cluster-name: local +spec: + owner: guest + lifecycle: experimental + type: service \ No newline at end of file diff --git a/ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml b/ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml new file mode 100644 index 0000000..a308074 --- /dev/null +++ b/ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml @@ -0,0 +1,95 @@ +# Make sure to increase resource requests and limits before using this example in production. +# For examples with more realistic resource configuration, see +# ray-cluster.complete.large.yaml and +# ray-cluster.autoscaler.large.yaml. +apiVersion: ray.io/v1 +kind: RayService +metadata: + name: "ray-service-${{values.name}}" +spec: + # serveConfigV2 takes a yaml multi-line scalar, which should be a Ray Serve multi-application config. See https://docs.ray.io/en/latest/serve/multi-app.html. + serveConfigV2: | + applications: + - name: text_ml_app + import_path: text_ml.app + route_prefix: /summarize_translate + runtime_env: + working_dir: "${{values.rayServeFile}}" + pip: + - torch + - transformers + deployments: + - name: Translator + num_replicas: 4 + ray_actor_options: + num_cpus: 0.2 + user_config: + language: french + - name: Summarizer + num_replicas: 4 + ray_actor_options: + num_cpus: 0.2 + rayClusterConfig: + rayVersion: '2.34.0' # should match the Ray version in the image of the containers + enableInTreeAutoscaling: true + autoscalerOptions: + upscalingMode: Conservative + idleTimeoutSeconds: 120 + ######################headGroupSpecs################################# + # Ray head pod template. + headGroupSpec: + # The `rayStartParams` are used to configure the `ray start` command. + # See https://github.com/ray-project/kuberay/blob/master/docs/guidance/rayStartParams.md for the default settings of `rayStartParams` in KubeRay. + # See https://docs.ray.io/en/latest/cluster/cli.html#ray-start for all available options in `rayStartParams`. + rayStartParams: + dashboard-host: '0.0.0.0' + #pod template + template: + spec: + containers: + - name: ray-head + image: rayproject/ray:2.34.0 + resources: + limits: + cpu: 2 + memory: 4Gi + requests: + cpu: 2 + memory: 4Gi + ports: + - containerPort: 6379 + name: gcs-server + - containerPort: 8265 # Ray dashboard + name: dashboard + - containerPort: 10001 + name: client + - containerPort: 8000 + name: serve + workerGroupSpecs: + # the pod replicas in this group typed worker + - replicas: 1 + minReplicas: 1 + maxReplicas: 5 + # logical group name, for this called small-group, also can be functional + groupName: small-group + # The `rayStartParams` are used to configure the `ray start` command. + # See https://github.com/ray-project/kuberay/blob/master/docs/guidance/rayStartParams.md for the default settings of `rayStartParams` in KubeRay. + # See https://docs.ray.io/en/latest/cluster/cli.html#ray-start for all available options in `rayStartParams`. + rayStartParams: {} + #pod template + template: + spec: + containers: + - name: ray-worker # must consist of lower case alphanumeric characters or '-', and must start and end with an alphanumeric character (e.g. 'my-name', or '123-abc' + image: rayproject/ray:2.34.0 + lifecycle: + preStop: + exec: + command: ["/bin/sh","-c","ray stop"] + resources: + limits: + cpu: "1" + memory: "4Gi" + requests: + cpu: "500m" + memory: "2Gi" \ No newline at end of file diff --git a/ray-integration/backstage-templates/ray-serve/template-ray-serve.yaml b/ray-integration/backstage-templates/ray-serve/template-ray-serve.yaml new file mode 100644 index 0000000..29aa246 --- /dev/null +++ b/ray-integration/backstage-templates/ray-serve/template-ray-serve.yaml @@ -0,0 +1,62 @@ +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + description: Creates Ray Service on Kubernetes + name: ray-serve-kubernetes + title: Ray Service on Kubernetes +spec: + owner: guest + type: service + parameters: + - title: Configuration Options + required: + - name + properties: + name: + type: string + description: Name of this Ray Service + rayServeFile: + type: string + default: "https://github.com/mlops-on-kubernetes/Book/raw/main/Chapter%206/serve-config.zip" + description: Path to your Ray Service Multi-application config zip file + repoUrl: + default: gitea.elamaras.people.aws.dev + title: Repo URL of your Gitea Repo integrated with Backstage + type: string + steps: + - id: template + name: Generating component + action: fetch:template + input: + url: ./skeleton + values: + name: ${{parameters.name}} + rayServeFile: ${{parameters.rayServeFile}} + - id: publish + name: Publishing to a gitea git repository + action: publish:gitea + input: + description: This is an Ray Serve app Repo + repoUrl: cnoe.localtest.me:8443/gitea?repo=${{parameters.name}} + defaultBranch: main + - id: create-argocd-app + name: Create ArgoCD App + action: cnoe:create-argocd-app + input: + appName: ${{parameters.name}} + appNamespace: ray + argoInstance: in-cluster + projectName: default + repoUrl: https://cnoe.localtest.me:8443/gitea/giteaAdmin/${{parameters.name}} + path: "manifests" + - id: register + name: Register + action: catalog:register + input: + repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} + catalogInfoPath: 'catalog-info.yaml' + output: + links: + - title: Open in catalog + icon: catalog + entityRef: ${{ steps['register'].output.entityRef }} \ No newline at end of file diff --git a/ray-integration/ray-operator-crds.yaml b/ray-integration/ray-operator-crds.yaml new file mode 100644 index 0000000..f932f37 --- /dev/null +++ b/ray-integration/ray-operator-crds.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: ray-operator-crds + namespace: argocd + labels: + env: dev + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://github.com/ray-project/kuberay + targetRevision: v1.1.1 + path: helm-chart/kuberay-operator/crds + destination: + server: "https://kubernetes.default.svc" + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - Replace=true \ No newline at end of file diff --git a/ray-integration/ray-operator.yaml b/ray-integration/ray-operator.yaml new file mode 100644 index 0000000..dfc800e --- /dev/null +++ b/ray-integration/ray-operator.yaml @@ -0,0 +1,26 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: ray-operator + namespace: argocd + labels: + env: dev + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://github.com/ray-project/kuberay + targetRevision: v1.1.1 + path: helm-chart/kuberay-operator + helm: + skipCrds: true + destination: + server: https://kubernetes.default.svc + namespace: ray + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true \ No newline at end of file From 00c0db06cf2a6848902a37e2a663aa9868e643e4 Mon Sep 17 00:00:00 2001 From: Elamaran Shanmugam Date: Tue, 11 Feb 2025 19:16:10 +0000 Subject: [PATCH 2/5] PR Feedback Signed-off-by: Elamaran Shanmugam --- ray-integration/README.md | 6 +++--- .../backstage-templates/catalog-info.yaml | 17 ----------------- .../entities/catalog-info.yaml | 1 + .../ray-serve/sample/pytorch-sample.py | 2 +- .../ray-serve/skeleton/catalog-info.yaml | 0 .../ray-serve/skeleton/manifests/ray-serve.yaml | 3 --- .../entities}/ray-serve/template-ray-serve.yaml | 0 7 files changed, 5 insertions(+), 24 deletions(-) delete mode 100644 ray-integration/backstage-templates/catalog-info.yaml rename {ray-integration/backstage-templates => ref-implementation/backstage-templates/entities}/ray-serve/sample/pytorch-sample.py (98%) rename {ray-integration/backstage-templates => ref-implementation/backstage-templates/entities}/ray-serve/skeleton/catalog-info.yaml (100%) rename {ray-integration/backstage-templates => ref-implementation/backstage-templates/entities}/ray-serve/skeleton/manifests/ray-serve.yaml (96%) rename {ray-integration/backstage-templates => ref-implementation/backstage-templates/entities}/ray-serve/template-ray-serve.yaml (100%) diff --git a/ray-integration/README.md b/ray-integration/README.md index 1f9e66e..4147262 100644 --- a/ray-integration/README.md +++ b/ray-integration/README.md @@ -7,7 +7,7 @@ Please use the following command to deploy ray using `idpbuilder`: ```bash idpbuilder create \ --use-path-routing \ - --p https://github.com/cnoe-io/stacks//ray-integration + -p https://github.com/cnoe-io/stacks//ray-integration ``` Notice that you can add Ray to the reference implementation: @@ -15,8 +15,8 @@ Notice that you can add Ray to the reference implementation: ```bash idpbuilder create \ --use-path-routing \ - --p https://github.com/cnoe-io/stacks//ref-implementation - --p https://github.com/cnoe-io/stacks//ray-integration + -p https://github.com/cnoe-io/stacks//ref-implementation \ + -p https://github.com/cnoe-io/stacks//ray-integration ``` ## What is installed? diff --git a/ray-integration/backstage-templates/catalog-info.yaml b/ray-integration/backstage-templates/catalog-info.yaml deleted file mode 100644 index 64eb925..0000000 --- a/ray-integration/backstage-templates/catalog-info.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Location -metadata: - name: basic-example-templates - description: A collection of example templates -spec: - targets: - - ./ray-serve/template-ray-serve.yaml ---- -apiVersion: backstage.io/v1alpha1 -kind: Location -metadata: - name: basic-organization - description: Basic organization data -spec: - targets: - - ./organization/guests.yaml diff --git a/ref-implementation/backstage-templates/entities/catalog-info.yaml b/ref-implementation/backstage-templates/entities/catalog-info.yaml index f49a7bb..65bfbaf 100644 --- a/ref-implementation/backstage-templates/entities/catalog-info.yaml +++ b/ref-implementation/backstage-templates/entities/catalog-info.yaml @@ -8,6 +8,7 @@ spec: - ./basic/template.yaml - ./argo-workflows/template.yaml - ./app-with-bucket/template.yaml + - ./ray-serve/template-ray-serve.yaml --- apiVersion: backstage.io/v1alpha1 kind: Location diff --git a/ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py b/ref-implementation/backstage-templates/entities/ray-serve/sample/pytorch-sample.py similarity index 98% rename from ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py rename to ref-implementation/backstage-templates/entities/ray-serve/sample/pytorch-sample.py index 4efee1f..f37716c 100644 --- a/ray-integration/backstage-templates/ray-serve/sample/pytorch-sample.py +++ b/ref-implementation/backstage-templates/entities/ray-serve/sample/pytorch-sample.py @@ -128,7 +128,7 @@ def train_fashion_mnist(num_workers=5, use_gpu=False): train_config = { "lr": 1e-3, - "epochs": 1, # artifically set low to finish quickly + "epochs": 1, # artificially set low to finish quickly "batch_size_per_worker": global_batch_size // num_workers, } diff --git a/ray-integration/backstage-templates/ray-serve/skeleton/catalog-info.yaml b/ref-implementation/backstage-templates/entities/ray-serve/skeleton/catalog-info.yaml similarity index 100% rename from ray-integration/backstage-templates/ray-serve/skeleton/catalog-info.yaml rename to ref-implementation/backstage-templates/entities/ray-serve/skeleton/catalog-info.yaml diff --git a/ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml b/ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml similarity index 96% rename from ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml rename to ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml index a308074..afc32d1 100644 --- a/ray-integration/backstage-templates/ray-serve/skeleton/manifests/ray-serve.yaml +++ b/ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml @@ -1,7 +1,4 @@ # Make sure to increase resource requests and limits before using this example in production. -# For examples with more realistic resource configuration, see -# ray-cluster.complete.large.yaml and -# ray-cluster.autoscaler.large.yaml. apiVersion: ray.io/v1 kind: RayService metadata: diff --git a/ray-integration/backstage-templates/ray-serve/template-ray-serve.yaml b/ref-implementation/backstage-templates/entities/ray-serve/template-ray-serve.yaml similarity index 100% rename from ray-integration/backstage-templates/ray-serve/template-ray-serve.yaml rename to ref-implementation/backstage-templates/entities/ray-serve/template-ray-serve.yaml From 56eef7341c41844a33c623f101828111acb19edc Mon Sep 17 00:00:00 2001 From: Elamaran Shanmugam Date: Tue, 11 Feb 2025 19:18:42 +0000 Subject: [PATCH 3/5] PR Feedback Signed-off-by: Elamaran Shanmugam --- dapr-integration/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dapr-integration/README.md b/dapr-integration/README.md index f74e559..cf348e7 100644 --- a/dapr-integration/README.md +++ b/dapr-integration/README.md @@ -7,7 +7,7 @@ Please use the following command to deploy Dapr using `idpbuilder`: ```bash idpbuilder create \ --use-path-routing \ - --p https://github.com/cnoe-io/stacks//dapr-integrations + -p https://github.com/cnoe-io/stacks//dapr-integrations \ ``` Notice that you can add Dapr to the reference implementation: @@ -15,8 +15,8 @@ Notice that you can add Dapr to the reference implementation: ```bash idpbuilder create \ --use-path-routing \ - --p https://github.com/cnoe-io/stacks//ref-implementation - --p https://github.com/cnoe-io/stacks//dapr-integrations + -p https://github.com/cnoe-io/stacks//ref-implementation \ + -p https://github.com/cnoe-io/stacks//dapr-integrations ``` ## What is installed? From d87305bc635da121eb95d16a5aa2318bc39f49c9 Mon Sep 17 00:00:00 2001 From: Elamaran Shanmugam Date: Tue, 11 Feb 2025 20:33:04 +0000 Subject: [PATCH 4/5] PR COmments --- .../entities/ray-serve/skeleton/manifests/ray-serve.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml b/ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml index afc32d1..0004f00 100644 --- a/ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml +++ b/ref-implementation/backstage-templates/entities/ray-serve/skeleton/manifests/ray-serve.yaml @@ -48,11 +48,11 @@ spec: image: rayproject/ray:2.34.0 resources: limits: - cpu: 2 - memory: 4Gi + cpu: 1 + memory: 1Gi requests: - cpu: 2 - memory: 4Gi + cpu: 1 + memory: 1Gi ports: - containerPort: 6379 name: gcs-server From 42c69ec8af0a31ce2af33d2c992beaa9256e491b Mon Sep 17 00:00:00 2001 From: Elamaran Shanmugam Date: Wed, 12 Feb 2025 02:09:34 +0000 Subject: [PATCH 5/5] Removing GITEA reference --- .../entities/ray-serve/template-ray-serve.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ref-implementation/backstage-templates/entities/ray-serve/template-ray-serve.yaml b/ref-implementation/backstage-templates/entities/ray-serve/template-ray-serve.yaml index 29aa246..f9f619a 100644 --- a/ref-implementation/backstage-templates/entities/ray-serve/template-ray-serve.yaml +++ b/ref-implementation/backstage-templates/entities/ray-serve/template-ray-serve.yaml @@ -19,10 +19,6 @@ spec: type: string default: "https://github.com/mlops-on-kubernetes/Book/raw/main/Chapter%206/serve-config.zip" description: Path to your Ray Service Multi-application config zip file - repoUrl: - default: gitea.elamaras.people.aws.dev - title: Repo URL of your Gitea Repo integrated with Backstage - type: string steps: - id: template name: Generating component