Installation Guide
You can take a look at Nvidia CUDA Installation Guide for more information
Step 1: Get the Nvidia CUDA Repo
You can find the Repo from the Nvidia Download Sites. It should be named cuda_rhel8.repo. Copy it and use it as a template with a j2 extension.
[cuda-rhel8-x86_64]
name=cuda-rhel8-x86_64
baseurl=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64
enabled=1
gpgcheck=1
gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/D42D0685.pub
Step 2: Use Ansible to Generate the repo from Templates.
The Ansible Script should look like this.
- name: Generate /etc/yum.repos.d/cuda_rhel8.repo
template:
src: ../templates/cuda-rhel8-repo.j2
dest: /etc/yum.repos.d/cuda_rhel8.repo
owner: root
group: root
mode: 0644
become: true
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
Step 3: Install the Kernel-Headers and Kernel-Devel
The CUDA Driver requires that the kernel headers and development packages for the running version of the kernel be installed at the time of the driver installation, as well as whenever the driver is rebuilt.
- name: Install Kernel-Headers and Kernel-Devel
dnf:
name:
- kernel-devel
- kernel-headers
state: present
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
Step 4: Disabling Nouveau
To install the Display Driver, the Nouveau drivers must first be disabled. I use a template to disable it. I created a template called blacklist-nouveau-conf.j2. Here is the content
blacklist nouveau
options nouveau modeset=0
The Ansible script for disabling Noveau using a template
- name: Generate blacklist nouveau
template:
src: ../templates/blacklist-nouveau-conf.j2
dest: /etc/modprobe.d/blacklist-nouveau.conf
owner: root
group: root
mode: 0644
become: true
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
Step 5: Install the Drivers and CUDA
- name: Install driver packages RHEL 8 and newer
dnf:
name: '@nvidia-driver:latest-dkms'
state: present
update_cache: yes
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
register: install_driver
- name: Install CUDA
dnf:
name: cuda
state: present
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
register: install_cuda
Step 6: Reboot if there are changes to Drivers and CUDA
- name: Reboot if there are changes to Drivers or CUDA
ansible.builtin.reboot:
when:
- install_driver.changed or install_cuda.changed
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
Aftermath
After reboot, you should try to do “nvidia-smi” commands, hopefully, you should see

If you have an error “NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver for RHEL 8“, do follow the steps in NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver for RHEL 8 and run the ansible script in the blog.
You may also combine all these yml into one large yml file
Other better? Ansible Scripts
You may want to consider other better? options for https://github.com/NVIDIA/ansible-role-nvidia-docker