How-to provision an Ubuntu VM with NVIDIA vGPU

How-to provision an Ubuntu VM with NVIDIA vGPU


Overview

This guide covers provisioning an Ubuntu 22.04 VM with NVIDIA vGPU in the VSS private cloud, installing the NVIDIA guest driver, and configuring vGPU licensing using the vss-cli. By the end, you will have a running Ubuntu VM with a licensed GPU verified via nvidia-smi.


Prerequisites

  • vss-cli installed. See Install the vss-cli if you haven't set it up. This guide was written against vss-cli version v2026.4.0 or later.

  • A VSS account with permission to provision in your group's folder.

  • Access to the email account that will receive the VM request notifications (one will be sent that contains the VM password).


Step by Step

Step 1 — Provision the VM

Copy thevss-cli command, fill in the variables and run it to create the VM with GPU profile:

vss-cli compute vm mk from-clib \ --cpu 4 --gpu-profile <GPU_PROFILE> \ --domain <FD1-or-FD2> --memory <MEM_GB> --disk <DISK_GB> \ --os ubuntu64Guest --folder <FOLDER_NAME> \ --source <UBUNTU_VER> \ --description <DESC> \ --client <CLIENT NAME> --net <NETWORK> --vss-service N/A \ <VM_NAME>

The following example will be used for this article:

vss-cli compute vm mk from-clib \ --cpu 4 --gpu-profile nvidia_l4-6c \ --domain FD2 --memory 24 --disk 100 \ --os ubuntu64Guest --folder group-v303 \ --source ubuntu-22.04 \ --description 'testing vss-cli vGPU deployment' \ --client EIS --net KUALI --vss-service N/A \ nvidia_l4-6-TEST-01

Confirm the VM was created

vss-cli compute vm ls -f name=nvidia_l4-6-TEST-01
vss-cli compute vm ls -f name=nvidia_l4-6-TEST-01 moref name folder.path cpu_count memory_gb power_state ip_address --------- ------------------------- ------------- ----------- ----------- ------------- ------------ vm-943286 2605T-nvidia_l4-6-TEST-01 VSS > Sandbox 4 24 poweredOff

Power on the VM

vss-cli --wait compute vm set vm-943286 state on
vss-cli --wait compute vm set vm-943286 state on id : 62687 status : SUBMITTED task_id : eecfd6cf-060f-4927-8989-aef732ba6948 message : Request has been accepted for processing ⏳ Waiting for request 62687 to complete... 🎉 Request 62687 completed successfully: warnings : New state is poweredOn errors :

⚠️ Note: Wait for the VM to be fully provisioned and booted before proceeding (this may take several minutes)

Once the VM has powered on, check the ip address

vss-cli compute vm ls -f moref=vm-943286
vss-cli compute vm ls -f moref=vm-943286 moref name folder.path cpu_count memory_gb power_state ip_address --------- ------------------------- ------------- ----------- ----------- ------------- -------------------------------------- vm-943286 2605T-nvidia_l4-6-TEST-01 VSS > Sandbox 4 24 poweredOn 128.100.159.10 fe80::250:56ff:fe92:63c

Find the VM password in the “[VSS] - VM Request…” email

SSH to the virtual machine

ssh -p 2222 vss-admin@128.100.159.10

Step 2 — Download the NVIDIA Guest Driver

Download the NVIDIA AI Enterprise guest driver using either curl or wget:

Using curl

curl -O https://eis.utoronto.ca/ut-vss-lib/nvidia/nvidia-ai-enterprise-8.0-580.105.06-580.105.08-581.80/Guest_Drivers/nvidia-linux-grid-580_580.105.08_amd64.deb
root@nvidial4-6-test-01:~# curl -O https://eis.utoronto.ca/ut-vss-lib/nvidia/nvidia-ai-enterprise-8.0-580.105.06-580.105.08-581.80/Guest_Drivers/nvidia-linux-grid-580_580.105.08_amd64.deb % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 459M 100 459M 0 0 55.9M 0 0:00:08 0:00:08 --:--:-- 54.3M

Using wget

wget https://eis.utoronto.ca/ut-vss-lib/nvidia/nvidia-ai-enterprise-8.0-580.105.06-580.105.08-581.80/Guest_Drivers/nvidia-linux-grid-580_580.105.08_amd64.deb
vss-admin@nvidial4-6-test-01:~$ wget https://eis.utoronto.ca/ut-vss-lib/nvidia/nvidia-ai-enterprise-8.0-580.105.06-580.105.08-581.80/Guest_Drivers/nvidia-linux-grid-580_580.105.08_amd64.deb --2026-04-29 13:19:45-- https://eis.utoronto.ca/ut-vss-lib/nvidia/nvidia-ai-enterprise-8.0-580.105.06-580.105.08-581.80/Guest_Drivers/nvidia-linux-grid-580_580.105.08_amd64.deb Resolving eis.utoronto.ca (eis.utoronto.ca)... 128.100.102.1, 128.100.100.1 Connecting to eis.utoronto.ca (eis.utoronto.ca)|128.100.102.1|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 482112666 (460M) [application/x-debian-package] Saving to: ‘nvidia-linux-grid-580_580.105.08_amd64.deb’ nvidia-linux-grid-580_580.105.08_amd64. 100%[===============================================================================>] 459.78M 77.7MB/s in 6.7s 2026-04-29 13:19:52 (68.6 MB/s) - ‘nvidia-linux-grid-580_580.105.08_amd64.deb’ saved [482112666/482112666]

Step 3 — Install the NVIDIA Guest Driver

Install DKMS (Dynamic Kernel Module Support)

sudo apt install -y dkms

Install the NVIDIA driver package

sudo dpkg -i nvidia-linux-grid-580_580.105.08_amd64.deb

Step 4 — Configure vGPU Licensing

Edit the NVIDIA gridd configuration file:

sudo nano /etc/nvidia/gridd.conf

Select the FeatureType value based on your workload (I chose 4 as I plan to use the vm for an ML workload):

Value

Feature

Description

Value

Feature

Description

0

Unlicensed

Unlicensed state

1

NVIDIA vGPU

Optional, autodetected as per vGPU type

2

RTX Virtual Workstation

NVIDIA RTX Virtual Workstation (default)

4

Virtual Compute Server

Recommended for AI/ML workloads

Add or update the following line in gridd.conf:

FeatureType=4

Step 5 — Install the License Token

⚠️Note: Run Step 5 as root

Elevate to root

sudo -i

Retrieve the license token from VMware guest info and write it to the token directory

echo -n -e $(vmware-rpctool "info-get guestinfo.ut.vss.nvidia_token") \ > /etc/nvidia/ClientConfigToken/client_configuration_token_12-05-2023-11-26-05.tok

Set correct permissions

chmod 744 /etc/nvidia/ClientConfigToken/client_configuration_token_12-05-2023-11-26-05.tok

Exit root

exit

ℹ️ Note: The token is retrieved automatically from VMware guestinfo properties injected at provisioning time.


Step 6 — Start and Verify the License Daemon

Restart nvidia-gridd

systemctl restart nvidia-gridd

Verify GPU is visible

nvidia-smi
vss-admin@nvidial4-6-test-01:~$ nvidia-smi Tue May 5 16:58:53 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 580.105.08 Driver Version: 580.105.08 CUDA Version: 13.0 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA L4-6C On | 00000000:02:00.0 Off | N/A | | N/A N/A P0 N/A / N/A | 0MiB / 6144MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+

Check license status

nvidia-smi -q | grep -i license
CleanShot 2026-04-28 at 15.48.27-20260428-194856.png

If needed you can monitor gridd logs

journalctl -u nvidia-gridd -f

Step 7 (Optional) - Release the NVIDIA license and decommission the VM

Stop the nvida-grid service

systemctl stop nvidia-gridd
vss-admin@nvidial4-6-test-01:~$ systemctl stop nvidia-gridd ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to stop 'nvidia-gridd.service'. Authenticating as: VSS User (vss-admin) Password: ==== AUTHENTICATION COMPLETE ===

Confirm the license has been released

nvidia-smi -q | grep -i licensed
CleanShot 2026-04-29 at 10.19.10-20260429-141936.png

From your vss-cli terminal window, power off the VM

vss-cli --wait compute vm set vm-943286 state off

Decommission the vm by deleting it

vss-cli compute vm rm vm-943286
vss-cli compute vm ls -f moref=vm-943286 moref name folder.path cpu_count memory_gb power_state ip_address ------- ------ ------------- ----------- ----------- ------------- ------------

Troubleshooting

Symptom

Resolution

Symptom

Resolution

Unlicensed (Restricted)

Compute is blocked. Check token file and restart nvidia-gridd.

Token signature validation failed

Token expired or driver mismatch.

nvidia-smi not found after install

Reboot the VM after dpkg -i installation.

gridd fails to start

Check journalctl -u nvidia-gridd -f for errors.


Next Steps

To verify GPU compute with a Python ML workload:

University of Toronto - Since 1827