Skip to main content

Cornelis Technical Documentation

3.4.1. Software Requirements

This section provides a high-level overview of the steps required to set up a Cornelis CN5000 Omni-Path Fabric. Procedures and key reference documents, such as other CN5000 guides, are provided to clarify the process. Additional commands and best-known methods are defined to facilitate the installation process and troubleshooting.

Check applicable release notes and technical advisories for key information that could influence installation steps outlined in this document.

Perform or verify the following:

  1. Verify the operating system. Operating System (OS) Software is a release-supported OS. See the CN5000 OPX Software Release Notes for the complete list of supported OSes.

  2. Go to the Cornelis Customer Center. Search for and download the required software. Do not install prior to reading Pre-Installation Requirements.

  3. Designate the management node(s). Fabric Manager will be enabled on the management node(s).

  4. Ensure passwordless access is enabled for all hosts and switches.

  5. Ensure you are familiar with the CN5000 product documentation.

3.4.1.1. Pre-Installation Requirements

Ensure that the following requirements are met prior to installing and setting up the fabric.

  1. The hardware configuration should be reviewed to ensure everything has been installed according to the plan.

    Following the software installation, Omni-Path software tools may be used to help verify the installation.

  2. Ensure the required Operating System (OS) version (with the same kernel version) is installed on all hosts with the following options:

    • Root user command prompt ends in "#" or "$" with a space after it.

    • Fancy and colored prompts are disabled.

    • TCL and Expect packages are installed on all Fabric Management Nodes.

    The Management Node(s) should have a full installation and must include the TCL and Expect OS RPMs.

    For MPI clusters, install the C and Fortran compilers, along with their associated tools, on each Management Node.

  3. Enable remote login as root on each host.

    In order to manage the hosts, the Management Node must be able to securely log in as root to each host. This can be accomplished using SSH.

  4. Set up a Network Time Protocol (NTP) server.

    Configure an NTP server for the cluster and set all Linux hosts and switches to sync to the NTP server.

  5. Assign SuperNIC Node Description Names.

    Node Description names can be configured in many ways. Cornelis recommends the use of the rdma-ndd daemon to keep the Node Description up to date with the hostname of the node. Once set up to assign node descriptions, rdma-ndd automatically assigns node descriptions to RDMA devices whenever a node is restarted, an RDMA device comes online, or the hostname changes.

    For details on rdma-ndd, see the man page.

  6. If setting up your fabric to work with AMD or NVIDIA GPUs, refer to AMD GPU Requirements prior to installing the software.

3.4.1.1.1. Resolve TCP/IP Host Names

FastFabric and TCP/IP must resolve host names to the management network and IPoIB IP addresses. If the management network is not IPoIB, each host must have both a management network name and an IPoIB network name. To do this, use the actual host name as the management network name and HOSTNAME-opa as the IPoIB network name, where HOSTNAME is the management network name of the given host.

Name resolution is accomplished by configuring a DNS server on the management network, with both management network and IPoIB addresses for each host and each chassis.

Alternatively, an /etc/hosts file needs to be created on the Management Node; FastFabric can then propagate this /etc/hosts file to all the other hosts.

If using the /etc/hosts file approach and NOT using Domain Name System (DNS):

  • On the management node, add all the Ethernet and IPoIB addresses into the /etc/hosts file.

  • For the IPoIB convention, use HOSTNAME-opa.

  • The localhost line should not be edited.

  • The /etc/hosts file should not have any node-specific data.

  • Copy the file to every node.

If using DNS:

  • Refer to the documentation for the DNS server being used. Make sure to edit the /etc/resolv.conf configuration file on the Management Node to use the proper DNS server.

  • Refer to the Linux OS documentation for more information about configuring the /etc/resolv.conf file. This file is typically configured during OS installation.

  • If /etc/resolv.conf must be manually configured for each host, FastFabric can aid in copying the file to all the hosts.

  • The /etc/resolv.conf file created on the Management Node must not have any node-specific data and must be appropriate for use on all hosts.

  • Copying the /etc/resolv.conf file to all the nodes is accomplished during the OS installation.

3.4.1.1.2. Performance Tuning Prerequisites

Cornelis recommends preconfiguring servers and settings to tune fabric performance to meet the needs of the system. These tasks can be performed before or after the installation. Refer to the CN5000 Performance Tuning Guide, which describes BIOS settings and parameters that have been shown to improve performance or make performance more consistent on the CN5000 Omni-Path Fabric.

3.4.1.2. IOMMU: Passthrough Mode

IOMMU is often enabled by default but needs to be set to passthrough mode in order for the hfi1 driver to function properly.

Steps:

  1. Edit /etc/default/grub to change or add GRUB_CMDLINE_LINUX to include:

    iommu=pt
  2. Update GRUB:

    On RHEL and SLES:

    grub2-mkconfig --update-bls-cmdline -o /etc/grub2.cfg

    On Ubuntu:

    update-grub
  3. Reboot.

  4. Confirm the setting is in place:

    cat /proc/cmdline
    ... iommu=pt ...

3.4.1.3. AMD GPU Requirements

Before using AMD GPUs with Omni-Path, you must download and install the following:

Installation details can be found on the respective web pages.

3.4.1.3.1. Using RCCL

The ROCm Collective Communications Library (RCCL) provides collective and point-to-point communication primitives optimized for multi-GPU, multi-node applications.

Installation instructions and downloads for RCCL can be found on GitHub at ROCm/rccl.

RCCL uses the Amazon AWS OFI NCCL plugin for libfabric support. The source files for the plugin are found on GitHub at aws/aws-ofi-nccl. Details for building the plugin using GNU Autotools are included in the INSTALL.md text file.

Note

As of October 2025, support for RCCL was added to the AWS OFI NCCL plugin.

To ensure correct operation and compatibility with RCCL, you must use an AWS OFI NCCL plugin that includes the commit 0d49b7aff88f453928cfe7a467463147333a4ced (or any newer commit).

Until an official release includes this commit, you must manually build the plugin from source at the required revision or later.

Note

OPX Software must be installed before installing the AWS OFI NCCL plugin.

If the following is not used, verbs will be used automatically.

Cornelis recommends that you use the ./configure command of the form:

./configure --with-libfabric=</path to your gpu-enabled build of libfabric> --with-rocm=/opt/rocm --with-mpi=</path to your gpu-enabled mpi build> --prefix=</location where amazon-plugin will be installed>

Note

If you see the error NCCL INFO NET/Plugin: Could not find: libnccl-net.so when using the AWS OFI NCCL plugin with RCCL, you need to create a symbolic link so the plugin library can be located.

By default, RCCL looks for librccl-net.so, while the AWS OFI NCCL plugin builds a library named libnccl-net.so.  If this mismatch prevents RCCL from loading the plugin, create a symbolic link in your build directory as follows:

cd </location where amazon-plugin will be installed>/lib
ln -s librccl-net.so libnccl-net.so

This ensures RCCL correctly loads the OFI network plugin when running GPU-enabled collective operations.

3.4.1.4. NVIDIA GPU Requirements

3.4.1.4.1. Building the NVIDIA Driver

Important

Perform step 2 to avoid issues where the SuperNIC GPUDirect-enabled driver may not be able to load due to missing symbols. Failure to perform this step will require that you uninstall and then reinstall the driver using the proper instructions.

Use the following instructions to download and build the NVIDIA driver:

  1. Download the NVIDIA driver source from NVIDIA's Download Drivers.

    It is also available in the CUDA Toolkit package that can be downloaded from CUDA Toolkit Downloads.

    Note

    Users of CUDA applications will need the CUDA runtime as well, which is part of the CUDA Toolkit package. Cornelis recommends the full CUDA Toolkit but acknowledges that some administrators may only want the driver itself.

    For any runtime applications that need CUDA runtime support, CUDA runtime must be installed. Cornelis recommends downloading the entire CUDA Toolkit and installing it.

  2. Extract the driver source and build the driver module as per the instructions at GPUDirect RDMA (nvidia.com).

  3. Install the NVIDIA driver module if it is not already installed.

  4. Run the command export NVIDIA_DRIVER_SOURCE=<path to NVIDIA driver src build directory> so that the CN5000 OPX Software installer knows where to find the NVIDIA driver source when rebuilding the SuperNIC driver.

    Note

    The <path to NVIDIA driver src build directory> is commonly located in:

    • /usr/src/nvidia-<version> for RHEL

    • /usr/src/kernel-modules/nvidia-<version> for SLES.

    On RHEL distributions, modules must be manually built to create the Module.symvers file that is required before building and installing the hfi1 driver.

    cd /usr/src/nvidia-<version>
    make -j

For instructions on installing CUDA, refer to the NVIDIA CUDA Installation Guide for Linux.

3.4.1.4.2. Installing CUDA on RHEL/Rocky Linux

The following instructions use CUDA 12.8 on Rocky Linux 9.5. Replace the versions in the steps with the version you are installing.

  1. Download the Linux local installation file for the desired version of CUDA.

    wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda_12.8.1_570.124.06_linux.run
  2. Run the local installation file in silent mode.

    ./cuda_12.8.1_570.124.06_linux.run --silent --tmpdir=/tmp
  3. Reboot.

  4. Install kernel-devel-matched.

    dnf install https://dl.rockylinux.org/vault/rocky/9.5/AppStream/x86_64/kickstart/Packages/k/kernel-devel-matched-`uname -r`.rpm 
  5. Install dkms.

    dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/
    repos/rhel9/x86_64/cuda-rhel9.repodnf install dkms
  6. Install nvidia-driver-cuda-libs.

    dnf install nvidia-driver-cuda-libs
  7. Download the GDRCopy RPMs for your installed version of CUDA.

    For CUDA 12.8, the RPMs are located at NVIDIA's Index of /compute/redist/gdrcopy/CUDA 12.8/rhel9/x64.

  8. Install the downloaded RPMs using rpm -i.

  9. Reboot.

3.4.1.4.3. NVIDIA GDRCopy

Whereas NVIDIA’s GPUDirect RDMA allows direct communication between GPUs and other PCIe devices, GDRCopy allows local CPUs to directly map and access the GPU memory.

Installation instructions and download locations for GDRCopy are found on GitHub at NVIDIA/gdrcopy. Note that the NVIDIA components described in NVIDIA GPU Requirements must be installed before installing GDRCopy.

Cornelis recommends installing and using GDRCopy to achieve maximum GPU performance with the OPX Provider.

Note

If FI_LOG_LEVEL=debug is enabled at runtime, you can determine if GDRCopy has been properly installed and enabled by searching the output logs for instances of GDRCopy.

Once installed, GDRCopy functionality is disabled or enabled through the environment variable: FI_HMEM_CUDA_USE_GDRCOPY=0 or 1, respectively.

Note

If GDRCopy is not installed, you must set FI_HMEM_CUDA_USE_GDRCOPY=0 or the OPX Provider will fail at runtime.

3.4.1.4.4. Verifying Module Load Order

When used with an NVIDIA GPU, the hfi1 module must be loaded after the NVIDIA module. In some cases, the hfi1 may load earlier in the boot process than the NVIDIA module. If this occurs, the module loads successfully and is functional, but without NVIDIA support.

Use dmesg to determine if hfi1 has been loaded with NVIDIA support. If dmesg returns that NVIDIA support is enabled (as shown in the following example), then no other actions are required.

[root@cornelis ~]# dmesg | grep hfi1 | grep -i nvidia
    hfi1 Nvidia p2p DMA support enabled
    hfi1 Nvidia p2p TID-DMA support enabled
    hfi1 Nvidia GDRCopy support enabled

If dmesg responds that NVIDIA support is disabled (as shown in the following example), then the hfi1 module must be removed and reloaded.

[root@cornelis ~]# dmesg | grep hfi1 | grep -i nvidia
    hfi1 Nvidia p2p DMA support disabled (missing symbol nvidia_p2p_free_page_table)
    hfi1 Nvidia p2p TID-DMA support disabled
    hfi1 Nvidia GDRCopy support disabled

To remove and reload the hfi1 module, use the following command:

modprobe -r hfi1 && modprobe hfi1

Once this has been completed, verify that the hfi1 module was reloaded with NVIDIA support using the dmesg command as shown previously.

Note

The same behavior can occur if the NVIDIA module is not loaded at all. To verify that NVIDIA has been loaded, run lsmod | grep nvidia. If the output is empty, then the NVIDIA module has not been loaded.

3.4.1.4.5. Verifying GPUDirect is Installed

To ensure that the GPUDirect-capable software is installed, verify as follows.

For driver, run:

$ modinfo hfi1 | grep nvidia

Sample output:

softdep: pre: nvidia
3.4.1.4.6. Using NCCL

The NVIDIA Collective Communications Library (NCCL) provides collective and point-to-point communication primitives optimized for multi-GPU, multi-node applications.

Installation instructions and downloads for NCCL can be found on GitHub at NVIDIA/nccl. Note that an NVIDIA user account may be required to download the installation files.

Note

OPX Software must be installed before installing the AWS OFI NCCL plugin.

If the following is not used, verbs will be used automatically.

As NCCL does not natively support libfabric, you must install the Amazon AWS OFI NCCL plugin. The source files for the plugin are found on GitHub at aws/aws-ofi-nccl. Details for building the plugin using GNU Autotools are included in the INSTALL.md text file.

Cornelis recommends that you use the ./configure command of the form:

./configure --with-libfabric=</path to your gpu-enabled build of libfabric> --with-cuda=/usr/local/cuda --with-mpi=</path to your gpu-enabled mpi build> --prefix=</location where amazon-plugin will be installed>

Once the plugin has been installed, you can enable logging using the environment variable: NCCL_DEBUG=info. Once the variable is set, look for the following log messages:

  • NCCL INFO NET/OFI Using aws-ofi-nccl - Confirms that the AWS OFI NCCL plugin is being used by NCCL.

  • NCCL INFO NET/OFI Selected Provider is opx - Confirms that the AWS OFI NCCL plugin is using OPX Provider as its libfabric provider.

3.4.1.5. Compiling Libfabric on a System Without CN5000 Omni-Path Hardware

If you need to compile libfabric with CN5000 support on a system without Omni-Path hardware installed and loaded, perform the following steps.

  1. Download and extract the OPX Software package for your OS from the Cornelis Networks Customer Center.

  2. Navigate to the directory containing the opxs-kernel-updates-<kernel version for OS>.src.rpm.

  3. Convert the RPM to a tarball:

    rpm2cpio opxs-kernel-updates-<kernel version for OS>.src.rpm | cpio -idmv
  4. Extract the newly created tarball:

    tar -xf opxs-kernel-updates-<kernel version for OS>.tgz
  5. Download and extract the latest version of the libfabric tarball from GitHub.

    Using libfabric 2.3.0 as an example:

    wget https://github.com/ofiwg/libfabric/releases/download/v2.3.0/libfabric-2.3.0.tar.bz2 && tar -xf libfabric-2.3.0.tar.bz2
  6. Change directories to the extracted libfabric directory:

    cd /path/to/extracted/libfabric
  7. Configure the build environment:

    CFLAGS="-I/path/to/opxs-kernel-updates-<kernel version for OS>/include/uapi/" \
    CXXFLAGS="-I/path/to/opxs-kernel-updates-<kernel version for OS>/include/uapi/" \
    ./autogen.sh (if required) 
    ./configure --prefix=/install/dir/ \
    --enable-opx
  8. Compile libfabric:

    make -j $ (nproc)
  9. Install libfabric:

    make install