惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
C
Check Point Blog
宝玉的分享
宝玉的分享
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
量子位
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
J
Java Code Geeks
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
P
Proofpoint News Feed
美团技术团队
H
Help Net Security
B
Blog
博客园_首页

Proxmox Support Forum

[SOLVED] - Github Auth for Mirrors-Kernel Repo? [Automation] Mass migration tool for MS Win11/Server Proxmox GUI hang - not response is it possible to reject or quarantine spam based on conditions I set ? The PVENode task list in PVE9 is partially obscured due to the terminal font being too large. About 100% error reporting due to pveproxy.service hooks Kubernetes overlay networking breaks when upgrading from PVE 9.1 to PVE 9.2.3 Zentraler Speicher No space left on device Combine datastore and direct file archival to tape Kernel panic VFS: Unable to mount root fs on unknown-block (0,0) sobald ein 7.x Kernel verwendet wird. How to migrate disk of a VM from one ZFS to another Windows Server 2025 fails to boot after PVE 9.2 / Linux 7.0 Kernel upgrade Cannot Install Proxmox on T610 Poweredge with H700 PERC card sdn Config. gateway not reachable How to safely change domain/FQDN? Welche Filterquote erreicht ihr? NFS Share status unknown on 2 of 5 nodes Can't connect to PVE9 consoles [solved] Can't connect to PVE9 consoles [solved] [SOLVED] - Use secondary network for PVE commands Created cluster, one node storage gone BUG: proxmox mail gateway FROM = null bypass spam filtering Moving existing PBS from VMWare workstation to PVE cluster Does eBGP SDN fabric support external peering? Bug: PDM 1.1 not recognizing valid license status Proxmox GUI hang - not response PVE crashes unexpectedly Proxmox Backup Server 4.2 released! Advice
Guide: Proxmox + Older NVIDIA GPUs (GTX 1060 / P4000 / V1...
invalid@exam · 2026-06-13 · via Proxmox Support Forum

After spending way too much time fighting NVIDIA driver issues, DKMS errors, and Proxmox kernel issues, I finally got a clean, reliable setup working for older NVIDIA GPUs with LXC passthrough.

This setup works well for:

  • GTX 1060 / 1070 / 1080
  • Quadro P4000 / P5000
  • Tesla V100
  • Most Pascal / Volta cards

Use cases:

  • Ollama
  • CUDA
  • Docker
  • Plex transcoding
  • Local LLMs
  • AI inference
  • GPU acceleration inside LXC containers

IMPORTANT NOTES​

You do NOT need:

  • NVIDIA vGPU
  • enterprise licensing
  • pve-nvidia-vgpu-helper
  • patched kernels
  • weird passthrough scripts

Also:

  • Avoid Linux Kernel 7.x right now with older Pascal/Volta GPUs
  • Many users are hitting DKMS compile failures on kernel 7
  • Kernel 6.x is MUCH more stable right now

Recommended:

  • Proxmox kernel 6.8 or 6.14
  • NVIDIA 550 or 575 drivers

HOST INSTALLATION​

Install required packages:

Code:

apt update
apt install -y build-essential dkms pve-headers-$(uname -r)

Download NVIDIA driver (550 stable branch):

Code:

wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.163.01/NVIDIA-Linux-x86_64-550.163.01.run

Alternative newer driver (575 branch):

Code:

wget https://us.download.nvidia.com/tesla/575.57.08/NVIDIA-Linux-x86_64-575.57.08.run

Make executable:

Code:

chmod +x NVIDIA-Linux-x86_64-550.163.01.run

OR for 575:

Code:

chmod +x NVIDIA-Linux-x86_64-575.57.08.run

Install driver:

Code:

./NVIDIA-Linux-x86_64-550.163.01.run

OR:

Code:

./NVIDIA-Linux-x86_64-575.57.08.run

Installer recommendations:

  • YES to DKMS
  • NO to OpenGL libraries if headless

Reboot:

Verify:

You should now see the GPU on the Proxmox host.


LXC GPU PASSTHROUGH​

Edit your container config:

Basic passthrough config:

Code:

lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 509:* rwm
lxc.cgroup2.devices.allow: c 511:* rwm

lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file

Restart container:



MULTIPLE GPU SETUPS​

If your server has multiple GPUs, things work a little differently.

Example:

  • GPU0 = GTX 1060
  • GPU1 = Tesla V100
  • GPU2 = Quadro P4000

Each GPU gets its own device node:

Code:

/dev/nvidia0
/dev/nvidia1
/dev/nvidia2

You can verify GPU numbering with:

or:



Passing Through ONLY One Specific GPU​

Example: pass ONLY GPU1 (Tesla V100) into container.

Use:

Code:

lxc.mount.entry: /dev/nvidia1 dev/nvidia1 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file

This isolates the container to ONLY that GPU.


Passing Through Multiple GPUs​

Example: expose GPU0 and GPU2 to the same container:

Code:

lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidia2 dev/nvidia2 none bind,optional,create=file

Keep the shared NVIDIA devices:

Code:

lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file


Restricting CUDA to Specific GPUs​

Inside the container, you can limit visible GPUs using:

Code:

export CUDA_VISIBLE_DEVICES=0

or multiple GPUs:

Code:

export CUDA_VISIBLE_DEVICES=0,1

VERY useful for:

  • Ollama
  • Docker
  • AI workloads
  • Multi-user servers

Docker + NVIDIA Toolkit Inside LXC​

If running Docker inside the container:

Code:

apt install -y nvidia-container-toolkit

Test with:

Code:

docker run --rm --gpus all nvidia/cuda:12.3.2-base-ubuntu22.04 nvidia-smi


INSIDE THE CONTAINER​

Download the same NVIDIA driver version used on the host.

550 branch:

Code:

wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.163.01/NVIDIA-Linux-x86_64-550.163.01.run

575 branch:

Code:

wget https://us.download.nvidia.com/tesla/575.57.08/NVIDIA-Linux-x86_64-575.57.08.run

Install userspace libraries ONLY:

550 example:

Code:

chmod +x NVIDIA-Linux-x86_64-550.163.01.run

./NVIDIA-Linux-x86_64-550.163.01.run --no-kernel-module

575 example:

Code:

chmod +x NVIDIA-Linux-x86_64-575.57.08.run

./NVIDIA-Linux-x86_64-575.57.08.run --no-kernel-module

Test GPU access:

If everything is correct, the container should now see the GPU.


OPTIONAL: CUDA INSTALLATION INSIDE LXC​

Download CUDA installer matching the NVIDIA driver version.

CUDA 12.9.1 + NVIDIA 575.57.08:

Code:

wget https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_575.57.08_linux.run

Make executable:

Code:

chmod +x cuda_12.9.1_575.57.08_linux.run

Run installer:

Code:

./cuda_12.9.1_575.57.08_linux.run

IMPORTANT:

  • Skip driver installation during CUDA setup
  • The NVIDIA driver is already installed on the Proxmox host
  • Inside LXC you only need CUDA userspace libraries/tools

Recommended CUDA components:

  • CUDA Toolkit
  • CUDA Runtime
  • nvcc
  • CUDA libraries

You can usually skip:

  • Driver
  • DKMS
  • Kernel modules

VERIFY CUDA​

Check GPU visibility:

Check CUDA compiler:

You should now have:

  • CUDA working inside LXC
  • GPU passthrough working
  • Docker/Ollama/AI workloads accelerated

EXAMPLE NVIDIA-SMI OUTPUT​

Example nvidia-smi output after successful passthrough:

Code:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.57.08 Driver Version: 575.57.08 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------|
| 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 Tesla V100-SXM2-16GB Off | 00000000:65:00.0 Off | 0 |
| N/A 36C P0 45W / 300W| 0MiB / 16384MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+------------------------+----------------------+
| 1 Quadro P4000 Off | 00000000:B3:00.0 Off | N/A |
| 34% 42C P8 12W / 105W| 256MiB / 8192MiB | 3% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 GeForce GTX 1060 6GB Off | 00000000:C4:00.0 Off | N/A |
| 27% 39C P8 8W / 120W| 128MiB / 6144MiB | 1% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 1 N/A N/A 2481 C ollama 220MiB |
| 2 N/A N/A 3154 C python 110MiB |
+-----------------------------------------------------------------------------------------+

Useful commands:

Live monitoring:

Show GPU list only:

Check CUDA compiler:



OPTIONAL: ADD CUDA TO PATH​

Add to ~/.bashrc:

Code:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

Reload shell:



FINAL THOUGHTS​

This setup ended up being WAY simpler than all the vGPU guides floating around online.

For older NVIDIA cards, standard LXC passthrough works perfectly fine for:

  • Ollama
  • CUDA
  • Docker
  • AI workloads
  • Plex

without needing enterprise NVIDIA features.

Hopefully this saves someone else a few hours of troubleshooting.