1. 确认基础条件
确保 CPU 和主板支持虚拟化和 IOMMU:
- Intel:VT-d
- AMD:AMD-Vi
BIOS 设置
在 BIOS 中启用以下选项:
- Intel:VT-d
- AMD:SVM 和 IOMMU
2. 启用 IOMMU
编辑 GRUB 配置文件:
nano /etc/default/grub
找到以下行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为:
- 对于 Intel:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
- 对于 AMD:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
保存并更新 GRUB:
update-grub
3. 启用 VFIO
编辑模块配置文件:
nano /etc/modules
添加以下行:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
4. 黑名单 NVIDIA 驱动
防止宿主机加载 NVIDIA 驱动:
echo -e "blacklist nouveau\nblacklist nvidia\nblacklist nvidiafb" > /etc/modprobe.d/blacklist-nvidia.conf
5. 查找显卡 PCI ID
运行以下命令:
lspci -nn | grep -i nvidia
示例输出:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device 2b85 [10de:2b85]
01:00.1 Audio device [0403]: NVIDIA Corporation Device 22e8 [10de:22e8]
记录 PCI ID(例如 [10de:2b85]
和 [10de:22e8]
),用于 VFIO 绑定。
6. 绑定显卡到 vfio-pci
编辑 VFIO 配置文件:
nano /etc/modprobe.d/vfio.conf
添加以下行,使用上一步获取的 PCI ID:
options vfio-pci ids=10de:2b85,10de:22e8
7. 重建 initramfs 并重启
更新初始 RAM 文件系统并重启:
update-initramfs -u
reboot
8. 重启后检查绑定情况
检查显卡绑定状态:
lspci -nnk | grep -A 2 -i nvidia
确保输出显示:
Kernel driver in use: vfio-pci
9. 在虚拟机中添加 PCI 设备
在 Proxmox Web 界面中:
- 选择你的虚拟机。
- 进入“硬件” > “添加” > “PCI 设备”。
- 选择显卡设备(例如
01:00.0
和01:00.1
)。
10. 验证步骤
- 检查 IOMMU 是否启用:
dmesg | grep -E "DMAR|IOMMU"
- 验证 VFIO 模块是否加载:
lsmod | grep vfio
- 检查设备绑定状态:
ls -la /sys/bus/pci/drivers/vfio-pci/
11. 在虚拟机中安装 NVIDIA 5090 驱动
- 卸载现有专有驱动:
sudo apt purge nvidia-driver-570-server sudo apt autoremove sudo apt autoclean
- 安装开源 NVIDIA 驱动:
sudo apt install nvidia-driver-570-server-open sudo apt install nvidia-utils-570-server
- 重启并验证:
sudo reboot
检查驱动版本:nvidia-smi
检查模块信息:modinfo nvidia
验证内核模块类型(应显示开源版本):lsmod | grep nvidia
检查设备文件:ls -la /dev/nvidia*
12. 安装 Docker 并通过 Docker 运行 vLLM 模型
- 设置包仓库和 GPG 密钥:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
- 安装 Docker Engine、CLI、Containerd 和 Docker Compose 插件:
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 更新包列表并安装 nvidia-container-toolkit:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
- 配置 Docker 启动项:
sudo systemctl start docker sudo mkdir -p /etc/docker
创建 Docker 配置文件:cat <<EOF | sudo tee /etc/docker/daemon.json { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } EOF
- 配置并重启 Docker:
sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl enable docker sudo systemctl restart docker
666