当前位置: 首页 > news >正文

PVE 配置显卡直通

博客地址:PVE 配置显卡直通

配置

  • Device: Dell PowerEdge T630
  • CPU: Intel® Xeon® E5-2696 v4 x2
  • GPU 1: Matrox Electronics Systems Ltd. G200eR2
  • GPU 2: NVIDIA GeForce GTX 1060 3GB
  • OS: Proxmox VE bookworm 8.3.1 x86_64

注意事项

  1. 硬件需支持并在 BIOS 中开启 Intel VT-D 或 AMD AMD-V
  2. BIOS 中开启 X2APIC 功能
  3. 进行任何硬件变更时请依据 手册 进行硬件配置
  4. 为了能够实时了解到 GPU 运行情况,建议连接显示器观察其响应,但如果出现主机无法识别/无法列出 PCIe 设备时请尝试拔掉显示器后重启
  5. 虚拟机存在直通设备时,建议关闭内存的 Ballooning 功能,来确保虚拟机内存不共享

PVE 直通显卡

开启 IOMMU 和硬件直通功能

编辑 /etc/default/grub,并修改 GRUB_CMDLINE_LINUX_DEFAULT 根据硬件平台添加如下选项

# Intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream"# AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream"

intel_iommu=on amd_iommu=on 用于开启 IOMMU 硬件单元驱动

iommu=pt 用于跳过地址映射来提高内核驱动设备性能

initcall_blacklist=sysfb_init 用于禁用 simplefb 设备加载
PVE 7.3 中使用 simplefb 替代了旧的 vesafbefifb
所以旧版中,Legacy BIOS 引导使用 video=vesafb:offUEFI 使用 video=efifb:off

pcie_acs_override=downstream 用于拆分 iommu groups,防止分组错误时直通一个板载端口导致整个设备被直通

更新 GRUB

PVE 官方手册中给出了 proxmox-boot-tool refresh 命令用于更新 GRUB,但有可能无法正常更新,此时请根据情况尝试 update-grub

加载内核模块

编辑 /etc/modules,添加如下内容

vfio
vfio_iommu_type1
vfio_pci

Linux Kernel 6.2 版本中取消了 vfio_virqfd,低于该版本需额外添加

重启 PVE

验证 IOMMU

dmesg | grep -e DMAR -e IOMMU,输出类似内容

[    0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA
[    0.008734] ACPI: DMAR 0x000000007BAFE000 0000E8 (v01 DELL   PE_SC3   00000001 DELL 00000001)
[    0.008767] ACPI: Reserving DMAR table memory at [mem 0x7bafe000-0x7bafe0e7]
[    0.349828] DMAR: IOMMU enabled
[    0.822346] DMAR: Host address width 46
[    0.822348] DMAR: DRHD base: 0x000000fbffc000 flags: 0x0
[    0.822357] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[    0.822360] DMAR: DRHD base: 0x000000c7ffc000 flags: 0x1
[    0.822365] DMAR: dmar1: reg_base_addr c7ffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[    0.822367] DMAR: ATSR flags: 0x0
[    0.822370] DMAR: ATSR flags: 0x0
[    0.822372] DMAR-IR: IOAPIC id 10 under DRHD base  0xfbffc000 IOMMU 0
[    0.822374] DMAR-IR: IOAPIC id 8 under DRHD base  0xc7ffc000 IOMMU 1
[    0.822375] DMAR-IR: IOAPIC id 9 under DRHD base  0xc7ffc000 IOMMU 1
[    0.822376] DMAR-IR: HPET id 0 under DRHD base 0xc7ffc000
[    0.822378] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.822688] DMAR-IR: IRQ remapping was enabled on dmar0 but we are not in kdump mode
[    0.822995] DMAR-IR: IRQ remapping was enabled on dmar1 but we are not in kdump mode
[    0.823121] DMAR-IR: Enabled IRQ remapping in x2apic mode
[    1.331693] DMAR: No RMRR found
[    1.331696] DMAR: No SATC found
[    1.331698] DMAR: dmar0: Using Queued invalidation
[    1.331701] DMAR: dmar1: Using Queued invalidation
[    1.347932] DMAR: Intel(R) Virtualization Technology for Directed I/O

验证 IOMMU 中断重映射

dmesg | grep remapping,输出类似内容

# Intel
[    0.822378] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.823121] DMAR-IR: Enabled IRQ remapping in x2apic mode
# AMD
AMD-Vi: Interrupt remapping enabled

此时可以直通除显卡外的 PCIe 设备

如果没有开启,请验证 BIOS 中是否启用 X2APIC 功能

开启 X2APIC 后仍无法启用中断重映射,尝试在 /etc/modprobe.d/iommu_unsafe_interrupts.conf 中添加以下内容并重启

options vfio_iommu_type1 allow_unsafe_interrupts=1

vfio_iommu_type1 启用该模块来实现设备隔离、DMA 映射及中断处理

allow_unsafe_interrupts 允许不安全的 IOMMU 中断重映射

显卡直通

屏蔽驱动

编辑 /etc/modprobe.d/pve-blacklist.conf 添加以下内容用于屏蔽对应 GPU 平台驱动,防止主机驱动 GPU

# Nvidia
blacklist nvidiafb
blacklist nouveau
blacklist nvidia# AMD
blacklist amdgpu
blacklist radeon# Intel UHD
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core

忽略显卡警告(NVIDIA)

NVIDIA GPU 在 Windows 中可能会在使用类似 GeForce Experience Passmark Performance Test SiSoftware Sandra 应用时使出警告

编辑 /etc/modprobe.d/kvm.conf,添加如下内容

options kvm ignore_msrs=1 report_ignored_msrs=0

ignore_msrs=1 忽略异常

report_ignore_msrs=0 禁止报告异常

配置 VFIO,分离显示和音频输出

输入 lspci -nn | grep VGA 得到如下输出

09:00.0 VGA compatible controller [0300]: Matrox Electronics Systems Ltd. G200eR2 [102b:0534] (rev 01)
83:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [GeForce GTX 1060 3GB] [10de:1b84] (rev a1)

显然 83:00.0 为 GPU 设备,执行 lspci -n -s 83:00,得到如下输出

83:00.0 0300: 10de:1b84 (rev a1)
83:00.1 0403: 10de:10f0 (rev a1)

根据以上两次输出对比可以得到设备 ID 为 10de:1b84,则板载音频设备 ID 为 10de:10f0

将两个 ID 写入 /etc/modprobe.d/vfio.conf

options vfio-pci ids=10de:1b84,10de:10f0

vfio-pci 用于将指定设备绑定到 VFIO 框架,由 vfio-pci 驱动,以便用户态进程可以直接访问这些设备

更新内核

update-initramfs -u

重启

验证 vfio-pci

执行 lspci -nnk 找到显卡设备,应为类似如下内容

83:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [GeForce GTX 1060 3GB] [10de:1b84] (rev a1)Subsystem: GALAX GP104 [GeForce GTX 1060 3GB] [1b4c:11de]Kernel driver in use: vfio-pciKernel modules: nvidiafb, nouveau
83:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)Subsystem: GALAX GP104 High Definition Audio Controller [1b4c:11de]Kernel driver in use: vfio-pciKernel modules: snd_hda_intel

其中 Kernel driver in use 值为 vfio-pci 即可

添加显卡到虚拟机

登录 PVE WebUI,进入虚拟机 Hardware 配置,Add => PCI Device

选择 Raw Device,在 Device 中选择 GPU,开启 All Functions ROM-Bar PCI-Express

点击 Add

解决 Linux 虚拟机中驱动签名验证问题

如果在 Linux 中使用 nvidia-smi 提示以下内容

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

并且 systemd-modules-load nvidia-persistenced.service 无法启动,执行 systemctl status systemd-modules-load.service journalctl -xeu nvidia-persistenced.service 提示以下内容

# systemd-modules-load.service
modprobe: ERROR: could not insert 'nvidia': Invalid argument
modprobe: ERROR: could not insert 'nvidia_current_drm': Key was rejected by service
modprobe: ERROR: ../libkmod/libkmod-module.c:1047 command_do() Error running install command 'modprobe nvidia ; modprobe -i nvidia-current-modeset ' for module nvidia_modeset: retcode 1
modprobe: ERROR: could not insert 'nvidia_modeset': Invalid argument
modprobe: ERROR: could not insert 'nvidia_current_drm': Key was rejected by service
Error running install command 'modprobe nvidia-modeset ; modprobe -i nvidia-current-drm ' for module nvidia_drm: retcode 1
Failed to insert module 'nvidia_drm': Invalid argument# nvidia-persistenced.service
Started (737)
Failed to query NVIDIA devices. Please ensure that the NVIDIA device files (/dev/nvidia*) exist, and that user 101 has read and write permissions for those files.
Shutdown (737)
nvidia-persistenced failed to initialize. Check syslog for more details.
nvidia-persistenced.service: Control process exited, code=exited, status=1/FAILURE

该问题大概率由 驱动签名无法验证 导致,此时请尝试在 虚拟机 BIOS 中关闭安全启动

如果出于特殊需求或环境导致无法关闭,需注册 DKMS 密钥,注册流程比较复杂且涉及 EFI 分区改动,本文不作详解

相关文章:

PVE 配置显卡直通

博客地址:PVE 配置显卡直通 配置 Device: Dell PowerEdge T630CPU: Intel Xeon E5-2696 v4 x2GPU 1: Matrox Electronics Systems Ltd. G200eR2GPU 2: NVIDIA GeForce GTX 1060 3GBOS: Proxmox VE bookworm 8.3.1 x86_64 注意事项 硬件需支持并在 BIOS 中开启 I…...

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来 在深度学习的优化中,自然梯度下降(Natural Gradient Descent)是一个强大的工具,它利用Fisher信息矩阵(FIM)调整梯度…...

ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图

在地理信息系统(GIS)领域,地表覆盖图的矢量化是一项至关重要的任务。天地图作为中国国家级的地理信息服务平台,提供了丰富且详尽的地表覆盖数据。然而,这些数据通常以栅格格式存在,不利于进行空间分析和数据…...

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言:数据字典的工程价值 在现代化全栈开发中,数据字典作为业务实体与数据存储的映射桥梁,直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…...

道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金

道可云元宇宙每日简报(2025年2月26日)讯,今日元宇宙新鲜事有: 上海青浦发布国际产业协作元宇宙平台 近日,“2025出海企业与跨境专业服务论坛”在上海青浦区徐泾镇举行。论坛上重磅发布三大全球化服务平台&#xff0c…...

[2024年下半年架构师考试真题之论文]

2024论文真题试题一(架构) 论面向服务的架构设计 Web service 是一种通过互联网协议(如 HTTP)来提供服务的软件系统,它允许不同的应用程序之间进行交互,而无需考虑它们所使用的操作系统、编程语言或硬件平台。其本质是将应用程序的功能以服务的形式暴露出来,使得其他应…...

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…...

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示,登录阿里云百炼人工智能业务控制台,创建智能体应用,智能体应用是一个agent,即提供个人或者企业的代理或中间件组件应用,对接阿里云大模型公共平台,为个人或者企业用户提供大模型应…...

【操作系统】处理机调度

处理机调度 一、调度的概念、层次1.1 三个层次1.2 七状态模型 二、调度算法的评价指标2.1 CPU利用率2.2 系统吞吐率2.3 周转时间2.4 等待时间2.5 响应时间 三、进程调度(低级调度)的时机3.1 需要进程调度的情况3.2 不能进程调度的情况3.3 闲逛进程 四、进…...

mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)

目录 mysql服务层 介绍 服务管理和公共组件 备份 NOSQL,SQL接口 介绍 nosql Parser模块(语法分析器) 介绍 词法分析 语法分析 示例 预处理器 引入 介绍 优化器 介绍 优化的必要性 基于成本的优化器 缓存 介绍 弊端 mysql服务层 介绍 数据库服务层是整个…...

将DeepSeek接入vscode的N种方法

接入deepseek方法一:cline 步骤1:安装 Visual Studio Code 后,左侧导航栏上点击扩展。 步骤2:搜索 cline,找到插件后点击安装。 步骤3:在大模型下拉菜单中找到deep seek,然后下面的输入框输入你在deepseek申请的api key,就可以用了 让deepseek给我写了一首关于天气的…...

【算法与数据结构】Dijkstra算法求单源最短路径问题

目录 Dijkstra算法 算法简介: 该算法的核心思想: 算法特点: 算法示例演示: 算法实现: 邻接矩阵存图 邻接表存图: 时间复杂度分析: Dijkstra算法 算法简介: Dijkstra算法&am…...

.CSV file input into contact of outlook with gibberish. .csv文件导入outlook, 出现乱码

workaround : 清理excel或者csv文件的格式, 使用手动先输入几个常规字, 然后使用格式刷...

StableDiffusion打包 项目迁移 项目分发 0

StableDiffusion项目迁移 0 先看了几个其他人的本地部署文章和视频,对别人的步骤做记录。(写的很潦草,只是注意一下有什么点需要注意) 虽然秋叶大佬有整合包,但是我是为了项目分发学习的,还是想自己配环境…...

关于Postman自动获取token

在使用postman测试联调接口时,可能每个接口都需要使用此接口生成的令牌做Authorization的Bearer Token验证,最直接的办法可能会是一步一步的点击,如下图: 在Authorization中去选择Bearer Token,然后将获取到的token粘贴…...

LSTM长短期记忆网络-原理分析

1 简介 概念 LSTM(Long Short-Term Memory)也称为长短期记忆网络,是一种改进的循环神经网络(RNN),专门设计用于解决传统RNN的梯度消失问题和长程依赖问题。LSTM通过引入门机制和细胞状态,能够更…...

sql server笔记

创建数据库 use master gocreate database stuuuuu//删除数据库if db_id ($$$) is not nullDrop database [$$$] go//新建表USE [studyTest] GOSET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOCREATE TABLE [dbo].[Table_1]([id] [int] NULL,[name] [varchar](10) NULL ) ON…...

AI Video Composer:基于Qwen2.5-Coder的简易开源视频创作利器

系列篇章💥 No.文章1短视频开源项目MoneyPrinterTurbo:AI副业搞起来,视频制作更轻松!2【FunClip】阿里开源AI视频剪辑神器:全面体验与教程3Tailor:免费开源 AI 视频神器,创作者必备利器4Clappe…...

AI数字人开发,引领科技新潮流

引言 随着人工智能技术的迅猛发展,AI 数字人在影视娱乐、客户服务、教育及医疗等多个领域展现出巨大的潜力。本文旨在为开发者提供一份详细的 AI 数字人系统开发指南,涵盖从基础架构到实现细节的各个方面,包括人物建模、动作生成、语音交互、…...

VoIP之音频3A技术

音频3A技术是改善语音通话质量的三种关键技术的简称,包括声学回声消除(Acoustic Echo Cancellation, AEC)、自动增益控制(Automatic Gain Control, AGC)、自噪声抑制(Automatic Noise Suppression, ANS&…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...