How-to provision an Ubuntu VM with NVIDIA vGPU
- 1 Overview
- 2 Prerequisites
- 3 Step by Step
- 3.1 Step 1 — Provision the VM
- 3.2 Step 2 — Download the NVIDIA Guest Driver
- 3.3 Step 3 — Install the NVIDIA Guest Driver
- 3.4 Step 4 — Configure vGPU Licensing
- 3.5 Step 5 — Install the License Token
- 3.6 Step 6 — Start and Verify the License Daemon
- 3.7 Step 7 (Optional) - Release the NVIDIA license and decommission the VM
- 4 Troubleshooting
- 5 Next Steps
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-01Confirm the VM was created
vss-cli compute vm ls -f name=nvidia_l4-6-TEST-01vss-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 poweredOffPower on the VM
vss-cli --wait compute vm set vm-943286 state onvss-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-943286vss-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:63cFind the VM password in the “[VSS] - VM Request…” email
SSH to the virtual machine
ssh -p 2222 vss-admin@128.100.159.10Step 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.debroot@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.3MUsing 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.debvss-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 dkmsInstall the NVIDIA driver package
sudo dpkg -i nvidia-linux-grid-580_580.105.08_amd64.debStep 4 — Configure vGPU Licensing
Edit the NVIDIA gridd configuration file:
sudo nano /etc/nvidia/gridd.confSelect the FeatureType value based on your workload (I chose 4 as I plan to use the vm for an ML workload):
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=4Step 5 — Install the License Token
⚠️Note: Run Step 5 as root
Elevate to root
sudo -iRetrieve 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.tokSet correct permissions
chmod 744 /etc/nvidia/ClientConfigToken/client_configuration_token_12-05-2023-11-26-05.tokExit 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-griddVerify GPU is visible
nvidia-smivss-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 licenseIf needed you can monitor gridd logs
journalctl -u nvidia-gridd -fStep 7 (Optional) - Release the NVIDIA license and decommission the VM
Stop the nvida-grid service
systemctl stop nvidia-griddvss-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 licensedFrom your vss-cli terminal window, power off the VM
vss-cli --wait compute vm set vm-943286 state offDecommission the vm by deleting it
vss-cli compute vm rm vm-943286vss-cli compute vm ls -f moref=vm-943286
moref name folder.path cpu_count memory_gb power_state ip_address
------- ------ ------------- ----------- ----------- ------------- ------------Troubleshooting
Symptom | Resolution |
|---|---|
| Compute is blocked. Check token file and restart |
Token signature validation failed | Token expired or driver mismatch. |
| Reboot the VM after |
gridd fails to start | Check |