From 404cbc4922de73c8bd87cda3fd7cb11db1dc9db0 Mon Sep 17 00:00:00 2001 From: StephenJamesSmith Date: Tue, 26 Nov 2024 11:53:30 -0500 Subject: [PATCH] TELCODOCS-1956: Move NVIDIA GPU architecture content to Hardware Accelerators section --- _topic_maps/_topic_map.yml | 5 +- .../about-hardware-accelerators.adoc | 3 +- .../nvidia-gpu-architecture.adoc | 106 ++++++++++++++++++ images/OCP_HW_Accelerators_5.png | Bin 0 -> 23663 bytes modules/nvidia-gpu-architecture.adoc | 18 +++ modules/nvidia-gpu-bare-metal.adoc | 2 +- modules/nvidia-gpu-csps.adoc | 2 +- modules/nvidia-gpu-cuda-mps.adoc | 2 +- modules/nvidia-gpu-cuda-streams.adoc | 2 +- modules/nvidia-gpu-enablement.adoc | 2 +- modules/nvidia-gpu-features.adoc | 3 +- modules/nvidia-gpu-kvm.adoc | 2 +- modules/nvidia-gpu-mig-gpu.adoc | 2 +- modules/nvidia-gpu-prerequisites.adoc | 2 +- modules/nvidia-gpu-red-hat-device-edge.adoc | 2 +- modules/nvidia-gpu-sharing-methods.adoc | 2 +- modules/nvidia-gpu-time-slicing.adoc | 2 +- .../nvidia-gpu-virtualization-with-gpu.adoc | 2 +- modules/nvidia-gpu-virtualization.adoc | 2 +- modules/nvidia-gpu-vsphere.adoc | 2 +- 20 files changed, 143 insertions(+), 20 deletions(-) create mode 100644 hardware_accelerators/nvidia-gpu-architecture.adoc create mode 100644 images/OCP_HW_Accelerators_5.png create mode 100644 modules/nvidia-gpu-architecture.adoc diff --git a/_topic_maps/_topic_map.yml b/_topic_maps/_topic_map.yml index 3169292b6b..ccd0969ce3 100644 --- a/_topic_maps/_topic_map.yml +++ b/_topic_maps/_topic_map.yml @@ -88,9 +88,6 @@ Topics: - Name: Control plane architecture File: control-plane Distros: openshift-enterprise,openshift-origin,openshift-online -- Name: NVIDIA GPU architecture overview - File: nvidia-gpu-architecture-overview - Distros: openshift-enterprise - Name: Understanding OpenShift development File: understanding-development Distros: openshift-enterprise @@ -3301,6 +3298,8 @@ Distros: openshift-origin,openshift-enterprise Topics: - Name: About hardware accelerators File: about-hardware-accelerators +- Name: NVIDIA GPU architecture + File: nvidia-gpu-architecture --- Name: Backup and restore Dir: backup_and_restore diff --git a/hardware_accelerators/about-hardware-accelerators.adoc b/hardware_accelerators/about-hardware-accelerators.adoc index 394214ce49..ef43364746 100644 --- a/hardware_accelerators/about-hardware-accelerators.adoc +++ b/hardware_accelerators/about-hardware-accelerators.adoc @@ -16,7 +16,7 @@ Red{nbsp}Hat {product-title} provides support for cards and peripheral hardware * Data processing units (DPUs) -image::OCP_HW_Accelerators_4.png[Supported hardware accelerators cards and peripherals] +image::OCP_HW_Accelerators_5.png[Supported hardware accelerators cards and peripherals] Specialized hardware accelerators provide a rich set of benefits for AI/ML development: @@ -44,3 +44,4 @@ NVIDIA GPU Operator on Red Hat OpenShift Container Platform] * link:https://www.amd.com/en/products/accelerators/instinct.html[AMD Instinct Accelerators] * link:https://www.intel.com/content/www/us/en/products/details/processors/ai-accelerators/gaudi-overview.html[Intel Gaudi Al Accelerators] + diff --git a/hardware_accelerators/nvidia-gpu-architecture.adoc b/hardware_accelerators/nvidia-gpu-architecture.adoc new file mode 100644 index 0000000000..a6ec3bcdc2 --- /dev/null +++ b/hardware_accelerators/nvidia-gpu-architecture.adoc @@ -0,0 +1,106 @@ +:_mod-docs-content-type: ASSEMBLY +[id="nvidia-gpu-architecture"] += NVIDIA GPU architecture +include::_attributes/common-attributes.adoc[] +:context: nvidia-gpu-architecture + +toc::[] + +NVIDIA supports the use of graphics processing unit (GPU) resources on {product-title}. {product-title} is a security-focused and hardened Kubernetes platform developed and supported by Red Hat for deploying and managing Kubernetes clusters at scale. {product-title} includes enhancements to Kubernetes so that users can easily configure and use NVIDIA GPU resources to accelerate workloads. + +The NVIDIA GPU Operator uses the Operator framework within {product-title} to manage the full lifecycle of NVIDIA software components required to run GPU-accelerated workloads. + +These components include the NVIDIA drivers (to enable CUDA), the Kubernetes device plugin for GPUs, the NVIDIA Container Toolkit, automatic node tagging using GPU feature discovery (GFD), DCGM-based monitoring, and others. + +[NOTE] +==== +The NVIDIA GPU Operator is only supported by NVIDIA. For more information about obtaining support from NVIDIA, see link:https://access.redhat.com/solutions/5174941[Obtaining Support from NVIDIA]. +==== + +//TELCODOCS-1956 - Moved to Hardware accelerators section + +include::modules/nvidia-gpu-prerequisites.adoc[leveloffset=+1] + +// New enablement modules +ifndef::openshift-dedicated,openshift-rosa[] +include::modules/nvidia-gpu-enablement.adoc[leveloffset=+1] + +include::modules/nvidia-gpu-bare-metal.adoc[leveloffset=+2] +[role="_additional-resources"] +.Additional resources +* link:https://docs.nvidia.com/ai-enterprise/deployment-guide-openshift-on-bare-metal/0.1.0/on-bare-metal.html[Red Hat OpenShift on Bare Metal Stack] + +include::modules/nvidia-gpu-virtualization.adoc[leveloffset=+2] +[role="_additional-resources"] +.Additional resources +* link:https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/openshift/openshift-virtualization.html[NVIDIA GPU Operator with OpenShift Virtualization] + +include::modules/nvidia-gpu-vsphere.adoc[leveloffset=+2] +[role="_additional-resources"] +.Additional resources +* link:https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/openshift/nvaie-with-ocp.html#openshift-container-platform-on-vmware-vsphere-with-nvidia-vgpus[OpenShift Container Platform on VMware vSphere with NVIDIA vGPUs] + +include::modules/nvidia-gpu-kvm.adoc[leveloffset=+2] +[role="_additional-resources"] +.Additional resources +* link:https://computingforgeeks.com/how-to-deploy-openshift-container-platform-on-kvm/[How To Deploy OpenShift Container Platform 4.13 on KVM] + +include::modules/nvidia-gpu-csps.adoc[leveloffset=+2] +[role="_additional-resources"] +.Additional resources +* link:https://docs.nvidia.com/ai-enterprise/deployment-guide-cloud/0.1.0/aws-redhat-openshift.html[Red Hat Openshift in the Cloud] +endif::openshift-dedicated,openshift-rosa[] + +// Include this module at a higher leveloffset for OSD/ROSA. +ifdef::openshift-dedicated,openshift-rosa[] +include::modules/nvidia-gpu-csps.adoc[leveloffset=+1] +[role="_additional-resources"] +.Additional resources +* link:https://docs.nvidia.com/ai-enterprise/deployment-guide-cloud/0.1.0/aws-redhat-openshift.html[Red Hat Openshift in the Cloud] +endif::openshift-dedicated,openshift-rosa[] + +ifndef::openshift-dedicated,openshift-rosa[] +include::modules/nvidia-gpu-red-hat-device-edge.adoc[leveloffset=+2] +[role="_additional-resources"] +.Additional resources +* link:https://cloud.redhat.com/blog/how-to-accelerate-workloads-with-nvidia-gpus-on-red-hat-device-edge[How to accelerate workloads with NVIDIA GPUs on Red Hat Device Edge] +endif::openshift-dedicated,openshift-rosa[] + +// TELCODOCS-1092 GPU sharing methods +include::modules/nvidia-gpu-sharing-methods.adoc[leveloffset=+1] +.Additional resources +* link:https://developer.nvidia.com/blog/improving-gpu-utilization-in-kubernetes/[Improving GPU Utilization] + +include::modules/nvidia-gpu-cuda-streams.adoc[leveloffset=+2] +.Additional resources +* link:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#asynchronous-concurrent-execution[Asynchronous Concurrent Execution] + +include::modules/nvidia-gpu-time-slicing.adoc[leveloffset=+2] + +include::modules/nvidia-gpu-cuda-mps.adoc[leveloffset=+2] +.Additional resources +* link:https://docs.nvidia.com/deploy/mps/index.html[CUDA MPS] + +include::modules/nvidia-gpu-mig-gpu.adoc[leveloffset=+2] +.Additional resources +* link:https://docs.nvidia.com/datacenter/tesla/mig-user-guide/[NVIDIA Multi-Instance GPU User Guide] + +include::modules/nvidia-gpu-virtualization-with-gpu.adoc[leveloffset=+2] +.Additional resources +* link:https://www.nvidia.com/en-us/data-center/virtual-solutions/[Virtual GPUs] + +include::modules/nvidia-gpu-features.adoc[leveloffset=+1] +[role="_additional-resources"] +.Additional resources + +* link:https://docs.nvidia.com/ngc/ngc-deploy-on-premises/nvidia-certified-systems/index.html[NVIDIA-Certified Systems] +* link:https://docs.nvidia.com/ai-enterprise/index.html#deployment-guides[NVIDIA AI Enterprise] +* link:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/overview.html#[NVIDIA Container Toolkit] +* link:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/enable-gpu-monitoring-dashboard.html[Enabling the GPU Monitoring Dashboard] +* link:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/mig-ocp.html[MIG Support in OpenShift Container Platform] +* link:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/time-slicing-gpus-in-openshift.html[Time-slicing NVIDIA GPUs in OpenShift] +* link:https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/mirror-gpu-ocp-disconnected.html[Deploy GPU Operators in a disconnected or airgapped environment] +// Topic not available in OSD/ROSA +ifndef::openshift-dedicated,openshift-rosa[] +* xref:../hardware_enablement/psap-node-feature-discovery-operator.html[Node Feature Discovery Operator] +endif::openshift-dedicated,openshift-rosa[] diff --git a/images/OCP_HW_Accelerators_5.png b/images/OCP_HW_Accelerators_5.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9289583718560b9f6c94497e19824a2381c588 GIT binary patch literal 23663 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