From 54b0021fee61b06de67940ec91a4ff1391dc5d9b Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Thu, 8 Aug 2024 12:12:59 -0500 Subject: [PATCH 01/11] Create Run:ai directory & README.md placeholder --- cloud-service-providers/runai/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 cloud-service-providers/runai/README.md diff --git a/cloud-service-providers/runai/README.md b/cloud-service-providers/runai/README.md new file mode 100644 index 00000000..185834f5 --- /dev/null +++ b/cloud-service-providers/runai/README.md @@ -0,0 +1 @@ +Lorem ipsum… From 18e6047a36c19835f1d550c199194ea38d277d4b Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 08:37:55 -0500 Subject: [PATCH 02/11] Update README.md runai link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55488fd5..ea2254a0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This repo showcases different ways NVIDIA NIMs can be deployed. This repo contai | | **Open Source Platforms** | | | | | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | | | **Independent Software Vendors** | | -| | | Run.ai (coming soon) | | +| | | [Run.ai (coming soon)] (https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai | | | **Cloud Service Provider Deployments** | **Azure** | | | | | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | | | | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | From 178031dafee39161d947ab9a0290a7bc5e92a2dd Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 08:38:44 -0500 Subject: [PATCH 03/11] Corrected markdown for runai link in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea2254a0..ddf432bb 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This repo showcases different ways NVIDIA NIMs can be deployed. This repo contai | | **Open Source Platforms** | | | | | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | | | **Independent Software Vendors** | | -| | | [Run.ai (coming soon)] (https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai | | +| | | [Run.ai] (https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai) | | | **Cloud Service Provider Deployments** | **Azure** | | | | | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | | | | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | From d07743bbab0b232ce53193b79c7e07239986e60c Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 08:59:18 -0500 Subject: [PATCH 04/11] Update README.md table --- README.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ddf432bb..788db891 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,20 @@ This repo showcases different ways NVIDIA NIMs can be deployed. This repo contai # Deployment Options +**DiY Tools & Guides** | Category | Deployment Option | Description | |------------------------------------|-------------------------------------------------------------|-------------| -| **On-premise Deployments** | **Helm** | | | | | [LLM NIM](https://github.com/NVIDIA/nim-deploy/tree/main/helm/nim-llm) | | | | | LLM NIM on OpenShift Container Platform (coming soon) | | -| | **Open Source Platforms** | | -| | | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | -| | **Independent Software Vendors** | | -| | | [Run.ai] (https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai) | | -| **Cloud Service Provider Deployments** | **Azure** | | +| **Open Source Platform** | | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | +| **Commercial Platform** | **Deployment Guide** | [Run.ai](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai) | | +| **Commercial Platform** | **Deployment Guide** | [Hugging Face NIM Deployment](https://github.com/NVIDIA/nim-deploy/tree/main/docs/hugging-face-nim-deployment) + +**Managed Cloud Services** + +| Category | Deployment Option | Description | +|------------------------------------|-------------------------------------------------------------|-------------| +| **Managed Cloud Services** | **Azure** | | | | | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | | | | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | | | | [Azure prompt flow](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/promptflow) | | @@ -27,9 +31,7 @@ This repo showcases different ways NVIDIA NIMs can be deployed. This repo contai | | | [Google Cloud Vertex AI](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/vertexai/python) | | | | | [Cloud Run](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/cloudrun) | | | | **NVIDIA DGX Cloud** | | -| | | [NVIDIA Cloud Functions](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/nvidia/nvcf) | | -| **Documents** | **Deployment Guide** | | -| | | [Hugging Face NIM Deployment](https://github.com/NVIDIA/nim-deploy/tree/main/docs/hugging-face-nim-deployment) | | +| | | [NVIDIA Cloud Functions](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/nvidia/nvcf) | ## Contributions From f2b0dce1208f83cf39208481dcef4c2fb78f798a Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 10:53:37 -0500 Subject: [PATCH 05/11] More table updates in README.md --- README.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 788db891..07e1d6b6 100644 --- a/README.md +++ b/README.md @@ -6,32 +6,32 @@ This repo showcases different ways NVIDIA NIMs can be deployed. This repo contai # Deployment Options -**DiY Tools & Guides** -| Category | Deployment Option | Description | +**Tools & Guides** +| Category | Type | Description | |------------------------------------|-------------------------------------------------------------|-------------| -| | | [LLM NIM](https://github.com/NVIDIA/nim-deploy/tree/main/helm/nim-llm) | | -| | | LLM NIM on OpenShift Container Platform (coming soon) | | -| **Open Source Platform** | | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | -| **Commercial Platform** | **Deployment Guide** | [Run.ai](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai) | | -| **Commercial Platform** | **Deployment Guide** | [Hugging Face NIM Deployment](https://github.com/NVIDIA/nim-deploy/tree/main/docs/hugging-face-nim-deployment) +| Open Source | Helm Chart(s) | [LLM NIM](https://github.com/NVIDIA/nim-deploy/tree/main/helm/nim-llm) | | +| | | LLM NIM on OpenShift Container Platform (coming soon) | | +| Open Source Platform | Deployment Guide | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | +| Commercial Platform | Deployment Guide | [Run.ai](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai) | | +| Commercial Platform | Deployment Guide | [Hugging Face NIM Deployment](https://github.com/NVIDIA/nim-deploy/tree/main/docs/hugging-face-nim-deployment) **Managed Cloud Services** -| Category | Deployment Option | Description | +| Category | Type | Description | |------------------------------------|-------------------------------------------------------------|-------------| -| **Managed Cloud Services** | **Azure** | | -| | | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | -| | | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | -| | | [Azure prompt flow](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/promptflow) | | -| | **Amazon Web Services** | | -| | | [EKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/eks) | | -| | | [Amazon SageMaker](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/sagemaker) | | -| | **Google Cloud Platform** | | -| | | [GKE Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/gke) | | -| | | [Google Cloud Vertex AI](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/vertexai/python) | | -| | | [Cloud Run](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/cloudrun) | | -| | **NVIDIA DGX Cloud** | | -| | | [NVIDIA Cloud Functions](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/nvidia/nvcf) | +| | | | +| Microsoft Azure | | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | +| Microsoft Azure | | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | +| Microsoft Azure | | [Azure prompt flow](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/promptflow) | | +| | | | +| Amazon Web Services | | [EKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/eks) | | +| Amazon Web Services | | [Amazon SageMaker](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/sagemaker) | | +| | | | +| Google Cloud Platform | | [GKE Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/gke) | | +| Google Cloud Platform | | [Google Cloud Vertex AI](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/vertexai/python) | | +| Google Cloud Platform | | [Cloud Run](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/cloudrun) | | +| | | | +| NVIDIA DGX Cloud | | [NVIDIA Cloud Functions](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/nvidia/nvcf) | ## Contributions From 35f56f0c032b75c4590c0e17bdd9658e6c5bae43 Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 10:55:35 -0500 Subject: [PATCH 06/11] Create README.md placeholder --- docs/runai/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/runai/README.md diff --git a/docs/runai/README.md b/docs/runai/README.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/runai/README.md @@ -0,0 +1 @@ + From 38c1321f0b0bca96c90a412de3eaef3540416e05 Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 10:56:13 -0500 Subject: [PATCH 07/11] Delete cloud-service-providers/runai directory --- cloud-service-providers/runai/README.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 cloud-service-providers/runai/README.md diff --git a/cloud-service-providers/runai/README.md b/cloud-service-providers/runai/README.md deleted file mode 100644 index 185834f5..00000000 --- a/cloud-service-providers/runai/README.md +++ /dev/null @@ -1 +0,0 @@ -Lorem ipsum… From 03a4d5a38245d0b7106d7b43afce1975361faf94 Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 11:21:37 -0500 Subject: [PATCH 08/11] Polish and intro updates for README.md --- README.md | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 07e1d6b6..b5cc346e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ## Introduction -This repo showcases different ways NVIDIA NIMs can be deployed. This repo contains reference implementations, example documents, and architecture guides that can be used as a starting point to deploy multiple NIMs and other NVIDIA microservices into Kubernetes and other production deployment environments. +This repo is intended to aggregate and showcase different ways NVIDIA NIMs can be deployed. It contains reference implementations, deployment guides, examples, and architecture guidance that can be used as a starting point to deploy multiple NIMs and other NVIDIA microservices into Kubernetes and other production deployment environments. Many of the most common NIM deployment and lifecycle scenarios addressed here may be addressed by capabilities afforded by the [NVIDIA NIM Operator](https://github.com/NVIDIA/k8s-nim-operator) as it progresses. > **Note** > The content in this repository is designed to provide reference architectures and best-practices for production-grade deployments and product integrations; however the code is not validated on all platforms and does not come with any level of enterprise support. While the deployments should perform well, please treat this codebase as experimental and a collaborative sandbox. For long-term production deployments that require enterprise support from NVIDIA, looks to the official releases on [NVIDIA NGC](https://ngc.nvidia.com/) which are based on the code in this repo. @@ -9,35 +9,34 @@ This repo showcases different ways NVIDIA NIMs can be deployed. This repo contai **Tools & Guides** | Category | Type | Description | |------------------------------------|-------------------------------------------------------------|-------------| -| Open Source | Helm Chart(s) | [LLM NIM](https://github.com/NVIDIA/nim-deploy/tree/main/helm/nim-llm) | | -| | | LLM NIM on OpenShift Container Platform (coming soon) | | -| Open Source Platform | Deployment Guide | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | -| Commercial Platform | Deployment Guide | [Run.ai](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/runai) | | -| Commercial Platform | Deployment Guide | [Hugging Face NIM Deployment](https://github.com/NVIDIA/nim-deploy/tree/main/docs/hugging-face-nim-deployment) +| Open Source | Helm Chart(s) | [LLM NIM](https://github.com/NVIDIA/nim-deploy/tree/main/helm/nim-llm) | | +| Open Source Platform | Deployment Guide | [KServe](https://github.com/NVIDIA/nim-deploy/tree/main/kserve) | | +| Commercial Platform | Deployment Guide | [Run.ai](https://github.com/NVIDIA/nim-deploy/tree/main/docs/runai) | | +| Commercial Platform | Deployment Guide | [Hugging Face NIM Deployment](https://github.com/NVIDIA/nim-deploy/tree/main/docs/hugging-face-nim-deployment) | | +| | | LLM NIM on OpenShift Container Platform (coming soon) | | **Managed Cloud Services** -| Category | Type | Description | +| Service | Type | Description | |------------------------------------|-------------------------------------------------------------|-------------| -| | | | -| Microsoft Azure | | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | -| Microsoft Azure | | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | -| Microsoft Azure | | [Azure prompt flow](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/promptflow) | | +| | | | +| Microsoft Azure | Deployment Guide | [AKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/aks) | | +| Microsoft Azure | Deployment Guide | [Azure ML](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/azureml) | | +| Microsoft Azure | Deployment Guide | [Azure prompt flow](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/azure/promptflow) | | | | | | -| Amazon Web Services | | [EKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/eks) | | -| Amazon Web Services | | [Amazon SageMaker](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/sagemaker) | | +| Amazon Web Services | Deployment Guide | [EKS Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/eks) | | +| Amazon Web Services | Deployment Guide | [Amazon SageMaker](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/aws/sagemaker) | | | | | | -| Google Cloud Platform | | [GKE Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/gke) | | -| Google Cloud Platform | | [Google Cloud Vertex AI](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/vertexai/python) | | -| Google Cloud Platform | | [Cloud Run](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/cloudrun) | | +| Google Cloud Platform | Deployment Guide | [GKE Managed Kubernetes](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/gke) | | +| Google Cloud Platform | Deployment Guide | [Google Cloud Vertex AI](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/vertexai/python) | | +| Google Cloud Platform | Deployment Guide | [Cloud Run](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/google-cloud/cloudrun) | | +| | | | +| NVIDIA DGX Cloud | Deployment Guide | [NVIDIA Cloud Functions](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/nvidia/nvcf) | | | | | | -| NVIDIA DGX Cloud | | [NVIDIA Cloud Functions](https://github.com/NVIDIA/nim-deploy/tree/main/cloud-service-providers/nvidia/nvcf) | - ## Contributions Contributions are welcome. Developers can contribute by opening a [pull request](https://help.github.com/en/articles/about-pull-requests) and agreeing to the terms in [CONTRIBUTING.MD](CONTRIBUTING.MD). - ## Support and Getting Help Please open an issue on the GitHub project for any questions. All feedback is appreciated, issues, requested features, and new deployment scenarios included. From 8519210b039aa58644fceb2264d390ef6b73d11a Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 12:34:24 -0500 Subject: [PATCH 09/11] Initial runai nim instructions --- docs/runai/README.md | 99 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/docs/runai/README.md b/docs/runai/README.md index 8b137891..2af6d17f 100644 --- a/docs/runai/README.md +++ b/docs/runai/README.md @@ -1 +1,100 @@ +# Deploy NVIDIA NIM microservices on RunAI +This document describes the procedure for deploying NIM Microservice employing helm on a RunAI cluster. + +## Prerequisites +1. Kubernetes cluster +2. RunAI Installed (version \>= 2.18) +3. GPU Operator +4. Further NIM Prerequisites can be found here + ([[https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html]{.underline}](https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html)) +5. Helm installed locally + +## Integration features + +| Feature | Exists | +|------------------------------------|--------------------| +| Deploy through helm CLI | :white_check_mark: | +| Engine capabilities (Scheduling) | :white_check_mark: | +| Visibility (UI + CLI) | :white_check_mark: | +| Submit through RunAI Workload API | | +| Submit through RunAI UI | | + +## Preparation (Single time) + +1. RunAI + a. Create a project to deploy the NIM within (Can be existing + project) + + i. For example: team-a + + b. Enforce RunAI Scheduler in the project's namespace + + i. Kubectl annotate ns runai-team-a + runai/enforce-scheduler-name=true + + ii. [[https://docs.run.ai/v2.18/admin/runai-setup/config/default-scheduler/]{.underline}](https://docs.run.ai/v2.18/admin/runai-setup/config/default-scheduler/) + +2. NVIDIA NGC + + a. Create API Key + Please follow the guidance in the NVIDIA NIM [Getting Started]([https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#option-2-from-ngc](https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#id1)) to generate a properly scoped API key if you haven't already. For illustration purposes the generated key will be incidated as `XXXYYYZZZ` below. + + b. Add NIM Helm repository to deploy NIM charts: + + `helm repo add nemo-ms "https://helm.ngc.nvidia.com/ohlfw0olaadg/ea-participants" --username=\$oauthtoken --password=XXXYYYZZZ` + + c. Create docker registry secret to pull NIM images: + + `kubectl create secret docker-registry -n runai-team-a registry-secret --docker-username=\$oauthtoken --docker-password=XXXYYYZZZ` + + d. Create docker secret to pull models: + + `kubectl create secret generic ngc-api -n runai-team-a --from-literal=NGC_CLI_API_KEY=XXXYYYZZZ` + + +## Deployment (Any time you want to deploy NIM) + +Prepare the values file (changing as needed) values.yaml +``` +initContainers: + ngcInit: + imageName: nvcr.io/ohlfw0olaadg/ea-participants/nim_llm + imageTag: 24.06 + secretName: ngc-api + env: + STORE_MOUNT_PATH: /model-store + NGC_CLI_ORG: ohlfw0olaadg + NGC_CLI_TEAM: ea-participants + NGC_MODEL_NAME: llama2-13b-chat + NGC_MODEL_VERSION: a100x2_fp16_24.06 + NGC_EXE: ngc + DOWNLOAD_NGC_CLI: "true" + NGC_CLI_VERSION: "3.34.1" + MODEL_NAME: llama2-13b-chat + +image: + repository: nvcr.io/ohlfw0olaadg/ea-participants/nim_llm + tag: 24.06 + +imagePullSecrets: + - name: registry-secret + +model: + numGpus: 2 + name: llama2-13b-chat + openai_port: 9999 +``` + +Run the following command: +``` +helm -n runai-team-a install llama2-13b-chat-nim nemo-ms/nemollm-inference -f values.yaml +``` +# Note +- The namespace we deploy the helm chart is the RunAI Project namespace (runai-team-a) +- For different models consult the NVIDIA documentation + [[https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html]{.underline}](https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html) + +View the model within the RunAI UI: + +![](media/image1.png){width="6.5in" height="2.5833333333333335in"} From 99adc465c56b9e6138f291fe9b8f73f30c2f601f Mon Sep 17 00:00:00 2001 From: Robert Esker Date: Wed, 28 Aug 2024 12:35:14 -0500 Subject: [PATCH 10/11] Add files via upload example NIM depiction --- docs/runai/runai_nim.png | Bin 0 -> 91612 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/runai/runai_nim.png diff --git a/docs/runai/runai_nim.png b/docs/runai/runai_nim.png new file mode 100644 index 0000000000000000000000000000000000000000..f409e97b9f068b084d8ebb16a80c6c57bbd0967b GIT binary patch literal 91612 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 tX!a$i%tW Date: Wed, 28 Aug 2024 13:26:16 -0500 Subject: [PATCH 11/11] First generally coherent RunAI docs --- docs/runai/README.md | 63 ++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/docs/runai/README.md b/docs/runai/README.md index 2af6d17f..31391860 100644 --- a/docs/runai/README.md +++ b/docs/runai/README.md @@ -3,12 +3,11 @@ This document describes the procedure for deploying NIM Microservice employing helm on a RunAI cluster. ## Prerequisites -1. Kubernetes cluster -2. RunAI Installed (version \>= 2.18) -3. GPU Operator -4. Further NIM Prerequisites can be found here - ([[https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html]{.underline}](https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html)) -5. Helm installed locally +1. A conformant Kubernetes cluster ([RunAI K8s requirements](https://docs.run.ai/latest/admin/overview-administrator/)) +2. RunAI installed (version \>= 2.18) +3. [NVIDIA GPU Operator](https://github.com/NVIDIA/gpu-operator) installed +4. General NIM requirements: [NIM Prerequisites](https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#prerequisites) +5. [Helm](https://helm.sh/docs/) installed locally ## Integration features @@ -20,42 +19,24 @@ This document describes the procedure for deploying NIM Microservice employing h | Submit through RunAI Workload API | | | Submit through RunAI UI | | -## Preparation (Single time) +## Preparation -1. RunAI - a. Create a project to deploy the NIM within (Can be existing - project) +The following initial steps are required: - i. For example: team-a +### RunAI - b. Enforce RunAI Scheduler in the project's namespace +1. Create or select an existing project to deploy the NIM within - for example: `team-a` +2. Enforce RunAI Scheduler in the project's namespace: `Kubectl annotate ns runai-team-a runai/enforce-scheduler-name=true` For additional background see the [RunAI Documentation](https://docs.run.ai/v2.18/admin/runai-setup/config/default-scheduler/) - i. Kubectl annotate ns runai-team-a - runai/enforce-scheduler-name=true +### NVIDIA NGC + 1. Create API Key: please follow the guidance in the [NVIDIA NIM Getting Started](https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#option-2-from-ngc) documentation to generate a properly scoped API key if you haven't already. For illustration purposes the generated key will be indicated as `XXXYYYZZZ` below. + 2. Add NIM Helm repository to deploy NIM charts: `helm repo add nemo-ms "https://helm.ngc.nvidia.com/ohlfw0olaadg/ea-participants" --username=\$oauthtoken --password=XXXYYYZZZ` + 3. Create docker registry secret to pull NIM images: `kubectl create secret docker-registry -n runai-team-a registry-secret --docker-username=\$oauthtoken --docker-password=XXXYYYZZZ` + 4. Create docker secret to pull models: `kubectl create secret generic ngc-api -n runai-team-a --from-literal=NGC_CLI_API_KEY=XXXYYYZZZ` - ii. [[https://docs.run.ai/v2.18/admin/runai-setup/config/default-scheduler/]{.underline}](https://docs.run.ai/v2.18/admin/runai-setup/config/default-scheduler/) +## Deployment -2. NVIDIA NGC - - a. Create API Key - Please follow the guidance in the NVIDIA NIM [Getting Started]([https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#option-2-from-ngc](https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#id1)) to generate a properly scoped API key if you haven't already. For illustration purposes the generated key will be incidated as `XXXYYYZZZ` below. - - b. Add NIM Helm repository to deploy NIM charts: - - `helm repo add nemo-ms "https://helm.ngc.nvidia.com/ohlfw0olaadg/ea-participants" --username=\$oauthtoken --password=XXXYYYZZZ` - - c. Create docker registry secret to pull NIM images: - - `kubectl create secret docker-registry -n runai-team-a registry-secret --docker-username=\$oauthtoken --docker-password=XXXYYYZZZ` - - d. Create docker secret to pull models: - - `kubectl create secret generic ngc-api -n runai-team-a --from-literal=NGC_CLI_API_KEY=XXXYYYZZZ` - - -## Deployment (Any time you want to deploy NIM) - -Prepare the values file (changing as needed) values.yaml +For any given NIM you desire to deploy, prepare the values.yaml file (changing as needed) ``` initContainers: ngcInit: @@ -90,11 +71,11 @@ Run the following command: ``` helm -n runai-team-a install llama2-13b-chat-nim nemo-ms/nemollm-inference -f values.yaml ``` -# Note +> [!Important] - The namespace we deploy the helm chart is the RunAI Project namespace (runai-team-a) -- For different models consult the NVIDIA documentation - [[https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html]{.underline}](https://developer.nvidia.com/docs/nemo-microservices/inference/getting_started/deploy-helm.html) +- For other models consult the [NVIDIA NIM Supported Models](https://docs.nvidia.com/nim/large-language-models/latest/support-matrix.html#supported-models) matrix + +# View the model within the RunAI UI -View the model within the RunAI UI: +![nim on runai screenshot](runai_nim.png) -![](media/image1.png){width="6.5in" height="2.5833333333333335in"}