Installation of Intel Out of Tree (OOT) GPU Drivers During Provisioning#

Here are the supported GPU drivers for Intel platforms:

  1. Intel Battle Mage 580 GPU - Xeon platforms

Follow the steps below to install Intel Out of Tree (OOT) GPU Drivers for Ubuntu 24.04 LTS OS profile.

Step 1: Login to orch-cli#

Login to orch-cli if not logged in yet.

Replace the placeholders in the command below:

  • <API_USER>: Your API username.

  • <API_PASSWORD>: Your API password.

  • <CLUSTER>: Your cluster domain.

orch-cli login <API_USER> <API_PASSWORD> --keycloak https://keycloak.<CLUSTER>/realms/master

Step 2: Create Custom Cloud-Init Resource to Install Intel OOT GPU Drivers#

Create a custom cloud-init YAML file called gpu_driver_installation.yaml with the content below.

#cloud-config
merge_how: 'dict(recurse_array,no_replace)+list(append)'
runcmd:
  - |
   wait_until_base_pkg_install_done() {
   while [ true ]; do
      if [ -f "/home/postinstall/Setup/.base_pkg_install_done" ]; then
         echo "Base package installation completed. Proceeding...";
         break;
      else
         echo "Waiting for base package installation to complete...";
         sleep 2;
      fi
   done
   }
   wait_until_base_pkg_install_done
   export DEBIAN_FRONTEND=noninteractive
   echo "Install GPU Drivers......."
   os_version=$(grep 'VERSION_ID' /etc/os-release | cut -d '"' -f 2)
   processor_type=$(lscpu | grep 'Model name:' | awk '{for(i=3;i<=NF;i++) if(tolower($i) ~ /(core|xeon|genuine|atom|celeron|n97|n95|n150|n355)/) print $i}')
   ORIGINAL_NO_PROXY=$no_proxy
   no_proxy=$(echo "$no_proxy" | sed 's/,intel\.com//g' | sed 's/intel\.com,//g' | sed 's/intel\.com//g')
   if [[ "${processor_type,,}" == *"xeon"* ]]; then
      echo -e "\nProcessor: $processor_type, Installing the unified driver for Intel® Data Center GPU Flex/Max Series on Ubuntu Server......."
      sudo apt update
      sudo apt install -y gpg-agent wget
      wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
      sudo gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg
      source /etc/os-release
      if [[ ! " jammy noble " =~ " ${VERSION_CODENAME} " ]]; then
         echo "Ubuntu version ${VERSION_CODENAME} not supported"
         exit 1
      else
         wget https://repositories.intel.com/gpu/ubuntu/dists/${VERSION_CODENAME}/lts/2523/intel-gpu-ubuntu-${VERSION_CODENAME}-2523.run
         chmod +x intel-gpu-ubuntu-${VERSION_CODENAME}-2523.run
         sudo ./intel-gpu-ubuntu-${VERSION_CODENAME}-2523.run
      fi
      sudo apt install -y \
      linux-headers-$(uname -r) \
      linux-modules-extra-$(uname -r) \
      flex bison \
      intel-fw-gpu intel-i915-dkms xpu-smi

      sudo apt install -y \
      intel-opencl-icd libze-intel-gpu1 libze1 \
      intel-media-va-driver-non-free libmfx-gen1 libvpl2 \
      libegl-mesa0 libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
      libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 libxatracker2 mesa-va-drivers \
      mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all vainfo hwinfo clinfo

      sudo apt install -y \
      libigc-dev intel-igc-cm libigdfcl-dev libigfxcmrt-dev libze-dev

      echo "GPU driver installation for Ubuntu server image done"
      sudo reboot
   else
      echo -e "\nProcessor: $processor_type is not supported exiting\n"
      exit 1
   fi

Step 3: Create Custom Cloud-Init Config#

Replace the placeholders below as per your orchestrator:

  • <PROJECT_NAME>: Project name.

  • <CLUSTER>: Cluster domain.

orch-cli create customconfig install-gpu-driver ./gpu_driver_installation.yaml \
    --project <PROJECT_NAME> \
    --description "Intel OOT GPU driver installation" \
    --api-endpoint https://api.<CLUSTER>

List all the custom configurations along with resource ID:

orch-cli list customconfig --project <PROJECT_NAME> --api-endpoint https://api.<CLUSTER>

Step 4: Register the Device with Custom Configuration#

Register the edge node to EMF orchestrator and choose the Ubuntu 24.04 profile.

orch-cli create host --project <PROJECT_NAME> --generate-csv

Replace <PROJECT_NAME> with your project name.

Update the test.csv file with the following information:

  • Serial number of device.

  • OS profile ID of Ubuntu 24.04 LTS.

  • Site ID information.

Create the host with Ubuntu OS profile and custom cloud-init:

orch-cli create host --project <PROJECT_NAME> \
    --api-endpoint https://api.<CLUSTER> \
    --import-from-csv test.csv \
    --cloud-init <CUSTOMCONFIG_ID>

Replace the following placeholders:

  • <PROJECT_NAME>: Project name created.

  • <CLUSTER>: Cluster domain.

  • <CUSTOMCONFIG_ID>: Custom configuration ID from Step 3.

Step 5: Monitor the Provisioning Status#

Monitor the provisioning status of the edge node using the orch-cli or EMF web console:

orch-cli get host <host_resource_id>

Replace <host_resource_id> with the ID of the edge node obtained during registration.

Step 6: Verify the Installation#

Once the provisioning is complete, verify that the edge node is running the Ubuntu 24.04 OS profile by checking the OS version and verifying GPU installation:

lspci -nn | grep Graphics

You can also verify the GPU driver is loaded correctly:

lsmod | grep i915