From f9a05bac335863e5cd83690d3ccd8e77486fea08 Mon Sep 17 00:00:00 2001 From: Tommy Li Date: Tue, 13 Jul 2021 13:44:52 -0700 Subject: [PATCH] Add MLX readonly install k8s manifests (#126) * add minimum k8s install * update manifests to support readonly deployment * optimize and update manifests and quickstart files * remove api access token config * change default secret name * update manifests to be more feasible * add missing namespace * Update main readme to a compacted setup of MLX * fix initdb config mounting --- README.md | 2 +- docs/mlx-setup.md | 18 +++- manifests/base/kustomization.yaml | 6 +- manifests/base/mlx-api-vs.yaml | 36 +++++++ .../base/mlx-deployments/kustomization.yaml | 19 ++++ .../base/{ => mlx-deployments}/mlx-api.yaml | 28 ----- .../base/{ => mlx-deployments}/mlx-ui.yaml | 24 ----- manifests/base/mlx-ui-vs.yaml | 36 +++++++ manifests/read-only-k8s/config.yaml | 34 ++++++ manifests/read-only-k8s/init-jobs.yaml | 62 +++++++++++ manifests/read-only-k8s/k8s-ingress.yaml | 24 +++++ manifests/read-only-k8s/kustomization.yaml | 43 ++++++++ manifests/read-only-k8s/minio.yaml | 98 +++++++++++++++++ manifests/read-only-k8s/mlx-api-patch.yaml | 15 +++ manifests/read-only-k8s/mlx-ui-patch.yaml | 17 +++ manifests/read-only-k8s/mysql.yaml | 102 ++++++++++++++++++ manifests/read-only-k8s/namespace.yaml | 4 + manifests/read-only-k8s/params.yaml | 9 ++ quickstart/README.md | 8 +- quickstart/catalog_upload.json | 20 ++++ 20 files changed, 544 insertions(+), 61 deletions(-) create mode 100644 manifests/base/mlx-api-vs.yaml create mode 100644 manifests/base/mlx-deployments/kustomization.yaml rename manifests/base/{ => mlx-deployments}/mlx-api.yaml (87%) rename manifests/base/{ => mlx-deployments}/mlx-ui.yaml (86%) create mode 100644 manifests/base/mlx-ui-vs.yaml create mode 100644 manifests/read-only-k8s/config.yaml create mode 100644 manifests/read-only-k8s/init-jobs.yaml create mode 100644 manifests/read-only-k8s/k8s-ingress.yaml create mode 100644 manifests/read-only-k8s/kustomization.yaml create mode 100644 manifests/read-only-k8s/minio.yaml create mode 100644 manifests/read-only-k8s/mlx-api-patch.yaml create mode 100644 manifests/read-only-k8s/mlx-ui-patch.yaml create mode 100644 manifests/read-only-k8s/mysql.yaml create mode 100644 manifests/read-only-k8s/namespace.yaml create mode 100644 manifests/read-only-k8s/params.yaml diff --git a/README.md b/README.md index 106b646e..20723ee2 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ For a full deployment, we use [Kubeflow Kfctl](https://github.com/kubeflow/kfctl * #### [MLX using Docker Compose (Asset Catalog Only)](./quickstart) -* #### [MLX Deployment on Kubernetes or OpenShift](./docs/mlx-install-with-kubeflow.md) +* #### [MLX Deployment on Kubernetes or OpenShift](./docs/mlx-setup.md) * #### [MLX on an existing Kubeflow Cluster](./docs/install-mlx-on-kubeflow.md) diff --git a/docs/mlx-setup.md b/docs/mlx-setup.md index 730b16e7..9b2bf403 100644 --- a/docs/mlx-setup.md +++ b/docs/mlx-setup.md @@ -8,11 +8,25 @@ This minimum MLX contains: - Tekton Pipeline - MLX -We will be using [kustomize 3.2.0](https://github.com/kubernetes-sigs/kustomize/releases/tag/v3.2.0) to align with Kubeflow's requirements because we will be using kubeflow pipelines as the MLX pipeline engine. -``` +We will be using [kustomize 3.2.0](https://github.com/kubernetes-sigs/kustomize/releases/tag/v3.2.0) to align with Kubeflow's requirements because we will be using kubeflow pipelines as the MLX pipeline engine. + +```shell git clone https://github.com/machine-learning-exchange/manifests -b mlx-single-user cd manifests # run the below command two times if the CRDs take too long to provision. while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done ``` Then access the MLX page using http://:30380/mlx/ + + +## Deploy the MLX ReadOnly mode on an Existing Kubernetes Cluster + +To deploy the MLX ReadOnly mode on an existing Kubernetes Cluster, run the following commands + +This MLX ReadOnly mode only contains MLX ReadOnly deployment. + +```shell +git clone https://github.com/machine-learning-exchange/mlx +cd mlx +kubectl apply -k manifests/read-only-k8s +``` diff --git a/manifests/base/kustomization.yaml b/manifests/base/kustomization.yaml index a5a3e01e..b2fd244a 100644 --- a/manifests/base/kustomization.yaml +++ b/manifests/base/kustomization.yaml @@ -14,7 +14,9 @@ # limitations under the License. apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization +bases: + - mlx-deployments resources: - - mlx-api.yaml - - mlx-ui.yaml + - mlx-api-vs.yaml + - mlx-ui-vs.yaml - mlx-profile.yaml diff --git a/manifests/base/mlx-api-vs.yaml b/manifests/base/mlx-api-vs.yaml new file mode 100644 index 00000000..6e3264ec --- /dev/null +++ b/manifests/base/mlx-api-vs.yaml @@ -0,0 +1,36 @@ +# Copyright 2021 IBM Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: mlx-api + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /apis/v1alpha1 + rewrite: + uri: /apis/v1alpha1 + route: + - destination: + host: mlx-api.kubeflow.svc.cluster.local + port: + number: 80 + timeout: 300s diff --git a/manifests/base/mlx-deployments/kustomization.yaml b/manifests/base/mlx-deployments/kustomization.yaml new file mode 100644 index 00000000..88d3b6d5 --- /dev/null +++ b/manifests/base/mlx-deployments/kustomization.yaml @@ -0,0 +1,19 @@ + +# Copyright 2021 IBM Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - mlx-api.yaml + - mlx-ui.yaml diff --git a/manifests/base/mlx-api.yaml b/manifests/base/mlx-deployments/mlx-api.yaml similarity index 87% rename from manifests/base/mlx-api.yaml rename to manifests/base/mlx-deployments/mlx-api.yaml index db6819a8..c69e4dfc 100644 --- a/manifests/base/mlx-api.yaml +++ b/manifests/base/mlx-deployments/mlx-api.yaml @@ -20,7 +20,6 @@ metadata: service: mlx-api environment: dev spec: - type: NodePort ports: - name: mlx-api port: 80 @@ -79,10 +78,6 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace - resources: - limits: - cpu: 250m - memory: 256Mi volumeMounts: - name: context mountPath: "/root/.config/kfp" @@ -137,26 +132,3 @@ kind: ServiceAccount metadata: name: mlx-api namespace: kubeflow ---- -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: mlx-api - namespace: kubeflow -spec: - gateways: - - kubeflow-gateway - hosts: - - '*' - http: - - match: - - uri: - prefix: /apis/v1alpha1 - rewrite: - uri: /apis/v1alpha1 - route: - - destination: - host: mlx-api.kubeflow.svc.cluster.local - port: - number: 80 - timeout: 300s diff --git a/manifests/base/mlx-ui.yaml b/manifests/base/mlx-deployments/mlx-ui.yaml similarity index 86% rename from manifests/base/mlx-ui.yaml rename to manifests/base/mlx-deployments/mlx-ui.yaml index 3dc3ab04..435a25f1 100644 --- a/manifests/base/mlx-ui.yaml +++ b/manifests/base/mlx-deployments/mlx-ui.yaml @@ -99,29 +99,5 @@ spec: - port: 80 protocol: TCP targetPort: 3000 - type: NodePort selector: service: mlx-ui ---- -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: mlx-ui - namespace: kubeflow -spec: - gateways: - - kubeflow-gateway - hosts: - - '*' - http: - - match: - - uri: - prefix: /mlx - rewrite: - uri: /mlx - route: - - destination: - host: mlx-ui.kubeflow.svc.cluster.local - port: - number: 80 - timeout: 300s diff --git a/manifests/base/mlx-ui-vs.yaml b/manifests/base/mlx-ui-vs.yaml new file mode 100644 index 00000000..ef9b9a8e --- /dev/null +++ b/manifests/base/mlx-ui-vs.yaml @@ -0,0 +1,36 @@ +# Copyright 2021 IBM Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: mlx-ui + namespace: kubeflow +spec: + gateways: + - kubeflow-gateway + hosts: + - '*' + http: + - match: + - uri: + prefix: /mlx + rewrite: + uri: /mlx + route: + - destination: + host: mlx-ui.kubeflow.svc.cluster.local + port: + number: 80 + timeout: 300s diff --git a/manifests/read-only-k8s/config.yaml b/manifests/read-only-k8s/config.yaml new file mode 100644 index 00000000..bbb20659 --- /dev/null +++ b/manifests/read-only-k8s/config.yaml @@ -0,0 +1,34 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: mysql-initdb-config + namespace: kubeflow +data: + initdb.sql: | + CREATE TABLE IF NOT EXISTS `pipelines` ( + `UUID` varchar(255) NOT NULL, + `CreatedAtInSec` bigint(20) NOT NULL, + `Name` varchar(255) NOT NULL, + `Description` longtext NOT NULL, + `Parameters` longtext NOT NULL, + `Status` varchar(255) NOT NULL, + `DefaultVersionId` varchar(255) DEFAULT NULL, + `Namespace` varchar(63) DEFAULT '', + PRIMARY KEY (`UUID`), + UNIQUE KEY `name_namespace_index` (`Name`,`Namespace`) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + CREATE TABLE IF NOT EXISTS `pipeline_versions` ( + `UUID` varchar(255) NOT NULL, + `CreatedAtInSec` bigint(20) NOT NULL, + `Name` varchar(255) NOT NULL, + `Parameters` longtext NOT NULL, + `PipelineId` varchar(255) NOT NULL, + `Status` varchar(255) NOT NULL, + `CodeSourceUrl` varchar(255) DEFAULT NULL, + PRIMARY KEY (`UUID`), + UNIQUE KEY `idx_pipelineid_name` (`Name`,`PipelineId`), + KEY `idx_pipeline_versions_CreatedAtInSec` (`CreatedAtInSec`), + KEY `idx_pipeline_versions_PipelineId` (`PipelineId`), + CONSTRAINT `pipeline_versions_PipelineId_pipelines_UUID_foreign` FOREIGN KEY (`PipelineId`) REFERENCES `pipelines` (`UUID`) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/manifests/read-only-k8s/init-jobs.yaml b/manifests/read-only-k8s/init-jobs.yaml new file mode 100644 index 00000000..5973983a --- /dev/null +++ b/manifests/read-only-k8s/init-jobs.yaml @@ -0,0 +1,62 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: miniosetup + namespace: kubeflow + labels: + app: miniosetup +spec: + backoffLimit: 10 + template: + spec: + restartPolicy: Never + containers: + - args: + - | + /usr/bin/mc config host add miniohost http://minio-service:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY; + /usr/bin/mc mb -p miniohost/mlpipeline; + /usr/bin/mc policy set download miniohost/mlpipeline; + command: + - /bin/sh + - -c + env: + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + name: mlpipeline-minio-artifact + key: accesskey + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + name: mlpipeline-minio-artifact + key: secretkey + image: minio/mc + name: minio +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: katalog + namespace: kubeflow + labels: + app: katalog +spec: + backoffLimit: 10 + template: + spec: + restartPolicy: Never + containers: + - command: + - /bin/sh + - -c + - | + cd /tmp && + curl -L --output init_catalog.sh https://raw.githubusercontent.com/machine-learning-exchange/mlx/main/quickstart/init_catalog.sh && + curl -L --output catalog_upload.json https://raw.githubusercontent.com/machine-learning-exchange/mlx/main/bootstrapper/catalog_upload.json && + chmod 777 init_catalog.sh && + ./init_catalog.sh + env: + - name: MLX_API_SERVER + value: mlx-api:80 + image: curlimages/curl + name: katalog diff --git a/manifests/read-only-k8s/k8s-ingress.yaml b/manifests/read-only-k8s/k8s-ingress.yaml new file mode 100644 index 00000000..a8da953d --- /dev/null +++ b/manifests/read-only-k8s/k8s-ingress.yaml @@ -0,0 +1,24 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: mlx-ingress + namespace: kubeflow + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + tls: + - hosts: + - ml-exchange.org + secretName: mlx-certs + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: mlx-ui + port: + number: 80 + host: $(ingress-domain) + diff --git a/manifests/read-only-k8s/kustomization.yaml b/manifests/read-only-k8s/kustomization.yaml new file mode 100644 index 00000000..cd4dd3df --- /dev/null +++ b/manifests/read-only-k8s/kustomization.yaml @@ -0,0 +1,43 @@ +# Copyright 2021 IBM Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +bases: + - ../base/mlx-deployments +resources: + - minio.yaml + - mysql.yaml + - namespace.yaml + - k8s-ingress.yaml + - init-jobs.yaml + - config.yaml +patchesStrategicMerge: + - mlx-api-patch.yaml + - mlx-ui-patch.yaml +configMapGenerator: +- name: mlx-parameters + literals: + # Update the credentials for the below fields before apply. + - ingress-domain=ml-exchange.org +generatorOptions: + disableNameSuffixHash: true +vars: +- name: ingress-domain + objref: + kind: ConfigMap + name: mlx-parameters + apiVersion: v1 + fieldref: + fieldpath: data.ingress-domain +configurations: +- params.yaml diff --git a/manifests/read-only-k8s/minio.yaml b/manifests/read-only-k8s/minio.yaml new file mode 100644 index 00000000..abe0e5b7 --- /dev/null +++ b/manifests/read-only-k8s/minio.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: Service +metadata: + name: minio-service + namespace: kubeflow +spec: + ports: + - name: http + port: 9000 + protocol: TCP + targetPort: 9000 + selector: + app: minio +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: minio + namespace: kubeflow + labels: + app: minio +spec: + selector: + matchLabels: + app: minio + strategy: + type: Recreate + template: + metadata: + labels: + app: minio + spec: + containers: + - args: + - server + - /data + env: + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + name: mlpipeline-minio-artifact + key: accesskey + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + name: mlpipeline-minio-artifact + key: secretkey + image: gcr.io/ml-pipeline/minio:RELEASE.2019-08-14T20-37-41Z-license-compliance + name: minio + ports: + - containerPort: 9000 + volumeMounts: + - mountPath: /data + name: data + subPath: minio + volumes: + - name: data + persistentVolumeClaim: + claimName: minio-pvc +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: minio-pvc + namespace: kubeflow +spec: + # storageClassName: "" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +kind: Secret +apiVersion: v1 +metadata: + name: mlpipeline-minio-artifact + namespace: kubeflow +stringData: + accesskey: minio + secretkey: minio123 +# For free tier Kubernetes Cluster +# --- +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: local-volume-1 +# namespace: kubeflow +# labels: +# type: local +# spec: +# capacity: +# storage: 20Gi +# accessModes: +# - ReadWriteOnce +# hostPath: +# path: /tmp/data +# persistentVolumeReclaimPolicy: Recycle diff --git a/manifests/read-only-k8s/mlx-api-patch.yaml b/manifests/read-only-k8s/mlx-api-patch.yaml new file mode 100644 index 00000000..011b003c --- /dev/null +++ b/manifests/read-only-k8s/mlx-api-patch.yaml @@ -0,0 +1,15 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mlx-api + namespace: kubeflow +spec: + template: + spec: + containers: + - name: mlx-api-server + env: + - name: ML_PIPELINE_SERVICE_HOST + value: UNAVAILABLE + - name: ML_PIPELINE_SERVICE_PORT + value: UNAVAILABLE diff --git a/manifests/read-only-k8s/mlx-ui-patch.yaml b/manifests/read-only-k8s/mlx-ui-patch.yaml new file mode 100644 index 00000000..3eb3026a --- /dev/null +++ b/manifests/read-only-k8s/mlx-ui-patch.yaml @@ -0,0 +1,17 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mlx-ui + namespace: kubeflow +spec: + template: + spec: + containers: + - name: mlx-ui + env: + - name: REACT_APP_RUN + value: "false" + - name: REACT_APP_DISABLE_LOGIN + value: "false" + - name: REACT_APP_BASE_PATH + value: "" diff --git a/manifests/read-only-k8s/mysql.yaml b/manifests/read-only-k8s/mysql.yaml new file mode 100644 index 00000000..bdf8500d --- /dev/null +++ b/manifests/read-only-k8s/mysql.yaml @@ -0,0 +1,102 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql + namespace: kubeflow +spec: + ports: + - # We cannot have name: mysql here, because some requests through istio fail with it. + port: 3306 + protocol: TCP + targetPort: 3306 + selector: + app: mysql +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mysql + namespace: kubeflow +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-pv-claim + namespace: kubeflow +spec: + # storageClassName: "" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql + namespace: kubeflow + labels: + app: mysql +spec: + selector: + matchLabels: + app: mysql + strategy: + type: Recreate + template: + metadata: + labels: + app: mysql + spec: + serviceAccountName: mysql + containers: + # https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_ignore-db-dir + # Ext4, Btrfs etc. volumes root directories have a lost+found directory that should not be treated as a database. + - args: + - --ignore-db-dir=lost+found + - --datadir + - /var/lib/mysql + env: + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "true" + - name: MYSQL_DATABASE + value: "mlpipeline" + image: gcr.io/ml-pipeline/mysql:5.7 + name: mysql + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - mountPath: /var/lib/mysql + name: mysql-persistent-storage + - name: mysql-initdb + mountPath: /docker-entrypoint-initdb.d + resources: + requests: + cpu: 100m + memory: 800Mi + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-pv-claim + - name: mysql-initdb + configMap: + name: mysql-initdb-config +# For free tier Kubernetes Cluster +# --- +# apiVersion: v1 +# kind: PersistentVolume +# metadata: +# name: local-volume-2 +# namespace: kubeflow +# labels: +# type: local +# spec: +# capacity: +# storage: 20Gi +# accessModes: +# - ReadWriteOnce +# hostPath: +# path: /tmp/data-2 +# persistentVolumeReclaimPolicy: Recycle diff --git a/manifests/read-only-k8s/namespace.yaml b/manifests/read-only-k8s/namespace.yaml new file mode 100644 index 00000000..7a940e46 --- /dev/null +++ b/manifests/read-only-k8s/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kubeflow diff --git a/manifests/read-only-k8s/params.yaml b/manifests/read-only-k8s/params.yaml new file mode 100644 index 00000000..a8e6bf7f --- /dev/null +++ b/manifests/read-only-k8s/params.yaml @@ -0,0 +1,9 @@ +varReference: +- path: data + kind: Secret +- path: spec/tls/hosts + kind: Ingress +- path: spec/rules/host + kind: Ingress +- path: spec/tls/secretName + kind: Ingress diff --git a/quickstart/README.md b/quickstart/README.md index 61fda33f..2f338f61 100644 --- a/quickstart/README.md +++ b/quickstart/README.md @@ -19,7 +19,7 @@ available with this Docker Compose setup. ## Prerequisites -* Install [Docker Compose](https://docs.docker.com/compose/install/). +* Install [Docker Compose](https://docs.docker.com/compose/install/). * It may be necessary to increase the [Docker resources](https://docs.docker.com/docker-for-mac/#resources) from the default of 2 GB memory to 4 GB. * Approximately 10 GB of free storage @@ -41,11 +41,11 @@ Wait for the containers to start up. When the MLX API and UI are ready, this message should show up in the terminal log: ```Markdown -dashboard_1 | +dashboard_1 | dashboard_1 | ================================================ -dashboard_1 | Open the MLX Dashboard at http://localhost:80/ +dashboard_1 | Open the MLX Dashboard at http://localhost:80/ dashboard_1 | ================================================ -dashboard_1 | +dashboard_1 | ``` Now open a web browser and type `localhost` in the address bar to open the MLX diff --git a/quickstart/catalog_upload.json b/quickstart/catalog_upload.json index 14483fed..e8bc3df2 100644 --- a/quickstart/catalog_upload.json +++ b/quickstart/catalog_upload.json @@ -135,6 +135,26 @@ { "name": "ResourceOp Basic", "url": "https://github.com/kubeflow/kfp-tekton/blob/master/sdk/python/tests/compiler/testdata/resourceop_basic.yaml" + }, + { + "name": "Trusted AI Pipeline", + "url": "https://github.com/machine-learning-exchange/katalog/blob/main/pipeline-samples/trusted-ai-pipeline.yaml" + }, + { + "name": "Watson Machine Learning", + "url": "https://github.com/machine-learning-exchange/katalog/blob/main/pipeline-samples/wml-pipeline.yaml" + }, + { + "name": "Calculation Pipeline", + "url": "https://github.com/machine-learning-exchange/katalog/blob/main/pipeline-samples/calculation-pipeline.yaml" + }, + { + "name": "Katib Early Stopping Experiment", + "url": "https://github.com/machine-learning-exchange/katalog/blob/main/pipeline-samples/katib-pipeline.yaml" + }, + { + "name": "Nested Pipeline", + "url": "https://github.com/machine-learning-exchange/katalog/blob/main/pipeline-samples/nested-pipeline.yaml" } ] }