一張顯卡給多個容器共用:在 Proxmox 用 LXC 跑 vLLM 的實作紀錄(進行中)
這是一篇進行中的紀錄:驅動安裝與容器共用顯卡已經成功,vLLM 還沒有跑起來。指令與版本號是我當時環境的狀態,照做前請對照官方最新文件。
假設你有一台跑 Proxmox VE 的主機,裝了一張 NVIDIA RTX 50 系列顯卡。常見的做法是把顯卡「直通」給某一台虛擬機,但這樣整張卡就只能給那台用。我想要的是:顯卡留在主機上,讓好幾個 LXC 容器一起共用,各自跑不同的 AI 服務。
第一步:在主機裝 NVIDIA 驅動
RTX 50 系列是新一代 Blackwell 架構,需要 570 以上的驅動,Debian 內建的 550 不支援,所以改用 NVIDIA 官方的 .run 安裝檔。過程中遇到幾件事:
- 套件來源:要加上
non-free;重灌 Proxmox 後預設的企業版套件庫沒有訂閱會回 401,要改用免訂閱的套件庫。 - 編譯環境:要先裝 Proxmox 對應核心版本的 headers、
dkms、build-essential,並且把開源的nouveau驅動列入黑名單。 - Secure Boot 要關:不然核心模組載入不了,可以用
mokutil --sb-state檢查。 - 要用開源版核心模組:Blackwell 世代只支援 NVIDIA 的開源版核心模組(open kernel modules),安裝程式問要裝哪一種時,選 MIT/GPL 那個。
裝完之後在主機上跑 nvidia-smi,看到顯卡和它的顯示記憶體,第一步完成。
第二步:讓 LXC 容器共用顯卡
做法是在每個容器的設定檔裡,允許存取 NVIDIA 的裝置,並把 /dev/nvidia* 這些裝置節點掛進容器。容器裡只裝「使用者空間」的驅動(加 --no-kernel-module),核心模組由主機提供。
兩個要注意的地方:
- 版本必須跟主機一模一樣:主機和容器的驅動版本不一致,就會出錯。
- 權限:裝置節點權限是 666,非特權容器不需要額外的使用者對應。
在容器裡跑 nvidia-smi 也能看到顯卡,代表共用成功。
第三步:vLLM(卡住中)
我開了一個容器,用 Python 虛擬環境裝 vLLM,想跑一個用 NVFP4 格式量化的中型模型。NVFP4 是 Blackwell 原生的 4-bit 格式,當時能直接跑它的推論框架不多,主要是 vLLM 和 NVIDIA 自家的 TensorRT-LLM。目前遇到的問題:
- 量化參數下錯:一開始指定了錯的量化格式,模型其實是另一種格式。把參數拿掉,讓 vLLM 自己偵測就好。
- 缺 CUDA 編譯器:vLLM 用到的加速套件需要現場編譯 CUDA 程式,容器裡沒有
nvcc;而 Ubuntu 套件庫裡的 CUDA 版本太舊,跟 PyTorch 要求的版本對不上。
下一步是從 NVIDIA 官方的 CUDA 套件庫,裝對應版本的 CUDA 工具,再重新啟動。跑起來之後我會補上這篇的後半段。
目前學到的
- 共用比直通彈性大:一張卡可以同時給好幾個服務用,不用為了換服務重開虛擬機。
- 版本對齊是最大的坑:主機驅動、容器驅動、CUDA 工具、PyTorch,任何一個版本對不上就跑不起來。
- 新顯卡要等生態系:Blackwell 太新,很多套件的預設版本還沒跟上,常常得自己去官方來源裝。
資料來源
- 本人 Proxmox VE 實作紀錄(2026-08,未完成)
- vLLM、Proxmox VE、NVIDIA 官方驅動與 CUDA 套件庫
封面圖由 AI 生成。
留言討論
留言載入中…
留言會公開顯示,請遵守留言規範;違規留言會被移除。